Je suis généralement d'accord avec l'analyse de Ben, mais permettez-moi d'ajouter quelques remarques et un peu d'intuition.
Premièrement, les résultats globaux:
- Les résultats de lmerTest utilisant la méthode Satterthwaite sont corrects
- La méthode Kenward-Roger est également correcte et en accord avec Satterthwaite
Ben décrit la conception dans laquelle subnum
est imbriqué dans group
tout direction
et group:direction
sont croisées avec subnum
. Cela signifie que le terme d'erreur naturelle (c'est-à-dire la "strate d'erreur englobante") pour group
est subnum
alors que la strate d'erreur englobante pour les autres termes (y compris subnum
) est les résidus.
Cette structure peut être représentée dans un diagramme dit de structure factorielle:
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)
Ici, les termes aléatoires sont mis entre parenthèses, 0
représentent la moyenne globale (ou interception), [I]
représentent le terme d'erreur, les numéros de super-script sont le nombre de niveaux et les numéros de sous-script sont le nombre de degrés de liberté en supposant une conception équilibrée. Le diagramme indique que le terme d'erreur naturelle (englobant la strate d'erreur) pour group
est subnum
et que le numérateur df pour subnum
, qui est égal au dénominateur df pour group
, est 18: 20 moins 1 df pour group
et 1 df pour la moyenne globale. Une introduction plus complète aux diagrammes de structure factorielle est disponible dans le chapitre 2 ici: https://02429.compute.dtu.dk/eBook .
Si les données étaient exactement équilibrées, nous serions en mesure de construire les tests F à partir d'une décomposition SSQ comme fourni par anova.lm
. Étant donné que l'ensemble de données est très étroitement équilibré, nous pouvons obtenir des tests F approximatifs comme suit:
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
Ici, toutes les valeurs F et p sont calculées en supposant que tous les termes ont les résidus comme strate d'erreur englobante, et cela est vrai pour tous sauf «groupe». Le test F «équilibré-correct» pour le groupe est plutôt:
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
où nous utilisons le subnum
MS au lieu du Residuals
MS dans le dénominateur de valeur F.
Notez que ces valeurs correspondent assez bien aux résultats de 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
Les différences restantes sont dues au fait que les données ne sont pas exactement équilibrées.
L'OP se compare anova.lm
à anova.lmerModLmerTest
, ce qui est correct, mais pour comparer comme avec, nous devons utiliser les mêmes contrastes. Dans ce cas, il y a une différence entre anova.lm
et anova.lmerModLmerTest
puisqu'ils produisent respectivement des tests de type I et III, et pour cet ensemble de données, il y a une (petite) différence entre les contrastes de type I et 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
Si l'ensemble de données avait été complètement équilibré, les contrastes de type I auraient été les mêmes que les contrastes de type III (qui ne sont pas affectés par le nombre d'échantillons observé).
Une dernière remarque est que la `` lenteur '' de la méthode de Kenward-Roger n'est pas due au réajustement du modèle, mais parce qu'elle implique des calculs avec la matrice marginale de variance-covariance des observations / résidus (5191x5191 dans ce cas) qui n'est pas le cas de la méthode de Satterthwaite.
Concernant model2
Quant au modèle 2, la situation devient plus complexe et je pense qu'il est plus facile de commencer la discussion avec un autre modèle où j'ai inclus l'interaction «classique» entre subnum
et 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
Étant donné que la variance associée à l'interaction est essentiellement nulle (en présence de l' subnum
effet principal aléatoire), le terme d'interaction n'a aucun effet sur le calcul des degrés de liberté du dénominateur, des valeurs F et des valeurs 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
Cependant, subnum:direction
est la strate d'erreur englobante pour subnum
donc si nous supprimons subnum
tous les SSQ associés retombe danssubnum:direction
model4 <- lmer(rt ~ group * direction +
(1 | subnum:direction), data = ANT.2)
Maintenant, le terme d'erreur naturelle pour group
, direction
et group:direction
est
subnum:direction
et avec nlevels(with(ANT.2, subnum:direction))
= 40 et quatre paramètres, les degrés de liberté du dénominateur pour ces termes devraient être d'environ 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
Ces tests F peuvent également être approximés par les tests F «corrects équilibrés» :
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
Passons maintenant au modèle 2:
model2 <- lmer(rt ~ group * direction + (direction | subnum), data = ANT.2)
Ce modèle décrit une structure de covariance à effet aléatoire assez compliquée avec une matrice de variance-covariance 2x2. La paramétrisation par défaut n'est pas facile à gérer et on préfère une re-paramétrisation du modèle:
model2 <- lmer(rt ~ group * direction + (0 + direction | subnum), data = ANT.2)
Si l' on compare model2
à model4
, ils ont aussi de nombreux effets aléatoires; 2 pour chacun subnum
, soit 2 * 20 = 40 au total. Bien qu'il model4
stipule un seul paramètre de variance pour les 40 effets aléatoires,model2
stipule que chaque subnum
paire d'effets aléatoires a une distribution normale bi-variée avec une matrice de variance-covariance 2x2 dont les paramètres sont donnés par
VarCorr(model2)
Groups Name Std.Dev. Corr
subnum directionleft 38.880
directionright 41.324 1.000
Residual 70.405
Cela indique un ajustement excessif, mais gardons cela pour un autre jour. Le point important est que model4
est un cas particulier de model2
et qui model
est aussi un cas particulier de model2
. Parler librement (et intuitivement) (direction | subnum)
contient ou capture la variation associée à l'effet principal subnum
ainsi que l'interactiondirection:subnum
. En termes d'effets aléatoires, nous pouvons considérer ces deux effets ou structures comme capturant la variation entre les lignes et les lignes par colonnes respectivement:
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
Dans ce cas, ces estimations de l'effet aléatoire ainsi que les estimations des paramètres de variance indiquent toutes deux que nous n'avons vraiment qu'un effet principal aléatoire de subnum
(variation entre les lignes) présent ici. Tout cela conduit à ce que les degrés de liberté du dénominateur Satterthwaite dans
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
est un compromis entre ces structures d'effet principal et d'interaction: le groupe DenDF reste à 18 (imbriqué subnum
par conception) mais le direction
et
group:direction
DenDF sont des compromis entre 36 ( model4
) et 5169 ( model
).
Je ne pense pas que quoi que ce soit ici indique que l'approximation de Satterthwaite (ou son implémentation dans lmerTest ) est défectueuse.
Le tableau équivalent avec la méthode de Kenward-Roger donne
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
Il n'est pas surprenant que KR et Satterthwaite puissent différer, mais à toutes fins pratiques, la différence de valeurs p est minime. Mon analyse ci-dessus indique que le DenDF
for direction
et group:direction
ne devrait pas être inférieur à ~ 36 et probablement plus grand que celui étant donné que nous n'avons essentiellement que l'effet principal aléatoire de direction
present, donc si je pense que c'est une indication que la méthode KR devient DenDF
trop faible dans ce cas. Mais gardez à l'esprit que les données ne prennent pas vraiment en charge la (group | direction)
structure, la comparaison est donc un peu artificielle - il serait plus intéressant si le modèle était réellement pris en charge.
ezAnova
avertissement car vous ne devez pas exécuter 2x2 anova si en fait vos données sont de conception 2x2x2.