查看原文
其他

Play with R 第18期:类别数据的分析

荷兰心理统计联盟 荷兰心理统计联盟 2023-02-03

Chapter 18 Categorical Data


18.1 What will this chapter tell me?

Analyzing data for which we know only the frequencywithwhicheventsoccur,ortosay, categorical data.

18.2 Packages used in this chapter

Twopackageswillbeused:gmodelsandMASS, the second of whichhasalreadybeeninstalledinRby default. Codes are as follows:

install.packages("gmodels")

library(gmodels)

library(MASS)

18.3 Analyzing categorical data

The structure of the following text will be as follows:

a. Relationships between 2 categorical variables: chi-square test

b. Relationship between several categorical variables.

18.4 Theory of analyzing categorical data

Whenonlycategoricaldataareanalyzed, we analyze frequency, the number of things that fall into each combination of categories.

Then, what we have is the contingency table, as shown in Table 18.1, in which the two categorical variables are the training method and the training results.


1. Pearson'schi squaretest

The calculation ofPearson’schisquareisdoneasformula(18.1):

thegeneralideaofwhichissumofsquares.irepresentstherowsinthecontingencytable,jrepresentsthecolumns. The slight variation isthateachsquareisdividedbythemodelscore as well, a process similar as dividing sumofsquaresbydegreeoffreedominANOVA.

The observed value is what we see in the table, and we will use expected frequency as the modeledvalue,whichiscalculated as follows:

Now we have the chi-square statistics.Therelateddegreeof freedomiscalculatedas(r-1) *(c-1),whereristhenumber ofrows,andcisthenumber of columns. With thestatisticsanddegreeof freedom, we couldknowthepvalue.


Yates's correction for Pearson’s chi-square test

Given that Pearson’s chi-squaretesttendstomakeTypeIerror, Yates suggested a correction to the original formula.

Although it lowers the chi-squarevalue,ittendstobean overcorrection. The author suggested that although it's worth knowing about, it's probably best ignored.


2. Fisher's exact test

One problem of the abovestatisticsisthat,thesamplingdistribution has an approximate chi-square distribution. The larger of sample size, the better the approximation. That's why we often read thattousechi-squretest, the expected frequency in each cell must be greater than 5.

But what if the sample size is small? In these circumstances, fisher's exacttestcouldbeused,whichcouldbeimplementedinR.


3. The likelihood ratio

An alternative is the likelihood ratio test. The general idea is to create a model which could maximize the probability of getting the current data given the model.This probability willbecomparedwiththeprobability of getting the current data given the null hypothesis. The resulting statistics is:

This statistic has a chi-square distribution withthesamedegreeof freedom as the Pearson’s chi-square.This statisticispreferredwhensamplesize is small.


18.5 Assumptions of thechi squaretest

Two important assumptions underlie the chi-square test:

1. independency of the data: each person, item or entity only contributes to only one cell of the contingency table.

2. The expected frequency should be larger than 5.

Another note is that, with large sample sizes,smalldifference infrequencycouldresultinstatisticallysignificantresult. Thus, we should also look at row and column percentages when interpreting the result.

18.6. Doing the chi-square test using R

1. 有两种数据导入方法:原始数据或者加权数据

输入原始数据

catData<-read.delim("cats.dat", header = TRUE)

每一行是一个实体数据(在本例中每一行代表一只喵)

输入列联表

food <- c(10, 28)

affection <- c(114, 48)

catsTable<-cbind(food, affection)

2. 有两种方法分析数据

Running the analysis with R Commander

Data⇒Importdata⇒fromtextfile, clipboard, or URL…

Statistics⇒Proportions⇒Two-sample proportions test…

输出结果的第一部分是一张表格,会列出每种培训类型的百分比;输出的第二部分是卡方检验,可以得到卡方值为25.36,自由度为1,p < 0.5。


Running the analysis using R

跑卡方检验可以用gmodelspackage里的CrossTable() function(注意大写),这个功能根据输入的是原始数据还是列联表有两种命令形式,除了如何指定变量外,这些命令是相同的。


针对原始数据

CrossTable(predictor,outcome,fisher=TRUE,chisq= TRUE, expected =TRUE,sresid= TRUE, format = "SAS"/"SPSS")

在本例中,predictor是Training,outcomes是Dance,所以本例的命令为CrossTable(catsData$Training,catsData$Dance,fisher=TRUE,chisq= TRUE, expected =TRUE,sresid= TRUE, format = "SPSS")

针对列联表

CrossTable(contingencyTable,fisher=TRUE,chisq= TRUE, expected =TRUE,sresid= TRUE, format = "SAS"/"SPSS")

所以本例的命令为CrossTable(catsTable,fisher=TRUE,chisq= TRUE, expected =TRUE,sresid= TRUE, format = "SPSS")

CrossTable() 函数的结果输出

