ANOVA à mesures répétées avec lme / lmer dans R pour deux facteurs intra-sujets

19

J'essaie d'utiliser à lmepartir du nlmepackage pour répliquer les résultats des aovANOVA à mesures répétées. Je l'ai fait pour une expérience de mesures répétées à un facteur et pour une expérience à deux facteurs avec un facteur inter-sujets et un facteur intra-sujets, mais j'ai du mal à le faire pour une expérience à deux facteurs avec deux à l'intérieur -sous les facteurs.

Un exemple est illustré ci-dessous. Aet Bsont des facteurs à effet fixe et subjectest un facteur à effet aléatoire.

set.seed(1)
d <- data.frame(
    Y = rnorm(48),
    subject = factor(rep(1:12, 4)),
    A = factor(rep(1:2, each=24)),
    B = factor(rep(rep(1:2, each=12), 2)))

summary(aov(Y ~ A*B + Error(subject/(A*B)), data=d))  # Standard repeated measures ANOVA

library(nlme)
# Attempts:
anova(lme(Y ~ A*B, data=d, random = ~ 1 | subject))  # not same as above
anova(lme(Y ~ A*B, data=d, random = ~ 1 | subject/(A+B)))  # gives error

Je ne pouvais pas voir d'explication à ce sujet dans le livre de Pinheiro et Bates, mais je l'ai peut-être ignoré.

mark999
la source

Réponses:

15

Ce que vous ajustez aovs'appelle un tracé de bande, et il est difficile de s'adapter aveclme car les effets aléatoires subject:Aet subject:Bsont croisés.

Votre première tentative est équivalente à aov(Y ~ A*B + Error(subject), data=d), ce qui n'inclut pas tous les effets aléatoires; votre deuxième tentative est la bonne idée, mais la syntaxe des effets aléatoires croisés utilisant lme est très délicate.

En utilisant à lmepartir du nlmepackage, le code serait

lme(Y ~ A*B, random=list(subject=pdBlocked(list(~1, pdIdent(~A-1), pdIdent(~B-1)))), data=d)

En utilisant à lmerpartir du lme4package, le code serait quelque chose comme

lmer(Y ~ A*B + (1|subject) + (1|A:subject) + (1|B:subject), data=d)    

Ces fils de R-help peuvent être utiles (et pour rendre hommage, c'est là que j'ai obtenu le nlme code).

http://www.biostat.wustl.edu/archives/html/s-news/2005-01/msg00091.html

http://permalink.gmane.org/gmane.comp.lang.r.lme4.devel/3328

http://www.mail-archive.com/[email protected]/msg10843.html

Ce dernier lien renvoie à la page 165 de Pinheiro / Bates; cela peut aussi être utile.

EDIT: Notez également que dans l'ensemble de données que vous avez, certaines composantes de la variance sont négatives, ce qui n'est pas autorisé à utiliser des effets aléatoires avec lme, donc les résultats diffèrent. Un ensemble de données avec toutes les composantes de variance positive peut être créé en utilisant une graine de 8. Les résultats sont alors d'accord. Voir cette réponse pour plus de détails.

Notez également que lmefrom nlmene calcule pas correctement les degrés de liberté du dénominateur, de sorte que les statistiques F concordent, mais pas les valeurs p, et lmerfrom lme4n'essaye pas non plus car c'est très délicat en présence d'effets aléatoires croisés non équilibrés, et peut ne pas même être une chose sensée à faire. Mais c'est plus que ce que je veux aborder ici.

Aaron - Rétablir Monica
la source
Aaron, je ne pense pas que votre code lmer soit correct. L' aovappel OPs est simplement une conception standard à mesures répétées, que l'on analyserait avec lmer as lmer(Y~A*B+(1|subject)). (Bien que voir également cette réponse pour des modèles plus compliqués qui permettent d'estimer la variance et les corrélations de l'effet entre les S: stats.stackexchange.com/questions/13166/rs-lmer-cheat-sheet/… )
Mike Lawrence
4
L'appel aov du PO a trois effets aléatoires; pour reproduire cela avec lmermon code ci-dessus est correct. Votre lmercode n'a qu'un seul effet aléatoire. Ce qui est correct dépendra du contexte.
Aaron - Rétablir Monica
Notez également que la réponse à laquelle vous avez lié ne contient aucun exemple d'effets aléatoires croisés.
Aaron - Rétablir Monica
6

