(这个回答比较长,最后有总结)
您对所描述场景中的嵌套和交叉随机效应的理解没有错。但是,您对交叉随机效应的定义有点狭窄。交叉随机效应的更一般定义很简单:不是嵌套的。我们将在这个答案的最后看到这一点,但大部分答案将集中在你提出的场景上,即学校内的教室。
首先要注意:
嵌套是数据的属性,或者更确切地说是实验设计,而不是模型。
还,
嵌套数据可以至少以两种不同的方式进行编码,这是您发现问题的核心。
您的示例中的数据集相当大,因此我将使用互联网上的另一个学校示例来解释这些问题。但首先,请考虑以下过度简化的示例:
在这里,我们有嵌套在学校中的类,这是一个熟悉的场景。这里重要的一点是,在每所学校之间,类具有相同的标识符,即使它们是不同的,如果它们是嵌套的。Class1
出现在School1
和School2
中School3
。但是,如果数据是嵌套的,则Class1
in与in和School1
中的度量单位不同。如果它们相同,那么我们将遇到这种情况:Class1
School2
School3
这意味着每个班级都属于每个学校。前者是嵌套设计,后者是交叉设计(有些人可能也称其为多重成员。编辑:有关多重成员和交叉随机效应之间差异的讨论,请参见此处),我们将在lme4
使用中制定这些:
(1|School/Class)
或等效地(1|School) + (1|Class:School)
和
(1|School) + (1|Class)
分别。由于随机效应是否存在嵌套或交叉的模糊性,正确指定模型非常重要,因为这些模型会产生不同的结果,如下所示。此外,仅仅通过检查数据是不可能知道我们是否有嵌套或交叉随机效应。这只能通过数据和实验设计的知识来确定。
但首先让我们考虑一下 Class 变量在学校之间被唯一编码的情况:
关于嵌套或交叉不再有任何歧义。嵌套是显式的。现在让我们通过 R 中的示例来看看这一点,其中我们有 6 所学校(标记为I
- VI
)和每所学校内的 4 个班级(标记a
为d
):
> dt <- read.table("http://bayes.acs.unt.edu:8083/BayesContent/class/Jon/R_SC/Module9/lmm.data.txt",
header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
> # data was previously publicly available from
> # http://researchsupport.unt.edu/class/Jon/R_SC/Module9/lmm.data.txt
> # but the link is now broken
> xtabs(~ school + class, dt)
class
school a b c d
I 50 50 50 50
II 50 50 50 50
III 50 50 50 50
IV 50 50 50 50
V 50 50 50 50
VI 50 50 50 50
从这个交叉表中我们可以看到,每所学校都出现了每个班级 ID,这满足了您对交叉随机效应的定义(在这种情况下,我们有完全交叉随机效应,而不是部分交叉随机效应,因为每个班级都出现在每所学校)。所以这与我们在上面第一个图中的情况相同。但是,如果数据真的是嵌套的并且没有交叉,那么我们需要明确地告诉lme4
:
> m0 <- lmer(extro ~ open + agree + social + (1 | school/class), data = dt)
> summary(m0)
Random effects:
Groups Name Variance Std.Dev.
class:school (Intercept) 8.2043 2.8643
school (Intercept) 93.8421 9.6872
Residual 0.9684 0.9841
Number of obs: 1200, groups: class:school, 24; school, 6
Fixed effects:
Estimate Std. Error t value
(Intercept) 60.2378227 4.0117909 15.015
open 0.0061065 0.0049636 1.230
agree -0.0076659 0.0056986 -1.345
social 0.0005404 0.0018524 0.292
> m1 <- lmer(extro ~ open + agree + social + (1 | school) + (1 |class), data = dt)
summary(m1)
Random effects:
Groups Name Variance Std.Dev.
school (Intercept) 95.887 9.792
class (Intercept) 5.790 2.406
Residual 2.787 1.669
Number of obs: 1200, groups: school, 6; class, 4
Fixed effects:
Estimate Std. Error t value
(Intercept) 60.198841 4.212974 14.289
open 0.010834 0.008349 1.298
agree -0.005420 0.009605 -0.564
social -0.001762 0.003107 -0.567
正如预期的那样,结果不同,因为m0
是嵌套模型而m1
交叉模型。
现在,如果我们为类标识符引入一个新变量:
> dt$classID <- paste(dt$school, dt$class, sep=".")
> xtabs(~ school + classID, dt)
classID
school I.a I.b I.c I.d II.a II.b II.c II.d III.a III.b III.c III.d IV.a IV.b
I 50 50 50 50 0 0 0 0 0 0 0 0 0 0
II 0 0 0 0 50 50 50 50 0 0 0 0 0 0
III 0 0 0 0 0 0 0 0 50 50 50 50 0 0
IV 0 0 0 0 0 0 0 0 0 0 0 0 50 50
V 0 0 0 0 0 0 0 0 0 0 0 0 0 0
VI 0 0 0 0 0 0 0 0 0 0 0 0 0 0
classID
school IV.c IV.d V.a V.b V.c V.d VI.a VI.b VI.c VI.d
I 0 0 0 0 0 0 0 0 0 0
II 0 0 0 0 0 0 0 0 0 0
III 0 0 0 0 0 0 0 0 0 0
IV 50 50 0 0 0 0 0 0 0 0
V 0 0 50 50 50 50 0 0 0 0
VI 0 0 0 0 0 0 50 50 50 50
根据您对嵌套的定义,交叉表显示每个级别的班级仅出现在一个级别的学校中。您的数据也是如此,但是很难用您的数据来证明这一点,因为它非常稀疏。两种模型公式现在将产生相同的输出(m0
上面的嵌套模型的输出):
> m2 <- lmer(extro ~ open + agree + social + (1 | school/classID), data = dt)
> summary(m2)
Random effects:
Groups Name Variance Std.Dev.
classID:school (Intercept) 8.2043 2.8643
school (Intercept) 93.8419 9.6872
Residual 0.9684 0.9841
Number of obs: 1200, groups: classID:school, 24; school, 6
Fixed effects:
Estimate Std. Error t value
(Intercept) 60.2378227 4.0117882 15.015
open 0.0061065 0.0049636 1.230
agree -0.0076659 0.0056986 -1.345
social 0.0005404 0.0018524 0.292
> m3 <- lmer(extro ~ open + agree + social + (1 | school) + (1 |classID), data = dt)
> summary(m3)
Random effects:
Groups Name Variance Std.Dev.
classID (Intercept) 8.2043 2.8643
school (Intercept) 93.8419 9.6872
Residual 0.9684 0.9841
Number of obs: 1200, groups: classID, 24; school, 6
Fixed effects:
Estimate Std. Error t value
(Intercept) 60.2378227 4.0117882 15.015
open 0.0061065 0.0049636 1.230
agree -0.0076659 0.0056986 -1.345
social 0.0005404 0.0018524 0.292
值得注意的是,交叉随机效应不一定发生在同一个因素内——在上面的交叉是完全在学校内的。然而,情况并非必须如此,而且很多时候并非如此。例如,坚持一个学校场景,如果我们在学校里有学生而不是学校里的班级,并且我们也对学生注册的医生感兴趣,那么我们也会在医生中嵌套学生。医生内部没有学校嵌套,反之亦然,所以这也是交叉随机效应的一个例子,我们说学校和医生是交叉的。发生交叉随机效应的类似情况是单个观察值同时嵌套在两个因子中,这通常发生在所谓的重复测量中主题项目数据。通常,每个受试者都会用/在不同的项目上多次测量/测试,并且这些相同的项目由不同的受试者测量/测试。因此,观察集中在主题内和项目内,但项目不嵌套在主题内,反之亦然。同样,我们说主题和项目是交叉的。
摘要:TL;DR
交叉随机效应和嵌套随机效应之间的区别在于,当一个因素(分组变量)仅出现在另一个因素(分组变量)的特定水平内时,就会发生嵌套随机效应。这是指定的lme4
:
(1|group1/group2)
wheregroup2
嵌套在group1
.
交叉随机效应很简单:不是嵌套的。这可能发生在三个或更多分组变量(因子)中,其中一个因子单独嵌套在其他两个因子中,或者两个或多个因子单独嵌套在两个因子中。这些指定在lme4
:
(1|group1) + (1|group2)