结果输出(如下图18.2)包括对于每种训练组合(食物或情感),(按顺序)给出猫的数量,预期频率,单元格的卡方贡献,行比例,列比例,总比例,和标准化残差(下文会具体讲)。

在继续查看检验统计数据本身之前,至关重要的是,我们检查是否满足卡方假设。假设在2×2的表(这就是我们在这里)中,所有预期的频率都应大于5。

Pearson’s chi-square = 25.36

Pearson’s Chi-squared test with Yates’ continuity correction =23.52


3.  用标准化残差分解显著的卡方检验

分解显著的卡方检验的一种非常简单的方法是使用我们已经拥有的数据-标准化残差。就像回归一样,残差只是模型预测(预期频率)与实际观测到的数据(观测频率)之间的误差:

残差: residualij= observedij – modelij (i和j分布表示列联表的行和列)

标准残差:

这个方程是等式(18.1)的一部分,唯一的区别是等式(18.1)看到是方差,而现在看的只是偏差,因为如果不打算把这些偏差或者残差用来相加的时候是不需要平方的(平方的主要目的是避免在相加时那些正值和负值相抵消,而单独看的时候是不需要的)。

此处有两个关于标准残差重要的点:

1.卡方统计量是这些标准化残差平方的总和,如果我们要分解对卡方统计量的整体有贡献的因素,可以查看各个标准化残差。

2.这些标准化残差与其他残差相同(请参见7.7.1.1节),因为每个残差都是z-score。这就意味着仅查看标准化残差就可以评估其重要性(请参阅第1.7.4节)。正如我们以前所学的,如果该值在±1.96之外,则在p <.05显著;如果该值在±2.58之外,则在p <.01显著效;如果在±3.29之外,则p <.001

要想在列联表的每个单元格中获取标准化残差,可以在CrossTable()函数中包含sresid = TRUE。在输出18.2中,这些残差是每个单元最下面的那行。因此,有四个残差:每种残差分别用于训练类型和猫是否跳舞。当使用食物作为奖励时,标准化的残差对于那些跳舞的猫(z = 3.57)和那些没有跳舞的猫(z = -2.79)都是很重要的,因为这两个值都大于1.96(当忽略减号时)。加号或减号告诉我们有关效果方向的信息,单元格中的计数和预期计数也是如此。我们可以将这些标准化残差解释为:当以食物为酬劳时,猫的舞动明显多于预期,没有舞动的猫明显少于预期。当使用情感作为奖励时,标准化的残差对于跳舞的猫(z = -1.73)和不跳舞的猫(z = 1.35)都不重要,因为它们都小于1.96(同意忽略减号时)。这告诉我们,当用情感来奖励时,有多少只猫跳了和没跳舞。简而言之,将食物用作奖励时的单元格都对总体卡方统计有显着贡献,奖励与舞蹈之间的联系主要由食物作为奖励来驱动。

4. 计算effect size

分类变量常用的效应量是oddsratio

odds dancing after food =number that had food and danced / number that had food but didn’t dance

odds dancing after affection =number that had affection and danced / number that had affection but didn’t dance

odds ratio= odds dancing after food / odds dancing after affection=6.65

这表明当一只喵进行食物训练,那么他跳舞的几率比对他们的感情训练时高6.65倍。这是比较简单地计算odds ratio的方法,还有一些复杂的方法,比如上一小节里的在CrossTable() function 里加上 fisher = TRUE,就可以得到odds ratio=6.58和其置信区间(2.84, 16.43)。

注意,odds ratio的置信区间不可以包括1,因为值为1 就意味着食物训练后跳舞和不跳舞的几率是一样的,odds ratio=1是比值比方向变化的分水岭。

5. 报告卡方检验的结果

在报告皮尔逊的卡方值时,我们只需说明检验统计量的值(χ2)及其相关的自由度和显著性。重现列联表也很有用,报告odds ratio及其置信区间。比如在本例中是这样报告的:

There was a significant associationbetweenthetypeof trainingandwhetherornotcatswoulddance χ2(1) = 25.36,p< .001. This seems to represent the fact that, based on the odds ratio, the odds of cats dancing were 6.58 (2.84, 16.43) times higheriftheyweretrainedwithfoodthan if trained with affection.


18.7. 分类变量:对数线性回归分析

我们已经学习了两个分类变量的情形。然而,我们经常想分析三个变量或者三个变量以上的复杂列联表。例如,我们为什么不以刚才收集并且使用过的关于70个狗的样本数据为例?我们也许想比较狗和猫的行为差异。现在我们有三个变量:动物(狗或猫),训练(以食物作为奖励或者以爱作为奖励)和跳舞(它们是否跳舞)。这个就不能利用Pearson chi-squared进行分析,可以利用一个叫做对数线性分析的技术进行替代。

1. Chi-square 作为回归

