交叉與嵌套隨機效應:它們有何不同以及如何在 lme4 中正確指定?
以下是我對嵌套與交叉隨機效應的理解:
當較低水平的因子僅出現在較高水平因子的特定水平內時,會出現 嵌套隨機效應。
- 例如,固定時間點的班級內的學生。
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
(這個回答比較長,最後有總結)
您對所描述場景中的嵌套和交叉隨機效應的理解沒有錯。但是,您對交叉隨機效應的定義有點狹窄。交叉隨機效應的更一般定義很簡單:不是嵌套的。我們將在這個答案的最後看到這一點,但大部分答案將集中在你提出的場景上,即學校內的教室。
首先要注意:
嵌套是數據的屬性,或者更確切地說是實驗設計,而不是模型。
還,
嵌套數據可以至少以兩種不同的方式進行編碼,這是您發現問題的核心。
您的示例中的數據集相當大,因此我將使用互聯網上的另一個學校示例來解釋這些問題。但首先,請考慮以下過度簡化的示例:
在這裡,我們有嵌套在學校中的類,這是一個熟悉的場景。這裡重要的一點是,在每所學校之間,類具有相同的標識符,即使它們是不同的,如果它們是嵌套的。
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)
where
group2
嵌套在group1
.交叉隨機效應很簡單:不是嵌套的。這可能發生在三個或更多分組變量(因子)中,其中一個因子單獨嵌套在其他兩個因子中,或者兩個或多個因子單獨嵌套在兩個因子中。這些指定在
lme4
:
(1|group1) + (1|group2)