Split-Plot ANOVA: tests de comparaison de modèles en R

12

Comment puis-je tester les effets dans une ANOVA Split-Plot en utilisant des comparaisons de modèles appropriées à utiliser avec les arguments Xet Mde anova.mlm()dans R? Je connais bien ?anova.mlmDalgaard (2007) [1]. Malheureusement, il ne brosse que les conceptions Split-Plot. Faire cela dans une conception entièrement randomisée avec deux facteurs intra-sujets:

N  <- 20  # 20 subjects total
P  <- 3   # levels within-factor 1
Q  <- 3   # levels within-factor 2
DV <- matrix(rnorm(N* P*Q), ncol=P*Q)           # random data in wide format
id <- expand.grid(IVw1=gl(P, 1), IVw2=gl(Q, 1)) # intra-subjects layout of data matrix

library(car)        # for Anova()
fitA <- lm(DV ~ 1)  # between-subjects design: here no between factor
resA <- Anova(fitA, idata=id, idesign=~IVw1*IVw2)
summary(resA, multivariate=FALSE, univariate=TRUE)  # all tests ...

Les comparaisons de modèles suivantes conduisent aux mêmes résultats. Le modèle restreint n'inclut pas l'effet en question mais tous les autres effets du même ordre ou inférieur, le modèle complet ajoute l'effet en question.

anova(fitA, idata=id, M=~IVw1 + IVw2, X=~IVw2, test="Spherical") # IVw1
anova(fitA, idata=id, M=~IVw1 + IVw2, X=~IVw1, test="Spherical") # IVw2
anova(fitA, idata=id, M=~IVw1 + IVw2 + IVw1:IVw2,
                      X=~IVw1 + IVw2, test="Spherical")          # IVw1:IVw2

Une conception Split-Splot avec un facteur intra et un entre sujets:

idB  <- subset(id, IVw2==1, select="IVw1")          # use only first within factor
IVb  <- gl(2, 10, labels=c("A", "B"))               # between-subjects factor
fitB <- lm(DV[ , 1:P] ~ IVb)                        # between-subjects design
resB <- Anova(fitB, idata=idB, idesign=~IVw1)
summary(resB, multivariate=FALSE, univariate=TRUE)  # all tests ...

Ce sont les anova()commandes pour répliquer les tests, mais je ne sais pas pourquoi ils fonctionnent. Pourquoi les tests des comparaisons de modèles suivants conduisent-ils aux mêmes résultats?

anova(fitB, idata=idB, X=~1, test="Spherical") # IVw1, IVw1:IVb
anova(fitB, idata=idB, M=~1, test="Spherical") # IVb

Deux facteurs intra-sujets et un facteur inter-sujets:

fitC <- lm(DV ~ IVb)  # between-subjects design
resC <- Anova(fitC, idata=id, idesign=~IVw1*IVw2)
summary(resC, multivariate=FALSE, univariate=TRUE)  # all tests ...

Comment reproduire les résultats ci-dessus avec les comparaisons de modèles correspondantes à utiliser avec les arguments Xet Mde anova.mlm()? Quelle est la logique derrière ces comparaisons de modèles?

EDIT: suncoolsu a souligné qu'à toutes fins pratiques, les données de ces conceptions devraient être analysées à l'aide de modèles mixtes. Cependant, j'aimerais toujours comprendre comment reproduire les résultats de summary(Anova())avec anova.mlm(..., X=?, M=?).

[1]: Dalgaard, P. 2007. Nouvelles fonctions pour l'analyse multivariée. R News, 7 (2), 2-7.

caracal
la source
Hé @caracal, je pense que la façon dont vous utilisez "Split-Plot Design" n'est pas la façon dont Casella, George le définit dans son livre, Statistical Design. Split Plot parle définitivement d'imbrication, mais est un moyen spécial d'imposer la structure de corrélation. Et la plupart du temps, vous finirez par utiliser un lme4package pour s'adapter au modèle ET NON lm. Mais cela peut être une vue très spécifique basée sur un livre. Je laisserai les commentaires des autres à ce sujet. Je peux donner un exemple basé sur la façon dont je l'interprète qui est différent du vôtre.
suncoolsu
2
@suncoolsu La terminologie des sciences sociales peut être différente, mais Kirk (1995, p512) et Maxwell et Delaney (2004, p592) appellent tous deux des modèles avec un «split-plot» entre et un facteur. L'inter-facteur fournit les "parcelles" (analogues à l'origine agricole).
caracal
J'ai beaucoup de choses dans mon assiette en ce moment. J'élargirai ma réponse pour être plus spécifique à votre question. Je vois que vous avez investi beaucoup d'efforts pour formuler votre question. Merci pour ça.
suncoolsu