Votre première tentative est la bonne réponse si c'est tout ce que vous essayez de faire. nlme () définit les composants entre et à l'intérieur, vous n'avez pas besoin de les spécifier.

Le problème que vous rencontrez n'est pas parce que vous ne savez pas comment spécifier le modèle, c'est parce que les mesures répétées ANOVA et les effets mixtes ne sont pas la même chose. Parfois, les résultats de l'ANOVA et du modèle d'effets mixtes correspondent. C'est particulièrement le cas lorsque vous agrégez vos données comme vous le feriez pour une ANOVA et calculez les deux à partir de cela. Mais généralement, une fois fait correctement, alors que les conclusions peuvent être similaires, les résultats ne sont presque jamais les mêmes. Vos données d'exemple ne sont pas comme de vraies mesures répétées où vous avez souvent des réplications de chaque mesure dans S. Lorsque vous effectuez une ANOVA, vous agrégez généralement ces réplications pour obtenir une estimation de l'effet pour chaque sujet. Dans la modélisation d'effets mixtes, vous ne faites rien de tel. Vous travaillez avec les données brutes. Quand tu fais ça, tu '

[en passant, utiliser lmer () (du package lme4) au lieu de lme () me donne des valeurs SS et MS qui correspondent exactement à l'ANOVA pour les effets dans votre exemple, c'est juste que les F sont différents]

John
la source
1
Je crois que si tout est équilibré, le résultat en utilisant un modèle mixte (c'est-à-dire obtenir des estimations avec ML ou REML) et le résultat en utilisant une ANOVA (c'est-à-dire obtenir des estimations avec des moments) seront presque identiques. Le problème dans ce cas est la syntaxe pour obtenir le même ajustement de modèle en utilisant les deux méthodes.
Aaron - Rétablir Monica
Je ne sais pas ce que vous essayez d'accomplir. Il semblait que vous essayiez simplement d'apprendre à reproduire les résultats pour mieux comprendre la relation. Ce que vous voulez faire ne peut pas être fait avec nlme. Je viens de regarder lmer et ce n'est pas possible non plus (bien qu'au moins il signale le MS pour vos effets de manière identique à l'ANOVA). Si vous voulez des résultats ANOVA, faites simplement une ANOVA. Avec des données réelles, faites correctement, les deux ne sont presque jamais exactement les mêmes.
John
1
Notez également que la première tentative n'est pas correcte car elle ne prend pas correctement en compte les effets aléatoires croisés.
Aaron - Rétablir Monica
1
John, merci pour ta réponse. Ma raison pour cela est que j'ai lu quelque part sur ce site que les mesures répétées ANOVA ne sont généralement plus recommandées, les modèles à effets mixtes étant préférés. Pour une raison quelconque, j'avais l'impression que les deux méthodes donneraient les mêmes résultats pour une conception équilibrée, et j'essayais de le confirmer.
mark999
Aaron, je l'ai pris comme la bonne réponse à ce qui serait considéré à peu près équivalent. C'est généralement ce qui est recommandé comme première étape dans la réplication de mesures répétées. Il n'y a pas de «correct» comme dans une correspondance parfaite. L'ajout d'effets plus aléatoires ne résoudra pas le problème. Je note que l'une des réponses auxquelles vous faites référence recommande la solution que vous avez écrite. Cependant, ce n'est absolument pas différent d'un résultat ANOVA (le modèle est différent mais pas ANOVA) que ce que j'ai dit était correct. Je soupçonne que l'auteur essayait de correspondre à ce que le PO demandait, mais ce n'est pas un modèle sensé.
John