开始前,让我们看一下一个简单的chi-square例子是如何被运用到回归模型中的。尽管我们已经知道足够多的chi-square 检验的知识,如果我们想理解更多复杂的情形,如果我们将我们的模型简化成线性模型,那么我们的生活将会简化很多。在这本书里所有的广义线性模型我们都可以简化为以下形式:


例如,当我们遇到多元回归(第七章),我们可以看到这个模型被写成以下形式(公式7.9):


同样的,当我们碰到单因素ANOVA(单因素方差分析),我们接受这种回归模型,并将它概念化于我们的Viagra例子(公式10.2):


这里t-test也是以相同的方式进行概念化。对于所有的情况,均使用相同的基本方程式;只用模型的复杂度在改变。对于分类数据,我们以相同的数据模型和回归方式来产生线性模型。在我们目前的例子中我们有两个分类变量:训练(食物或爱)和跳舞(跳舞或者不跳)。全部变量有两个分类并且我们可以以虚拟变量(0和1)来代替分类,即一类编码为0,另一类编码为1。对于训练来说,我们可以编码“食物”为0,“爱”为1,然后我们可以编码跳舞为0,不跳舞为1(表18.2)。


当你回想到多因素方差分析的时候(12.3),这个以两个变量作为决策变量的情形和多因素方差分析的时候很像。在那种情形中我们以双变量广义线性模型(12.1):

其中A代表第一个变量,B代表第二个变量,AB代表两个变量的交互项。因此,我们可以利用类似于多因素ANOVA的方式引入虚拟变量来构造线性模型。交互项只是将“跳舞”变量与“训练”变量相乘(注意表18.2,如果这个解释不通可以回顾12.3,因为这个编码方式与这个例子相同):


然而,因为我们用了分类数据,为了让模型线性化事实上我们不得不采用log值(见第八章)并且真实的模型将成为:

训练,跳舞和交互项可以用0和1来代替分类,取决于类别组合,例如我们看到的(表18.2)。因此,要弄清楚b-value在模型中代表什么,我们可以在t-test和ANOVA里面做同样的事情,即我们用0和1来代替训练和跳舞的分类将会发生什么事情。


在开始前,让我们看看当训练和跳舞的分类均为0的时候会发生什么。这代表着分类为猫对应的为奖励是食物和会跳舞。当我们将这种模型用于t检验和ANOVA并从我们的观测数据得到结果:我们利用组的均值(9.4.2和10.2.3)。然而,对于分类变量,均值是毫无意义的,因为我们没有在定序型数据或定距型数据中做任何测量,相反,我们仅有频率数据。因此,我们使用观测值频率(优于观测均值)作为我们的输出。在表18.1我们看到28只猫是以食物作为奖励并且会跳舞。如果我们用这个作为观测值的输出,然后模型将会写为(如果我们暂时忽略误差项):


对于猫,以食物作为奖励和会跳舞,那么训练和跳舞这两个变量和它们的交互项将为0并且公式简化为:

因此,当所有的分类都为0的时候,b0在模型中代表观测值的log值(对数值)。因此它是基本类别观测值的对数值(在本例中为猫)。


现在,让我们看一下当猫以爱作为奖励并且跳舞。在这个情况中,训练这个变量为1然后跳舞这个变量和交互项始终为0。我们的输出变成了猫且以接受爱和跳舞作为新分类变量的观测频率(从表18.1我们知道值为48)。因此公式变成了:


记住b0为猫且分类变量为以食物作为奖励及会跳舞,我们得到:


比较重要的事情是b1是为猫且分类变量为以爱作为奖励及会跳舞的观测频率的对数值与为猫且分类变量为以食物作为奖励及会跳舞的观测频率的对数值之差。换种说法,在跳舞的猫群中,b1代表了接受食物奖励的猫和接受感情训练的猫之间的差异。


现在,让我们看看结果是猫但分类变量为以食物作为奖励且不会跳舞。在这种情况下,训练变量为0,跳舞这个变量为1并且交互项仍然为0.我们的输出变成了结果为猫以食物作为奖励但不跳舞的观测频率(表18.1 值为10)。因此,等式变成了:

记住b0为猫且分类变量为以食物作为奖励及会跳舞,我们得到:


还有个重要的事情是是b2是为猫且分类变量为以爱作为奖励及会跳舞的观测频率的对数值于为猫且分类变量为以食物作为奖励但不会跳舞的观测频率的对数值之差。换种说法,在以食物作为奖励的猫群中,b2代表了跳舞的猫和不会跳舞的猫之间的差异。


最终,我们看看以爱作为奖励并且会跳舞。在这种情况下,训练和跳舞变量的值都是1并且交互项(跳舞变量乘训练变量的值)也为1。当我们知道b0,b1和b2的意义我们也可以将它们代替。输出为结果是猫且分类变量为以爱作为奖励但不会跳舞的观测频率的对数值(表18.1,值为114)。因此,这个等式变为(我用速记A表示感情,F表示食物,Y表示肯定,N表示否定):

