交叉与嵌套随机效应:它们有何不同以及如何在 lme4 中正确指定?

机器算法验证 混合模式 lme4-nlme 多层次分析 随机效应模型 交叉随机效应
2022-01-19 12:50:55

以下是我对嵌套与交叉随机效应的理解:

当较低水平的因子仅出现在较高水平因子的特定水平内时,会出现 嵌套随机效应。

  • 例如,固定时间点的班级内的学生。
  • lme4我认为我们以两种等效方式中的任何一种来表示嵌套数据的随机效应

    (1|class/pupil)  # or  
    (1|class) + (1|class:pupil)
    

交叉随机效应是指给定因子出现在上层因子的多个水平中。

  • 例如,班级内的学生是经过数年衡量的。
  • lme4中,我们会写:

    (1|class) + (1|pupil)
    

但是,当我查看特定的嵌套数据集时,我注意到两个模型公式给出了相同的结果(下面的代码和输出)。但是,我已经看到其他数据集,其中两个公式产生了不同的结果。那么这里发生了什么?

mydata <- read.csv("https://web.archive.org/web/20160624172041if_/http://www-personal.umich.edu/~bwest/classroom.csv")
# (the data is no longer at `http://www-personal.umich.edu/~bwest/classroom.csv`
# hence the link to web.archive.org)
# Crossed version: 
Linear mixed model fit by REML ['lmerMod']
Formula: mathgain ~ (1 | schoolid) + (1 | classid)
   Data: mydata

REML criterion at convergence: 11768.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.6441 -0.5984 -0.0336  0.5334  5.6335 

Random effects:
 Groups   Name        Variance Std.Dev.
 classid  (Intercept)   99.23   9.961  
 schoolid (Intercept)   77.49   8.803  
 Residual             1028.23  32.066  
Number of obs: 1190, groups:  classid, 312; schoolid, 107


# Nested version:
Formula: mathgain ~ (1 | schoolid/classid)

REML criterion at convergence: 11768.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.6441 -0.5984 -0.0336  0.5334  5.6335 

Random effects:
 Groups           Name        Variance Std.Dev.
 classid:schoolid (Intercept)   99.23   9.961  
 schoolid         (Intercept)   77.49   8.803  
 Residual                     1028.23  32.066  
Number of obs: 1190, groups:  classid:schoolid, 312; schoolid, 107
1个回答

(这个回答比较长,最后有总结)

您对所描述场景中的嵌套和交叉随机效应的理解没有错。但是,您对交叉随机效应的定义有点狭窄。交叉随机效应的更一般定义很简单:不是嵌套的。我们将在这个答案的最后看到这一点,但大部分答案将集中在你提出的场景上,即学校内的教室。

首先要注意:

嵌套是数据的属性,或者更确切地说是实验设计,而不是模型。

还,

嵌套数据可以至少以两种不同的方式进行编码,这是您发现问题的核心。

您的示例中的数据集相当大,因此我将使用互联网上的另一个学校示例来解释这些问题。但首先,请考虑以下过度简化的示例:

在此处输入图像描述

在这里,我们有嵌套在学校中的类,这是一个熟悉的场景。这里重要的一点是,在每所学校之间,类具有相同的标识符,即使它们是不同的,如果它们是嵌套的Class1出现在School1School2School3但是,如果数据是嵌套的,则Class1ininSchool1的度量单位不同如果它们相同,那么我们将遇到这种情况:Class1School2School3

在此处输入图像描述

这意味着每个班级都属于每个学校。前者是嵌套设计,后者是交叉设计(有些人可能也称其为多重成员。编辑:有关多重成员​​和交叉随机效应之间差异的讨论,请参见此处),我们将在lme4使用中制定这些

(1|School/Class)或等效地(1|School) + (1|Class:School)

(1|School) + (1|Class)

分别。由于随机效应是否存在嵌套或交叉的模糊性,正确指定模型非常重要,因为这些模型会产生不同的结果,如下所示。此外,仅仅通过检查数据是不可能知道我们是否有嵌套或交叉随机效应。这只能通过数据实验设计的知识来确定。

但首先让我们考虑一下 Class 变量在学校之间被唯一编码的情况:

在此处输入图像描述

关于嵌套或交叉不再有任何歧义。嵌套是显式的。现在让我们通过 R 中的示例来看看这一点,其中我们有 6 所学校(标记为I- VI)和每所学校内的 4 个班级(标记ad):

> 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)