Tôi thường đồng ý với phân tích của Ben nhưng hãy để tôi thêm một vài nhận xét và một chút trực giác.
Đầu tiên, kết quả tổng thể:
- kết quả lmerTest sử dụng phương pháp Satterthwaite là chính xác
- Phương pháp Kenward-Roger cũng đúng và đồng ý với Satterthwaite
Ben phác thảo thiết kế subnum
được lồng trong group
khi direction
và group:direction
được lai với subnum
. Điều này có nghĩa rằng số hạng sai số tự nhiên (tức là cái gọi là "kèm theo lỗi stratum") cho group
là subnum
trong khi các lỗi kèm theo tầng cho các điều khoản khác (bao gồm subnum
) là dư.
Cấu trúc này có thể được biểu diễn trong cái gọi là sơ đồ cấu trúc nhân tố:
names <- c(expression("[I]"[5169]^{5191}),
expression("[subnum]"[18]^{20}), expression(grp:dir[1]^{4}),
expression(dir[1]^{2}), expression(grp[1]^{2}), expression(0[1]^{1}))
x <- c(2, 4, 4, 6, 6, 8)
y <- c(5, 7, 5, 3, 7, 5)
plot(NA, NA, xlim=c(2, 8), ylim=c(2, 8), type="n", axes=F, xlab="", ylab="")
text(x, y, names) # Add text according to ’names’ vector
# Define coordinates for start (x0, y0) and end (x1, y1) of arrows:
x0 <- c(1.8, 1.8, 4.2, 4.2, 4.2, 6, 6) + .5
y0 <- c(5, 5, 7, 5, 5, 3, 7)
x1 <- c(2.7, 2.7, 5, 5, 5, 7.2, 7.2) + .5
y1 <- c(5, 7, 7, 3, 7, 5, 5)
arrows(x0, y0, x1, y1, length=0.1)
Ở đây, các thuật ngữ ngẫu nhiên được đặt trong ngoặc, 0
đại diện cho giá trị trung bình tổng thể (hoặc chặn), [I]
đại diện cho thuật ngữ lỗi, số siêu tập lệnh là số cấp và số tập lệnh phụ là số bậc tự do giả định thiết kế cân bằng. Biểu đồ chỉ ra rằng thuật ngữ lỗi tự nhiên (bao gồm tầng lỗi) group
là subnum
và tử số df cho subnum
, bằng với mẫu số df cho group
, là 18: 20 trừ 1 df cho group
và 1 df cho trung bình tổng thể. Giới thiệu toàn diện hơn về sơ đồ cấu trúc nhân tố có sẵn trong chương 2 tại đây: https://02429.compute.dtu.dk/eBook .
Nếu dữ liệu được cân bằng chính xác, chúng tôi sẽ có thể xây dựng các bài kiểm tra F từ phân tách SSQ như được cung cấp bởi anova.lm
. Vì bộ dữ liệu được cân bằng rất chặt chẽ, chúng tôi có thể có được các thử nghiệm F gần đúng như sau:
ANT.2 <- subset(ANT, !error)
set.seed(101)
baseline.shift <- rnorm(length(unique(ANT.2$subnum)), 0, 50)
ANT.2$rt <- ANT.2$rt + baseline.shift[as.numeric(ANT.2$subnum)]
fm <- lm(rt ~ group * direction + subnum, data=ANT.2)
(an <- anova(fm))
Analysis of Variance Table
Response: rt
Df Sum Sq Mean Sq F value Pr(>F)
group 1 994365 994365 200.5461 <2e-16 ***
direction 1 1568 1568 0.3163 0.5739
subnum 18 7576606 420923 84.8927 <2e-16 ***
group:direction 1 11561 11561 2.3316 0.1268
Residuals 5169 25629383 4958
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Ở đây, tất cả các giá trị F và p được tính toán giả định rằng tất cả các thuật ngữ có phần dư là tầng lỗi kèm theo của chúng và điều đó đúng với tất cả trừ 'nhóm'. Thay vào đó , F -test 'chính xác' cho nhóm là:
F_group <- an["group", "Mean Sq"] / an["subnum", "Mean Sq"]
c(Fvalue=F_group, pvalue=pf(F_group, 1, 18, lower.tail = FALSE))
Fvalue pvalue
2.3623466 0.1416875
trong đó chúng tôi sử dụng subnum
MS thay vì Residuals
MS trong mẫu số F -value.
Lưu ý rằng các giá trị này phù hợp khá tốt với kết quả Satterthwaite:
model <- lmer(rt ~ group * direction + (1 | subnum), data = ANT.2)
anova(model, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12065.3 12065.3 1 18 2.4334 0.1362
direction 1951.8 1951.8 1 5169 0.3936 0.5304
group:direction 11552.2 11552.2 1 5169 2.3299 0.1270
Sự khác biệt còn lại là do dữ liệu không được cân bằng chính xác.
OP so sánh anova.lm
với anova.lmerModLmerTest
, điều này là ổn, nhưng để so sánh như với chúng ta phải sử dụng các tương phản tương tự. Trong trường hợp này, có một sự khác biệt giữa anova.lm
và anova.lmerModLmerTest
vì chúng tạo ra các thử nghiệm Loại I và III theo mặc định và đối với tập dữ liệu này, có một sự khác biệt (nhỏ) giữa độ tương phản Loại I và III:
show_tests(anova(model, type=1))$group
(Intercept) groupTreatment directionright groupTreatment:directionright
groupTreatment 0 1 0.005202759 0.5013477
show_tests(anova(model, type=3))$group # type=3 is default
(Intercept) groupTreatment directionright groupTreatment:directionright
groupTreatment 0 1 0 0.5
Nếu bộ dữ liệu đã được cân bằng hoàn toàn, độ tương phản loại I sẽ giống với độ tương phản loại III (không bị ảnh hưởng bởi số lượng mẫu quan sát được).
Một nhận xét cuối cùng là 'sự chậm chạp' của phương pháp Kenward-Roger không phải do sự phù hợp của mô hình, mà bởi vì nó liên quan đến việc tính toán với ma trận hiệp phương sai biên của các quan sát / dư (5191x5191 trong trường hợp này) không phải là trường hợp cho phương pháp của Satterthwaite.
Liên quan đến mô hình2
Đối với model2, tình huống trở nên phức tạp hơn và tôi nghĩ việc bắt đầu cuộc thảo luận với một mô hình khác dễ dàng hơn trong đó tôi đã bao gồm sự tương tác 'cổ điển' giữa subnum
và direction
:
model3 <- lmer(rt ~ group * direction + (1 | subnum) +
(1 | subnum:direction), data = ANT.2)
VarCorr(model3)
Groups Name Std.Dev.
subnum:direction (Intercept) 1.7008e-06
subnum (Intercept) 4.0100e+01
Residual 7.0415e+01
Bởi vì phương sai liên quan đến tương tác về cơ bản là bằng không (với sự có mặt của subnum
hiệu ứng chính ngẫu nhiên), thuật ngữ tương tác không ảnh hưởng đến việc tính toán mức độ tự do của mẫu số, giá trị F và giá trị p :
anova(model3, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12065.3 12065.3 1 18 2.4334 0.1362
direction 1951.8 1951.8 1 5169 0.3936 0.5304
group:direction 11552.2 11552.2 1 5169 2.3299 0.1270
Tuy nhiên, subnum:direction
là tầng lỗi kèm theo subnum
vì vậy nếu chúng tôi loại bỏ subnum
tất cả SSQ liên quan rơi vàosubnum:direction
model4 <- lmer(rt ~ group * direction +
(1 | subnum:direction), data = ANT.2)
Bây giờ số hạng sai số tự nhiên cho group
, direction
và group:direction
là
subnum:direction
và với nlevels(with(ANT.2, subnum:direction))
= 40 và bốn tham số độ mẫu tự do cho những thuật ngữ nên khoảng 36:
anova(model4, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 24004.5 24004.5 1 35.994 4.8325 0.03444 *
direction 50.6 50.6 1 35.994 0.0102 0.92020
group:direction 273.4 273.4 1 35.994 0.0551 0.81583
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Các F -tests này cũng có thể được xấp xỉ bằng các F -tests 'cân bằng-chính xác' :
an4 <- anova(lm(rt ~ group*direction + subnum:direction, data=ANT.2))
an4[1:3, "F value"] <- an4[1:3, "Mean Sq"] / an4[4, "Mean Sq"]
an4[1:3, "Pr(>F)"] <- pf(an4[1:3, "F value"], 1, 36, lower.tail = FALSE)
an4
Analysis of Variance Table
Response: rt
Df Sum Sq Mean Sq F value Pr(>F)
group 1 994365 994365 4.6976 0.0369 *
direction 1 1568 1568 0.0074 0.9319
group:direction 1 10795 10795 0.0510 0.8226
direction:subnum 36 7620271 211674 42.6137 <2e-16 ***
Residuals 5151 25586484 4967
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
bây giờ chuyển sang model2:
model2 <- lmer(rt ~ group * direction + (direction | subnum), data = ANT.2)
Mô hình này mô tả cấu trúc hiệp phương sai hiệu ứng ngẫu nhiên khá phức tạp với ma trận hiệp phương sai 2x2. Việc tham số hóa mặc định không dễ đối phó và chúng ta tốt hơn với việc tái tham số hóa mô hình:
model2 <- lmer(rt ~ group * direction + (0 + direction | subnum), data = ANT.2)
Nếu chúng ta so sánh model2
đến model4
, họ có kém nhiều ảnh hưởng ngẫu nhiên; 2 cho mỗi subnum
, tức là tổng cộng 2 * 20 = 40. Trong khi model4
quy định một tham số phương sai duy nhất cho tất cả 40 hiệu ứng ngẫu nhiên, model2
quy định rằng mỗi subnum
cặp hiệu ứng ngẫu nhiên có phân phối chuẩn biến thiên hai biến với ma trận hiệp phương sai 2x2, các tham số được đưa ra bởi
VarCorr(model2)
Groups Name Std.Dev. Corr
subnum directionleft 38.880
directionright 41.324 1.000
Residual 70.405
Điều này cho thấy sự phù hợp quá mức, nhưng hãy để dành nó cho một ngày khác. Vấn đề quan trọng ở đây là model4
là một trường hợp đặc biệt của model2
và đó model
là cũng là một trường hợp đặc biệt của model2
. Nói một cách lỏng lẻo (và bằng trực giác) (direction | subnum)
có chứa hoặc nắm bắt các biến thể liên quan đến hiệu ứng chính subnum
cũng như sự tương tác direction:subnum
. Xét về các hiệu ứng ngẫu nhiên, chúng ta có thể nghĩ về hai hiệu ứng hoặc cấu trúc này khi nắm bắt sự biến đổi giữa các hàng và hàng theo cột tương ứng:
head(ranef(model2)$subnum)
directionleft directionright
1 -25.453576 -27.053697
2 16.446105 17.479977
3 -47.828568 -50.835277
4 -1.980433 -2.104932
5 5.647213 6.002221
6 41.493591 44.102056
Trong trường hợp này, các ước tính hiệu ứng ngẫu nhiên cũng như ước tính tham số phương sai đều chỉ ra rằng chúng ta thực sự chỉ có một hiệu ứng chính ngẫu nhiên subnum
(biến thể giữa các hàng) có ở đây. Tất cả điều này dẫn đến là mức độ tự do của mẫu số Satterthwaite trong
anova(model2, type=1)
Type I Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12059.8 12059.8 1 17.998 2.4329 0.1362
direction 1803.6 1803.6 1 125.135 0.3638 0.5475
group:direction 10616.6 10616.6 1 125.136 2.1418 0.1458
là một thỏa hiệp giữa các cấu trúc chính hiệu ứng và tương tác: Các nhóm còn lại DenDF tại 18 (lồng trong subnum
do thiết kế) nhưng direction
và
group:direction
DenDF là thỏa hiệp giữa 36 ( model4
) và 5169 ( model
).
Tôi không nghĩ bất cứ điều gì ở đây chỉ ra rằng phép gần đúng Satterthwaite (hoặc việc thực hiện nó trong lmerTest ) là bị lỗi.
Bảng tương đương với phương pháp Kenward-Roger đưa ra
anova(model2, type=1, ddf="Ken")
Type I Analysis of Variance Table with Kenward-Roger's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
group 12059.8 12059.8 1 18.000 2.4329 0.1362
direction 1803.2 1803.2 1 17.987 0.3638 0.5539
group:direction 10614.7 10614.7 1 17.987 2.1414 0.1606
Không có gì đáng ngạc nhiên khi KR và Satterthwaite có thể khác nhau nhưng đối với tất cả các mục đích thực tế, sự khác biệt về giá trị p là phút. Phân tích của tôi ở trên chỉ ra rằng giá DenDF
trị for direction
và group:direction
không nên nhỏ hơn ~ 36 và có thể lớn hơn giá trị mà về cơ bản chúng ta chỉ có tác dụng chính ngẫu nhiên của direction
hiện tại, vì vậy nếu bất cứ điều gì tôi nghĩ thì đây là một dấu hiệu cho thấy phương pháp KR DenDF
quá thấp trong trường hợp này. Nhưng hãy nhớ rằng dữ liệu không thực sự hỗ trợ (group | direction)
cấu trúc nên việc so sánh hơi giả tạo - sẽ thú vị hơn nếu mô hình thực sự được hỗ trợ.
ezAnova
cảnh báo vì bạn không nên chạy 2x2 anova nếu trên thực tế dữ liệu của bạn là từ thiết kế 2x2x2.