所以,b3在模型中是用于比较以爱和食物作为奖励但猫不会跳舞与以爱和食物作为奖励且猫会跳舞之间的差异。换句话说,这比较的是当猫不会跳舞的训练效果和猫会跳舞的训练效果的差异。


最终的模型:

我们标记下比较重要的事情,除了我们处理对数转换后的值(可以与12.3比较,看看有多相似),其他都与多因素ANOVA分析相似。在这种情况下,你仍然不应该相信我,这可以作为广义线性模型,我准备了一个名为CatReression.dat,其中包含两个变量:跳舞(0 = no,1 = yes)和训练(0 = 食物,1 = 爱)以及交互项。这里有一个观测变量包含结合了跳舞和训练变量的观测频率(表18.1)。最终,这里有一个称为LnObserved的变量,它是这些观测频率的自然对数(请记住,在本节中,我们已经处理过观测值的对数值)。



输出结果18.4显示了回归的结果系数。重要的事情是要注意常数:b0为3.332,训练这个变量的β值b1为0.539和跳舞这个变量的β值b2为-1.030,这两个值都进行了四舍五入,交互项的系数b3为1.895这里有一个比较有意思的点:所有的标准误差都为0(或很接近于0)。换句话说,这个模型没有误差(这就是为什么没有显著性检验的原因)。这是因为各种变量的组合完全解释了观测值,这个即是我们熟知的饱和模型,我们稍后再说这个值,请把它记住。暂时,我希望说服你接受chi-square被概念化为一个线性模型。

这非常好,但是这一节的标题暗示你chi-test检验将是如何可以被概念化成线性模型。基本上,chi-test检验检测的是两个变量是否独立;因此,将不会考虑两个变量间的交互效应,


只考虑它们本身的效应。因此,我们可以将chi-square检验以相同的方式概念化为饱和模型(自由度为0的模型)。除了我们不包含交互项,如果我们移除交互项,我们的模型将成为:

对应新模型,我们不能像预测饱和模型的观测值那样预测这个新模型的观测值,因为我们缺失了一些信息(交互项)。因此由于模型的改变,输出结果将会改变并且β值也会改变,我们之前看过的卡方检验是基于“预期频率”的。因此,如果我们将chi-square检验概念化为线性模型,那么我们的结果将是这些期望值。如果你回顾本章的开始,您将看到我们已经有了基于该模型的期望频率。我们可以基于这些期望值重新计算β值:


对于猫即以食物作为奖励和会跳舞,那么训练和让跳舞变量将是0,所有公式简化成:

因此,b0在这个模型中代表所有的分类变量为0时期望值的对数值。

当我们关注猫且以爱作为奖励和会跳舞,训练变量为1且跳舞变量为0。我们的输出现在变成了期望值为猫且以爱作为奖励和会跳舞:

重要的事情是此时b1是猫且以爱作为奖励和会跳舞的期望频率的对数值与是猫且以食物作为奖励和会跳舞的期望频率的对数值的差。事实上,这表示全体会跳舞的以爱作为奖励的猫和全体会跳舞的以食物为奖励的猫的差异:ln(162) - ln(38) = 1.45。简单点说,这代表训练这个变量的主效果。

我们回过头来看猫以食物作为奖励但不跳舞的情况,训练变量为0,跳舞变量为1,我们的结果变成了猫以食物作为奖励但不跳舞的期望频率:


因此,b2是猫且以食物作为奖励和是否会跳舞的期望频率的对数值的差,事实上,这表示以食物为奖励的全体会跳舞的猫和全体不会的猫的差异:ln(124) - ln(76) = 0.49,简单点说,这代表跳舞这个变量的主效果。


我们可以看下式子:


最后的chi-square模型:

残差为:

这种情况下,模型只是为chi-square检验计算预期频率,因此残差是观测频率和预期频率之间的差。

这说明了chi-square是如何作为线性模型来工作的,就像回归和ANOVA,β值告诉我们有关两个变量类别的频率相对差异的一些信息。如果解释不通,那么通过本节我想让大家知道chi-square(大体上是分类变量的数据分析)可以被表示为线性模型(对数化)。我们可以用虚拟变量代替分类变量来表示,就像是我们在做回归和ANOVA那样,并且β值可以项回归和ANOVA那样以同样的方法计算出来。对应ANOVA,这些β值代表特定类的均值与对照类的差异。对于分类变量,β值代表同样的事情,唯一不同的是我们并不关注均值的差异,我们关注期望值。掌握这想法(对回归,t检验,ANOVA和分类变量数据的分析)是有意义的。

2. 对数线性化分析

