Ma question est basée sur cette réponse qui a montré quel lme4::lmer
modèle correspond à une mesure répétée bidirectionnelle ANOVA:
require(lme4)
set.seed(1234)
d <- data.frame(
y = rnorm(96),
subject = factor(rep(1:12, 4)),
a = factor(rep(1:2, each=24)),
b = factor(rep(rep(1:2, each=12))),
c = factor(rep(rep(1:2, each=48))))
# standard two-way repeated measures ANOVA:
summary(aov(y~a*b+Error(subject/(a*b)), d[d$c == "1",]))
# corresponding lmer call:
anova(lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject), d[d$c == "1",]))
Ma question est maintenant de savoir comment étendre cela au cas d'une ANOVA à trois voies:
summary(aov(y~a*b*c+Error(subject/(a*b*c)), d))
## [...]
## Error: subject:a:b:c
## Df Sum Sq Mean Sq F value Pr(>F)
## a:b:c 1 0.101 0.1014 0.115 0.741
## Residuals 11 9.705 0.8822
L'extension naturelle ainsi que ses versions ne correspondent pas aux résultats de l'ANOVA:
anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject), d))
## [...]
## a:b:c 1 0.1014 0.1014 0.1500
anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) +
(1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))
## [...]
## a:b:c 1 0.1014 0.1014 0.1539
Notez que a été posé une question similaire avant . Cependant, il manquait des exemples de données (qui sont fournis ici).
y ~ a*b + (1 + a*b|subject), d[d$c == "1",]
? Ou peut-être que je manque quelque chose?lmer
se plaindra car les effets aléatoires ne sont plus identifiés. Au départ, je pensais aussi que c'était le modèle que je voulais, mais ce n'est pas le cas. Si vous comparez le modèle lmer que je propose pour le cas à 2 voies avec l'ANOVA standard, vous verrez que les valeurs F correspondent exactement . Comme indiqué dans la réponse, j'ai lié.lmer
modèle que vous avez écrit (qui exclut les interactions bidirectionnelles aléatoires) ne devrait pas être équivalent à une RM-ANOVA à 3 voies, mais le second que vous avez écrit (qui inclut le hasard les interactions bidirectionnelles) devraient l'être. Quant à savoir pourquoi il y a un écart, même avec ce modèle, j'ai une idée de ce qu'est le problème.Je vais prendre le dîner puis j'examinerai un peu plus l'ensemble de données sur les jouets.Réponses:
La réponse directe à votre question est que le dernier modèle que vous avez écrit,
Je pense que c'est "en principe" correct, bien qu'il s'agisse d'un paramétrage étrange qui ne semble pas toujours bien fonctionner dans la pratique.
Quant à savoir pourquoi la sortie que vous obtenez de ce modèle est différente de la
aov()
sortie, je pense qu'il y a deux raisons.lmer()
(et la plupart des autres programmes de modèles mixtes) ne le permettront pas.Permettez-moi d'abord de démontrer le paramétrage que je préfère sur votre exemple ANOVA bidirectionnel initial. Supposons que votre jeu de données
d
est chargé. Votre modèle (notez que j'ai changé de code factice en code de contraste) était:qui a bien fonctionné ici en ce qu'il correspondait à la
aov()
sortie. Le modèle que je préfère implique deux changements: coder manuellement les facteurs de contraste afin que nous ne travaillions pas avec des objets de facteur R (ce que je recommande de faire dans 100% des cas), et spécifier les effets aléatoires différemment:Les deux approches sont totalement équivalentes dans le problème simple à 2 voies. Nous allons maintenant passer à un problème à 3 voies. J'ai mentionné plus tôt que l'exemple de jeu de données que vous avez donné était pathologique. Donc, ce que je veux faire avant d'aborder votre exemple de jeu de données est de générer d'abord un jeu de données à partir d'un modèle de composants de variance réel (c'est-à-dire où les composants de variance non nuls sont intégrés dans le vrai modèle). Je vais d'abord montrer comment mon paramétrage préféré semble mieux fonctionner que celui que vous avez proposé. Je montrerai ensuite une autre façon d'estimer les composantes de la variance qui n'impose pas qu'elles doivent être non négatives. Ensuite, nous serons en mesure de voir le problème avec l'exemple de jeu de données d'origine.
Le nouvel ensemble de données sera de structure identique, sauf que nous aurons 50 sujets:
Les ratios F auxquels nous voulons correspondre sont:
Voici nos deux modèles:
Comme nous pouvons le voir, seule la deuxième méthode correspond à la sortie de
aov()
, bien que la première méthode soit au moins dans le stade approximatif. La deuxième méthode permet également d'obtenir une log-vraisemblance plus élevée. Je ne sais pas pourquoi ces deux méthodes donnent des résultats différents, car là encore je pense qu'elles sont "en principe" équivalentes, mais c'est peut-être pour des raisons numériques / informatiques. Ou peut-être que je me trompe et qu'ils ne sont pas équivalents, même en principe.Je vais maintenant montrer une autre façon d'estimer les composantes de la variance sur la base des idées ANOVA traditionnelles. Fondamentalement, nous prendrons les équations des carrés moyens attendus pour votre conception, remplacerons les valeurs observées des carrés moyens et résoudrons les composantes de la variance. Pour obtenir les carrés moyens attendus, nous utiliserons une fonction R que j'ai écrite il y a quelques années, appelée
EMS()
, qui est documentée ICI . Ci-dessous, je suppose que la fonction est déjà chargée.D'accord, nous allons maintenant revenir à l'exemple d'origine. Les ratios F que nous essayons de faire correspondre sont les suivants:
Voici nos deux modèles:
Dans ce cas, les deux modèles donnent essentiellement les mêmes résultats, bien que la deuxième méthode ait une probabilité logarithmique très légèrement plus élevée. Aucune méthode ne correspond
aov()
. Mais regardons ce que nous obtenons lorsque nous résolvons les composants de variance comme nous l'avons fait ci-dessus, en utilisant la procédure ANOVA qui ne contraint pas les composants de variance à être non négatifs (mais qui ne peuvent être utilisés que dans des conceptions équilibrées sans prédicteurs continus et sans données manquantes; hypothèses classiques de l'ANOVA).Maintenant, nous pouvons voir ce qui est pathologique dans l'exemple original. Le modèle le mieux adapté est celui qui implique que plusieurs des composantes de la variance aléatoire sont négatives. Mais
lmer()
(et la plupart des autres programmes de modèles mixtes) contraint les estimations des composantes de la variance à être non négatives. Ceci est généralement considéré comme une contrainte sensible, car les variances ne peuvent bien sûr jamais vraiment être négatives. Cependant, une conséquence de cette contrainte est que les modèles mixtes sont incapables de représenter avec précision les ensembles de données qui présentent des corrélations intraclasses négatives, c'est-à-dire les ensembles de données où les observations du même cluster sont moins(plutôt que plus) similaires en moyenne aux observations tirées au hasard de l'ensemble de données, et par conséquent lorsque la variance intra-cluster dépasse considérablement la variance inter-cluster. Ces ensembles de données sont des ensembles de données parfaitement raisonnables que l'on rencontrera occasionnellement dans le monde réel (ou simuler accidentellement!), Mais ils ne peuvent pas être décrits de manière raisonnable par un modèle à composantes de variance, car ils impliquent des composantes de variance négatives. Ils peuvent cependant être décrits de manière «non sensible» par de tels modèles, si le logiciel le permet.aov()
le permet.lmer()
ne fait pas.la source
I am not sure why these two methods give different results, as again I think they are "in principle" equivalent, but maybe it is for some numerical/computational reasons
- comprenez-vous peut-être mieux cela maintenant (deux ans plus tard)? J'ai essayé de comprendre quelle est la différence, mais je ne comprends pas non plus ...A
a niveaux, alors estime seulement un paramètre de variance, alors qu'il estime paramètres de variance et corrélations entre eux. D'après ce que je comprends, l'ANOVA classique estime un seul paramètre de variance et devrait donc être équivalente à la première méthode, pas à la seconde. Droite? Mais pour deux méthodes estiment un paramètre, et je ne sais toujours pas pourquoi elles ne sont pas d'accord. k - 1 k ( k - 1 ) / 2 k = 2(1|A:sub)
(0+A|sub)
lmer
appels produisent uneanova()
sortie identique , les variances d'effets aléatoires sont néanmoins assez différentes: voirVarCorr(mod1)
etVarCorr(mod2)
. Je ne comprends pas très bien pourquoi cela se produit; le faites vous? Pourmod3
etmod4
, on peut voir que quatre des sept variances pourmod3
sont en fait égales à zéro (pourmod4
les sept sont non nulles); cette "singularité" enmod3
est probablement la raison pour laquelle les tables anova diffèrent. En dehors de cela, comment utiliseriez-vous votre "voie préférée" sia
etb
avait plus de deux niveaux?Sont
a
,b
,c
fixes ou effets aléatoires? S'ils sont corrigés, votre syntaxe sera simplementla source
subject
, pour tous les effets (c.-àWithin
-d.). Voir Conception expérimentale: Procédures pour les sciences du comportement (2013) par Kirk, chapitre 10 (p.458) ou mon article icilmer
? J'obtiendrai néanmoins ma copie de Kirk (2e édition seulement) et verrai ce qu'elle dit.lmer
modèles. La meilleure façon de vérifier l'ajustement du modèle est de vérifier leur dfs en utilisantlmerTest
parce que l'approximation KR est censée vous donner desexact
dfs et donc des valeurs de p.