Я, як правило, згоден з аналізом Бена, але дозвольте додати пару зауважень та трохи інтуїції.
По-перше, загальні результати:
- Результати lmerTest за методом Satterthwaite є правильними
- Метод Кенворда-Роджера також є правильним і погоджується з Satterthwaite
Бен окреслює дизайн, в якому subnum
вкладений group
час direction
і group:direction
перекреслений subnum
. Це означає, що термін природної помилки (тобто так званий «прошарок помилки, що охоплює») для group
є, subnum
тоді як прошарок помилки, що вкладається, для інших термінів (у тому числі subnum
) є залишковими.
Ця структура може бути представлена на так званій діаграмі фактор-структура:
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)
Тут випадкові терміни укладені в дужки, 0
представляє загальну середню величину (або перехоплення), [I]
представляє термін помилки, номери супер-скрипту - це кількість рівнів, а числа підкриптів - кількість ступенів свободи, припускаючи збалансовану конструкцію. Діаграма вказує, що термін природної помилки (що включає прошарок помилок) для group
є subnum
і що чисельник df для subnum
, який дорівнює знаменнику df group
, становить 18: 20 мінус 1 df для group
та 1 df для загального середнього значення. Більш вичерпне ознайомлення з діаграмами структурних факторів є у розділі 2 тут: https://02429.compute.dtu.dk/eBook .
Якби дані були точно врівноважені, ми могли б побудувати F-тести з розкладання SSQ, як це передбачено anova.lm
. Оскільки набір даних дуже тісно збалансований, ми можемо отримати приблизні F-тести наступним чином:
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
Тут усі значення F і p обчислюються, припускаючи, що всі терміни мають залишки як прошарку помилок, що охоплює, і це справедливо для всіх, крім 'групи'. Замість цього "збалансований-правильний" F -тест для групи:
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
де ми використовуємо subnum
MS замість Residuals
MS у знаменнику F- значення.
Зауважте, що ці значення досить добре відповідають результатам 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
Залишилися відмінності пояснюються тим, що дані не є точно збалансованими.
ОП порівнюється anova.lm
з anova.lmerModLmerTest
, що нормально, але для порівняння на зразок нам доводиться використовувати ті ж контрасти. В цьому випадку є різниця між anova.lm
і anova.lmerModLmerTest
так як вони виробляють типу I і III тестів за замовчуванням , відповідно, і для цього набору даних є (невелика) різниця між Type I і 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
Якби набір даних був повністю збалансований, контрасти типу I були б такими ж, як і контрасти типу III (на які не впливає спостережувана кількість зразків).
Останнє зауваження полягає в тому, що "повільність" методу Кенворда-Роджера пов'язана не з переозброєнням моделі, а тому, що вона включає обчислення з граничною дисперсійно-коваріантною матрицею спостережень / залишків (5191x5191 в даному випадку), яка не є випадок методу Саттерватвайта.
Щодо моделі2
Що стосується моделі2, ситуація стає складнішою, і я думаю, що простіше розпочати дискусію з іншої моделі, де я включив «класичну» взаємодію між subnum
та 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
Оскільки дисперсія, пов'язана з взаємодією, по суті дорівнює нулю (за наявності subnum
випадкового основного ефекту), термін взаємодії не впливає на обчислення знаменників ступенів свободи, F- значень і 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
Однак чи subnum:direction
є прошарок помилки, що вкладається, subnum
тому, якщо ми видалимо subnum
всі пов'язані з цим SSQ, потрапляє назадsubnum:direction
model4 <- lmer(rt ~ group * direction +
(1 | subnum:direction), data = ANT.2)
Тепер термін природної помилки для group
, direction
і group:direction
є
subnum:direction
і з nlevels(with(ANT.2, subnum:direction))
= 40 і чотирма параметрами, ступінь свободи в знаменнику для цих термінів повинен бути приблизно 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
Ці F - тести також можуть бути апроксимувати з «збалансований-правильним» F - тестами:
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
тепер переходимо до моделі2:
model2 <- lmer(rt ~ group * direction + (direction | subnum), data = ANT.2)
Ця модель описує досить складну структуру коваріації випадкових ефектів з матрицею варіації-коваріації 2х2. Параметризацією за замовчуванням нелегко впоратися, і нам краще зробити повторну параметризацію моделі:
model2 <- lmer(rt ~ group * direction + (0 + direction | subnum), data = ANT.2)
Якщо ми порівняємо model2
з model4
, у них однаково багато випадкових ефектів; 2 для кожного subnum
, тобто 2 * 20 = 40 загалом. Хоча model4
визначає єдиний параметр дисперсії для всіх 40 випадкових ефектів, model2
передбачає, що кожне subnum
пара випадкових ефектів має двоперемінний нормальний розподіл з матрицею дисперсії-коваріації 2х2, параметри якого задаються
VarCorr(model2)
Groups Name Std.Dev. Corr
subnum directionleft 38.880
directionright 41.324 1.000
Residual 70.405
Це вказує на перевищення розміру, але збережемо це на інший день. Важливим моментом тут є те , що model4
це особливий випадок, model2
і що model
це також особливий випадок model2
. Вільно (та інтуїтивно) мовлення (direction | subnum)
містить або фіксує варіації, пов’язані з головним ефектом subnum
, а також взаємодією direction:subnum
. З точки зору випадкових ефектів ми можемо вважати ці два ефекти або структури як фіксацію змін між рядками та рядками за стовпцями відповідно:
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
У цьому випадку ці випадкові оцінки оцінок, а також оцінки параметрів дисперсії вказують на те, що ми дійсно маємо лише випадковий головний ефект subnum
(варіація між рядками). До чого все це призводить - це те, що в знаменнику Satterthwaite знаходять ступінь свободи
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
є компромісом між цими основними ефектами та структурами взаємодії: Група DenDF залишається в 18 (вкладена в subnum
проект), але direction
і
group:direction
DenDF - це компроміси між 36 ( model4
) і 5169 ( model
).
Я не думаю, що тут все вказує на те, що наближення Satterthwaite (або його реалізація в lmerTest ) є несправним.
Еквівалентна таблиця методом Кенворда-Роджера дає
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
Не дивно, що KR і Satterthwaite можуть відрізнятися, але для всіх практичних цілей різниця в p -значеннях є хвилиною. Мій аналіз вище вказує на те, що DenDF
для direction
і group:direction
не повинно бути менше ~ 36 і, ймовірно, більше, ніж той, що враховує, що в основному ми маємо лише випадковий головний ефект direction
присутнього, тому, якщо що-небудь, я думаю, це свідчить про те, що метод KR отримує DenDF
занадто низький рівень в цьому випадку. Але майте на увазі, що дані насправді не підтримують (group | direction)
структуру, тому порівняння трохи штучне - було б цікавіше, якби модель насправді підтримувалася.
ezAnova
попередження, оскільки не слід запускати 2x2 anova, якщо насправді ваші дані є дизайном 2x2x2.