在上一节中,我们的脑细胞几乎消耗在如何将分类变量分析看作是另一种形式的回归。

我们通过R的普通回归来跑一次数据以证明我没有胡言乱语。此时我顺便说一句“模型没有误差”然后告诉你这不是饱和模型,不要太担心太多,因为我将会做出解释并且证明给大家看。这似乎是一个很好的回避策略,但是我必须解释下发生了什么。


开始前,我希望你会为分类变量可以被表示成另一种形式的线性模型这个主意感到高兴,当然我们采用的是对数值(这就是我们为什么称之为对数线性回归分析的原因)。我们希望你已经很了解ANOVA和线性回归了,我们可以拓宽任意的线性模型包括任意数量的决策变量和这些决策变量的交互项。因此,如果我们可以根据线性模型来表示两变量的分类分析,你不应该为你发现如果我们有两个及以上变量且没问题而感到惊奇:我们可以以增加任意的决策变量以及它们的交互项来拓宽这个简单的模型。如果我们以线性模型来思考事物,就像多元回归和ANOVA一样,这就是你需要知道的全部。这样就很好概念化理解模型是如何以合并新变量来拓展模型的。所以,例如假设我们在ANOVA中有三个决策变量(A,B和C)并且我们以三个双变量交互项结尾(AB,AC,BC)和一个三变量交互项结尾(ABC),因此线性模型是:


相同的方式,如果我们在相同的模型中的分类分析中有三个变量,每一项都取对数:

显然,从模型中计算出beta值和期望值变得相当麻烦和混乱,但是这就是我们发明计算机的原因,因此我们不必担心。对数线性分析就是基于这些原理。然而,我们在二元变量的情况下看到过,当我们的数据是分类变量的并且包含所有可变项时(主要影响和相互作用),我们没有误差:我们可以完全预测结果。

所以我们以复杂模型开始,我们没有误差。对数线性分析的工作就是尝试寻找一个没有预测能力损失的更简单的模型。因此,对数线性分析通常以向后消除的原理进行工作(我们在多元回归中也用同样的方式)。我们以饱和模型开始,然后从模型中移除决策变量,然后使用这个新模型。我们预测我们的数据(计算期望频率,就像chi-square一样)然后查看模型拟合数据的程度(即预期频率是否接近观察到的频率?)。如果新模型的拟合度与更复杂的模型相差不大,则我们放弃复杂的模型,转而使用新模型。换句话说,我们假设我们删除的项不会显著影响模型预测能力。

但是,我们不是会随机删除项,而是会逐级删除。因此,我们从饱和模型开始,然后删除最高阶的交互项,并评估模型效果。如果删除交互项对模型没有影响,那么显然这个交互项没有太大影响;因此,我们剔除它,并且继续检测低一阶的交互项,并判断是否有显著影响。如果删除这些交互项没有影响,那么我们继续寻找具有主要影响的项,直到我们找到一个影响模型拟合效果的项(如果已经被剔除)。

为了更具体地说明这一点,在对数线性分析的开头,我让你想像一下,我们将扩展我们的训练和跳舞这个例子,加入狗这个样本。因此,我们现在有了三个变量:动物(狗或猫),训练(食物或爱作为奖励)和跳舞(跳舞还是不跳舞?)。就像在ANOVA中一样,结果有三个单变量的影响:

三个双变量交互项:

和一个三变量交互项:

当我谈到向后消除时,我的意思是对数线性分析开始于包括所有这些三个单变量;然后,我们选择最高阶的交互项(在这种情况下,(动物×训练×跳舞)的三变量交互)并将其删除。我们构造一个新的没有这种相互作用的模型,并从模型中计算出期望频率。我们

(然后,计算机)将这些期望频率(或模型频率)和使用似然比统计量的标准方程式观察到的频率(请参阅第18.4.3节)作比较。如果新模型极大地改变了似然比统计量,则删除此交互项会对模型的拟合产生重大影响,我们知道这种影响在统计上很重要。如果是这样的话,我们会停在那里说我们之间存在着重要的三变量交互项!我们不会测试任何其他项的效果,因为使用分类数据时,所有低阶效应都在高阶效应中被消耗。但是,如果剔除三变量交互项不会显着影响模型的拟合度,那么我们将继续进行低阶交互项的检测。因此,我们看一下动物×训练,动物×跳舞和训练×跳舞这几个双变量交互项被剔除所产生的影响。对于每个模型,我们再次计算期望值并且与使用似然比统计量计算的观测值进行比较。同样,如果有显著影响的话,这些模型的确会导致似然比发生重大变化,则该项将被保留,我们不会继续进行下面的检测(因此,如果“动物×训练”交互非常重要,则不会关注动物或训练这两个单变量项的效应)。但是,如果似然比不变,则分析剔除时有问题的交互项,然后继续上述检测,看效果。