Réponses:

10

Le Xet Mspécifient essentiellement les deux modèles que vous souhaitez comparer, mais uniquement en termes d'effets intra-sujet; il montre ensuite les résultats de l'interaction de tous les effets inter-sujets (y compris l'interception) avec les effets intra-sujets qui ont changé entre Xet M.

Vos exemples fitBsont plus faciles à comprendre si nous ajoutons les valeurs par défaut pour Xet M:

anova(fitB, idata=idB, M=~1, X=~0, test="Spherical") # IVb
anova(fitB, idata=idB, M=diag(3), X=~1, test="Spherical") # IVw1, IVw1:IVb

Le premier modèle est le changement des effets non internes au sujet (tous ont la même moyenne) à une moyenne différente pour chacun, nous avons donc ajouté l' ideffet aléatoire, ce qui est la bonne chose pour tester l'interception globale et l'effet global entre les sujets sur.

Le deuxième modèle annonce l' id:IVw1interaction, ce qui est la bonne chose à tester IVw1et les IVw1:IVbtermes contre. Puisqu'il n'y a qu'un effet intra-sujet (avec trois niveaux), la valeur par défaut de diag(3)dans le deuxième modèle en tiendra compte; ce serait équivalent à courir

anova(fitB, idata=idB, M=~IVw1, X=~1, test="Spherical") # IVw1, IVw1:IVb

Pour votre fitC, je crois que ces commandes recréeront le Anovarésumé.

anova(fitC, idata=id, M=~1, X=~0, test="Spherical") #IVb
anova(fitC, idata=id, M=~IVw1 + IVw2, X=~IVw2, test="Spherical") # IVw1
anova(fitC, idata=id, M=~IVw1 + IVw2, X=~IVw1, test="Spherical") # IVw2
anova(fitC, idata=id, M=~IVw1 + IVw2 + IVw1:IVw2,
                  X=~IVw1 + IVw2, test="Spherical")          # IVw1:IVw2

Maintenant, comme vous l'avez découvert, ces commandes sont vraiment délicates. Heureusement, il n'y a plus beaucoup de raisons de les utiliser. Si vous êtes prêt à assumer la sphéricité, vous devez simplement utiliser aov, ou pour une syntaxe encore plus simple, simplement utiliser lmet calculer vous-même les bons tests F. Si vous n'êtes pas prêt à assumer la sphéricité, l'utilisation lmeest vraiment la voie à suivre car vous obtenez beaucoup plus de flexibilité que vous ne le faites avec les corrections GG et HF.

Par exemple, voici le code aovet lmpour votre fitA. Vous devez d'abord avoir les données au format long; voici une façon de le faire:

library(reshape)
d0 <- data.frame(id=1:nrow(DV), DV)
d0$IVb <- IVb
d0 <- melt(d0, id.vars=c(1,11), measure.vars=2:10)
id0 <- id
id0$variable <- factor(levels(d0$variable), levels=levels(d0$variable))
d <- merge(d0, id0)
d$id <- factor(d$id)

Et voici le lm andcode aov`:

anova(lm(value ~ IVw1*IVw2*id, data=d))
summary(aov(value ~ IVw1*IVw2 + Error(id/(IVw1*IVw2)), data=d))
Aaron a laissé Stack Overflow
la source
Merci beaucoup, c'est exactement ce que je cherchais! J'étais toujours intéressé anova()par le problème Anova()décrit ici . Mais votre dernière suggestion fonctionne aussi bien et est plus simple. (Petite chose: je pense que les 2 dernières lignes manquent chacune 1 parenthèse fermante, et il devrait lire Error(id/(IVw1*IVw2)))
caracal
8

Les conceptions de parcelles divisées sont originaires de l'agriculture, d'où le nom. Mais ils se produisent fréquemment et je dirais - le cheval de bataille de la plupart des essais cliniques. Le graphique principal est traité avec un niveau d'un facteur tandis que les niveaux d'un autre facteur peuvent varier avec les sous-graphiques. La conception résulte de restrictions sur une randomisation complète. Par exemple: un champ peut être divisé en quatre sous-parcelles. Il peut être possible de planter différentes variétés dans des sous-parcelles, mais un seul type d'irrigation peut être utilisé pour l'ensemble du champ. Pas la distinction entre les divisions et les blocs. Les blocs sont des caractéristiques des unités expérimentales dont nous avons la possibilité de tirer parti dans la conception expérimentale, car nous savons qu'ils sont là. Les scissions, en revanche, imposent des restrictions sur les affectations de facteurs possibles. Ils imposent des exigences à la conception qui empêchent une randomisation complète.

Ils sont beaucoup utilisés dans les essais cliniques où lorsqu'un facteur est facile à changer tandis qu'un autre facteur prend beaucoup plus de temps à changer. Si l'expérimentateur doit effectuer toutes les séries pour chaque niveau du facteur difficile à modifier consécutivement, une conception de parcelle divisée en résulte avec le facteur difficile à changer représentant le facteur de parcelle entier.

Voici un exemple: Dans un essai agricole en champ, l'objectif était de déterminer les effets de deux variétés de cultures et de quatre méthodes d'irrigation différentes. Huit champs étaient disponibles, mais un seul type d'irrigation peut être appliqué à chaque champ. Les champs peuvent être divisés en deux parties avec une variété différente dans chaque partie. Le facteur de parcelle entier est l'irrigation, qui devrait être assignée au hasard aux champs. Dans chaque champ, la variété est attribuée.

Voici comment procéder dans R:

install.packages("faraway")
data(irrigation)
summary(irrigation)

library(lme4)

R> (lmer(yield ~ irrigation * variety + (1|field), data = irrigation))
Linear mixed model fit by REML 
Formula: yield ~ irrigation * variety + (1 | field) 
   Data: irrigation 
  AIC  BIC logLik deviance REMLdev
 65.4 73.1  -22.7     68.6    45.4
Random effects:
 Groups   Name        Variance Std.Dev.
 field    (Intercept) 16.20    4.02    
 Residual              2.11    1.45    
Number of obs: 16, groups: field, 8

Fixed effects:
                       Estimate Std. Error t value
(Intercept)               38.50       3.02   12.73
irrigationi2               1.20       4.28    0.28
irrigationi3               0.70       4.28    0.16
irrigationi4               3.50       4.28    0.82
varietyv2                  0.60       1.45    0.41
irrigationi2:varietyv2    -0.40       2.05   -0.19
irrigationi3:varietyv2    -0.20       2.05   -0.10
irrigationi4:varietyv2     1.20       2.05    0.58

Correlation of Fixed Effects:
            (Intr) irrgt2 irrgt3 irrgt4 vrtyv2 irr2:2 irr3:2
irrigation2 -0.707                                          
irrigation3 -0.707  0.500                                   
irrigation4 -0.707  0.500  0.500                            
varietyv2   -0.240  0.170  0.170  0.170                     
irrgtn2:vr2  0.170 -0.240 -0.120 -0.120 -0.707              
irrgtn3:vr2  0.170 -0.120 -0.240 -0.120 -0.707  0.500       
irrgtn4:vr2  0.170 -0.120 -0.120 -0.240 -0.707  0.500  0.500

Fondamentalement, ce que dit ce modèle, l'irrigation et la variété sont des effets fixes et la variété est imbriquée dans l'irrigation. Les champs sont les effets aléatoires et imagineront quelque chose comme

I_1 | I_2 | I_3 | I_4

V_1 V_2 | V_1 V_2 | V_1 V_2 | V_1 V_2

Mais c'était une variante spéciale avec un effet de tracé entier fixe et un effet de sous-tracé. Il peut y avoir des variantes dans lesquelles une ou plusieurs sont aléatoires. Il peut y avoir des conceptions plus compliquées comme split-split. En gros, vous pouvez aller sauvage et fou. Mais étant donné que la structure et la distribution sous-jacentes (c'est-à-dire fixes ou aléatoires, imbriquées ou croisées, ..) sont clairement comprises, la lmer-Ninjavolonté de modéliser ne posera aucun problème. Peut-être que l'interprétation sera un gâchis.

Concernant les comparaisons, disons que vous avez lmer1et lmer2:

anova(lmer1, lmer2)

vous donnera le test approprié basé sur la statistique du test du chi carré avec des degrés de liberté égaux à la différence des paramètres.

cf: Faraway, J., Extension de modèles linéaires avec R.

Casella, G., Conception statistique

suncoolsu
la source
J'apprécie l'introduction à l'analyse des conceptions de split-splot avec des modèles à effets mixtes et d'autres informations de fond! C'est certainement la façon privilégiée d'effectuer l'analyse. J'ai mis à jour ma question pour souligner que j'aimerais toujours savoir comment faire cela "à l'ancienne".
caracal