(这是一个相当长的答案,最后有一个总结)
您对所描述的场景中的嵌套和交叉随机效应的理解是正确的。但是,您对交叉随机效应的定义有点狭窄。交叉随机效应的更一般定义是:不嵌套。我们将在此答案的结尾处查看此问题,但大部分答案将集中于您介绍的学校内教室的场景。
首先要注意的是:
嵌套是数据的属性,或者是实验设计的属性,而不是模型的属性。
也,
嵌套数据可以用至少两种不同的方式进行编码,这是发现问题的核心。
您的示例中的数据集非常大,因此我将使用互联网上的另一个学校示例来说明问题。但首先,请考虑以下过度简化的示例:
这是我们在学校里嵌套的课程,这是一个熟悉的场景。这里的重点是,即使在嵌套的情况下,它们也是不同的,在每所学校之间,这些类具有相同的标识符。Class1
出现在School1
,School2
和School3
。然而,如果数据是嵌套然后Class1
在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)
group2
嵌套在哪里group1
。
交叉随机效应很简单:不嵌套。这可能发生在三个或多个分组变量(因子)中,其中一个因子分别嵌套在另一个变量中,或者两个或两个以上因子,其中单个观测值分别嵌套在两个因子中。这些在以下内容中指定lme4
:
(1|group1) + (1|group2)