我曾提到,似然比统计量(请参阅第18.4.3节)用于评估每个模型。从方程式中应该清楚如何使该方程式适合任何形式模型:观测值在整个过程中都是相同的,并且模型频率仅是被测试模型的期望频率。对于饱和模型,这些统计信息将始终为0(因为观测频率和模型频率相同,因此观测频率与模型频率之比为1,并且ln(1)= 0),但是正如我们所看到的,在这种情况下,它将提供一个检测模型对观测频率的拟合程度的方法。去测试新模型是否改变了似然比,我们所需要做的就是取模型的似然比,并从中减去以前模型的似然统计量(前提是模型是分层结构的):


我在本节中尝试为您提供对数线性分析的工作原理,实际上太多地涉及到计算的细节。我试图给你看我们如何将卡方分析概念化为线性模型,然后依靠我之前告诉你的ANOVA,希望你可以推断出这些概念性想法以大致了解正在发生的事情。你们中间的好奇者可能想知道一切的计算方式,对于这些人,我有两句话要说:“我不知道”和“我知道一个可以买到紧身衣的好地方”。如果您对此感兴趣,那么Tabachnick和Fidell(2007)有提到,撰写了关于该方面的精彩详尽且清晰的章节,坦率地说,这种微不足道的尝试令人感到羞耻。不过,假设您很乐意生活在相对的无知之中,我们现在来看一下如何进行对数线性分析。


18.8 对数线性回归分析的假设

对数线性分析是chi-square检验的扩展,因此具有类似的假设;也就是说,数值应填放于列联表的一个单元格(即表必须是独立的),并且预期频率应足够大以进行可靠的分析。在具有两个以上变量的对数线性分析中,最多可以20%的期望频率是小于5的单元格;但是,所有单元格都必须期望频率大于1。如果这个假设被打破,结果将导致减小测试能力,实际上如此引人注目,以至于根本不用理会分析。解决具有期望频率的问题的方法是:(1)将数据压缩到一个变量内(最好是您最不希望影响的变量!);(2)其中一个变量的压缩级别;(3)收集更多数据;或(4)接受测试能力减少。

如果你想压缩一个变量的数据,那必须进行如下操作:

1. 高维的交互项应该不重要。

2. 涉及要剔除的变量的至少一个低阶交互项应该不重要。

让我们以我们一直在使用的例子为例。假设我们要删除动物这个变量。然后,为了使其有效,动物×训练×跳舞这个三项交互变量应该不重要,“动物×训练”或“动物×跳舞”之间的互动也应该不重要。你才可以压缩变量中的类别。因此,如果您有一个变量与春季,夏季,秋季和冬季有关的“季节”,在“冬天”你只有很少一点观测值,你可以考虑将变量减少为三类:春季,夏季,也许是秋/冬。但是,你实际上应该只合并它建立模型时的类别并结合理论意义。最后,有些人只需添加表中所有单元格的常量,但是这样做确实没有意义,因为它不会解决问题。

18.9 Loglinear analysis using R

1. Initial considerations

为猫和狗创建单独的dataframes,我们执行:

第一个命令创建了一个叫做justCats dataframe基于整个dataframe (catsDogs),但只包括病例的变量动物正好等于“猫”这个词。第二个命令做了很多相同的工作,但是只选择了dogs。在创建了这两个新的数据aframes之后,我们可以使用CrossTablet)命令通过执行以下命令来生成它们各自的列联表:

这些命令生成一个列联表,其中包含猫(第一个命令)和狗(第二个命令)的训练和舞蹈变量。这些命令可能看起来很长,但这只是因为我们要求禁用了整个比例(prop)。t =FALSE),列比例(prop.c=FALSE),卡方比例(prop)。这样它们就不会出现在输出中(参见R's Souls的技巧18.2)。我们还要求标准化残差值(sresid = TRUE与format = "SPSS "组合使用),因为这些值在解释时可能会很方便。

2.Loglinearanalysisasachi-square test

在本例中,我们希望只查看猫,因此我们将使用上一节中生成的justCats数据aframe,我们希望根据训练和它们是否跳舞(Dance)来对案例进行分类。

该命令将创建一个名为catTable的对象,该对象接受justCats数据aframe并根据变量Training和Dance的级别对案例进行分类。如果您通过执行catTable的名称来查看它,就会发现它是一个非常简单的计数表

一般来说,我们会写“-a+b”其中a和b是预测变量;因为我们想要饱和模型中的所有效果,所以我们的模型将是-Dance + Training + Training: Dance。因此,我们可以通过执行:

我们期待38%接受食物训练的猫会跳舞,38%接受情感训练的猫会跳舞。我们可以通过向loglm()函数添加fit = TRUE来获得这些期望值,loglm()函数告诉命令也计算拟合(期望)值。我们将把这些值和比例进行比较,然后做一个显著性检验看它们是否不同。(这正是我们在卡方检验中所做的。)我们以与饱和模型相同的方式创建这个新模型,只是我们更改了模型的名称,并省略了交互项:

最后,我们可以创建一个mosaic plot,mosaic plot是频率数据的图形表示。通过观察mosaic plot,我们可以了解不同类别的相对频率。要在R中做一个mosaic plot,可以使用mosaic-plot()函数,其一般形式为:

因此,我们只需要输入一个关联表,然后我们可以使用main =选项 提供一个标题,并通过包含shade =选项 来请求阴影来显示情节的哪些区域是重要的。我们可以从我们的两个模型中创建期望值的plots:它们存储在一个名为fit的变量中,该变量附加到每个模型中,因此我们可以使用modes$fit访问它们:

为饱和模型创建一个mosaic plots,我们可以简单地执行:

“这个命令将创建一个猫饱和模型的期望值的图,它给它一个标题‘猫:饱和模型’,并使它的阴影突出显着的领域类似,第二个模型的期望值可以通过执行:

3.Outputfromloglinearanalysisasachi-square test

实际上,统计量是0 (p-value是1),因为这个模型非常适合数据;期望值与实际数据相同

在第二个模型中,我们去掉了交互项。这个术语允许跳舞的猫的比例随着条件的不同而变化。注意,输出18.8中的似然比和卡-索阿检验值与我们计算的值相同:

FIGURE 18.4 MosaicplotsummarizingtCatSaturatedModel


最终,我们试图找到最简洁的模型,不明显偏离数据;在这种情况下,这是饱和模型,因为其他模型很重要(因此数据的拟合性很差),下图显示了mosaic plot没有交互模型的拟合值条件:这里的所有残差为零(与固体边界都是白色盒子)。结果显示,不管猫接受了什么样的训练,两组中跳舞的比例都是一样的。

4.Loglinear analysis

回想一下,如果我们有两个变量,那么我们有主要的效果:训练+舞蹈,和交互效果(训练x舞蹈)。有三个可变的,我们有:

你可以看到,随着变量数量的增加,影响的数量增加了4,甚至更多。有四个变量(我称之为a、b、c和d,因为我没有任何想象力),我们有:

不管你有多少效果,原理都是一样的:你从饱和的模型开始,然后移除效果,直到模型变得有意义为止(例如,,明显偏离原始数据)。当模型显著时,返回到最后一个不显著的模型并对其进行解释(因为给定第一个可用的预测变量,它将是您所能实现的最佳拟合)

首先,我们需要使用xtabs()生成列联表,我们可以这样做:

这将使用原始的dataframe (catsDogs),并创建一个基于动物、训练和舞蹈变量的列联表。结果的列联表存储为catdog特遣队表,我们将在loglinear分析中使用它;它是这样的:

我们从估计饱和模型开始,我们知道这个模型将用卡方等于0来完美地拟合数据。我们称这个模型为caturated,因为我觉得需要一个与垃圾猫相关的双关语,我们可以用与之前相同的方式创建这个模型:

第一个命令根据称为catdog特遣队表的意外事件表中的所有主要效果和交互作用创建一个称为caturated的模型。第二个命令总结了这个模型;Output 18.9显示了主要的统计信息,正如我们所期望的,它的“似然比为0,p值为1,因为它与数据完全吻合。”

接下来,我们将使用所有主要效果和双向交互来拟合模型。换句话说,我们将移除三种相互作用;因为这个模型告诉我们去除三种相互作用的效果,我们称之为“三通”。我们可以创建这个模型通过respecifying模型所有条款除了三方互动:

要从饱和模型中移除三种交互作用,我们将执行:

我们可以通过执行以下操作来对这个模型进行总结:

结果输出的相关部分在output 18.10中。该模型的似然比为20.30,其中1 df和p <.001。这个模型似乎不太适合数据。

在标为P(>Delta(Dev))的列中,我们看到了模型之间差异的P值。这个值小于0.001,因此非常显著。这个重要的结果告诉我们,删除三方交互使模型对数据的拟合度明显降低。换句话说,三方交互是使模型适合的一个重要因素。这也意味着为了解释的目的,我们需要坚持饱和模型。我们现在应该停止并得出结论,即三方的相互作用是重要的,并解释其影响。

为了便于说明,让我们假设我们不需要停止并继续。让我们创建系统地消除双向交互的模型:

第一个命令创建一个名为trainingDance的模型,该模型采用threeWay模型并删除Training x Dance interaction(即,它既不包括这种相互作用,也不包括三方面的相互作用)。第二种方法也一样,只是去掉了动物x的舞蹈互动。最后的命令再次使用threeWay模型,但这次取消了训练x动物交互作用。我们可以比较这些模型没有三方的模型交互使用方差分析()函数:方差分析(三因子,trainingDance)方差分析(三因子,animalDance)方差分析(三因子,animalTraining)输出18.12显示了结果的比较,显示了我们的影响消除训练x舞蹈交互:

输出18.12显示了第一次比较的结果,显示了去除训练x舞蹈交互的效果:似然比差(or delta)为8.6(28.9-20.3),2-1 = 1个自由度。在p=时,这种差异是显著的。003,因此我们不能用外在的语言将训练x舞蹈的交互作用从模型中去除,这种交互作用也很重要:

输出18.13显示了去除动物x舞蹈效果的效果。现在我们得到是1 df的似然比差是13.75,p值<.001。因此,我们不能删除动物x的舞蹈效果而不使模型的拟合更差。

输出18.14显示了去除动物x训练交互作用的效果。差值是1 df的13.76。再一次,这是非常重要的,因此,这种影响不能使配合更糟:

下一步是尝试解释三向交互(请记住,我们只是为了说明而查看双向交互)。我们能做的第一个有用的事情是绘制所有不同类别的频率。你应该用百分比来表示频率。你也应该看看马赛克图。我们可以通过使用th mosaicplot)函数得到这个plot,并将其应用到我们的列联表中:

FIGURE 18.6 Mosaic plot of the cat and dog data


这个情节展示了我们已经知道的关于猫的事情:它们会在有食物的时候跳舞(或者做其他事情),但是如果你用感情来训练它们,它们就不会感兴趣。另一方面,狗会在有情感的情况下跳舞(实际上,不管奖励是什么类型,狗都会比不跳舞的狗跳得多,但在有情感的训练方式下效果更明显)。事实上。这两种动物对食物训练都表现出相似的反应,只是猫不会为了感情做任何事。所以猫是明智的动物,它们只在有事情做的时候才会做愚蠢的事情。食物),而狗只是简单的愚蠢。

18.10 跟进对数线性分析

另一种解释三方交互的方法是对一个变量进行不同层次的卡方分析。例如,Animal ×Training×Dance三者的交互作用,我们可以对Training和Dance进行卡方检验,但是对dog和cat分别进行(事实上对cat的分析将与我们对卡方检验的结果相同)。然后你可以比较不同动物的结果。结果如下图:


18.11 对数线性分析中的效应量大小

与Pearson’s chi-square一样,报告效果最优雅的方法之一是用优势比表示。对于列联表,优势比是最容易理解的,因此,如果你有重要的高阶交互作用,或你的变量有两个以上的优势比,值得尝试将这些影响分解为逻辑上计算优势比,它们反映了交互作用的性质。

这告诉我们,如果狗(dog)被用食物训练(training),它们跳舞(dance)的几率是得到感情(affection)奖励的0.35倍(换句话说,它们不太可能跳舞)。另一种说法是,如果用食物而不是感情来训练,他们跳舞的几率要低1/0.35=2.90倍。相比之下,如果用食物(food)而不是感情(affection)来训练猫跳舞的几率要高出6.58。正如您可以看到的,比较狗(dog)与猫(cat)的优势比是在模型中表示为三个交互项。

18.12 对数线性分析的报告结果

在报告对数线性分析时,您需要报告最终模型的似然比统计量,通常仅用χ2表示。对于任何重要的项,您都应该报告卡方变化。对于此示例,我们可以报告:对数线性三种分析方法产生了保留所有影响的最终模型。该模型的似然比为χ2(0)=0,p=1,表明最高阶交互作用(the Animal × Training × Dance)显著,χ2(1)=20.31,p<.001。为了打破这种影响,分别对dog和cat进行了Training和Dance变量的卡方检验。在cat变量上,Training与cat是否会dance有显著的相关性,χ2(1)=25.36,p<.001;在dog变量上,χ2(1)=3.93,p<0.05。优势比表明,cat在进食(food)后跳舞(dance)的几率比情感(affection)高6.58,但狗的几率只有0.35(也就是说,在dog身上,如果接受食物训练(food training),跳舞(dance)的几率比情感低2.90倍。因此,这项分析似乎揭示了dog和cat之间的一个根本区别:cat更有可能为food而不是affection而跳舞,而dog更有可能为affection而不是food而跳舞。


本期参与人员

马兰明  上海大学            企业管理

原显智  天主教辅仁大学(台湾省新北市)        工业与组织心理学

曹文蕊  乌特勒支大学   工业与组织心理学

罗雅琛  佛罗里达州立大学         心理测量

胡砚冰  西北师范大学  社会认知,自我声音识别

李润泽  华中农业大学     生物信息              

往期回顾

2019年荷兰心理统计联盟推文合集

Play with R 第15期:Non-parametric tests

Play with R 第14期:混合设计方差分析

Play with R 第13期:重复测量设计(GLM 4)

Play with R 第12期:多因子方差分析

Play with R 第11期:协方差分析

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存