Comment configurer et interpréter les contrastes ANOVA avec le package voiture dans R?

15

Disons que j'ai une simple expérience factorielle 2x2 sur laquelle je veux faire de l'ANOVA. Comme ça, par exemple:

d   <- data.frame(a=factor(sample(c('a1','a2'), 100, rep=T)),
                  b=factor(sample(c('b1','b2'), 100, rep=T)));
d$y <- as.numeric(d$a)*rnorm(100, mean=.75, sd=1) +
       as.numeric(d$b)*rnorm(100, mean=1.2, sd=1) +
       as.numeric(d$a)*as.numeric(d$b)*rnorm(100, mean=.5, sd=1) +
       rnorm(100);
  1. En l'absence d'interaction significative, par défaut (c.-à-d. contr.treatment) La sortie de Anova()est la signification globale de asur tous les niveaux de bet de bsur tous les niveaux de a, n'est-ce pas?

  2. Comment dois-je spécifier un contraste qui me permettrait de tester la signification de l'effet aavec le bmaintien constant au niveau b1, de l'effet aavec le bmaintien constant au niveau b2 et de l'interaction a:b?

f1r3br4nd
la source

Réponses:

18

Votre exemple conduit à des tailles de cellules inégales, ce qui signifie que les différents "types de somme de carrés" importent, et le test des effets principaux n'est pas aussi simple que vous le dites. Anova()utilise la somme des carrés de type II. Voir cette question pour commencer.

Il existe différentes façons de tester les contrastes. Notez que les types SS n'ont pas d'importance car nous testons finalement dans la conception à un facteur associée. Je suggère d'utiliser les étapes suivantes:

# turn your 2x2 design into the corresponding 4x1 design using interaction()
> d$ab <- interaction(d$a, d$b)       # creates new factor coding the 2*2 conditions
> levels(d$ab)                        # this is the order of the 4 conditions
[1] "a1.b1" "a2.b1" "a1.b2" "a2.b2"

> aovRes <- aov(y ~ ab, data=d)       # oneway ANOVA using aov() with new factor

# specify the contrasts you want to test as a matrix (see above for order of cells)
> cntrMat <- rbind("contr 01"=c(1, -1,  0,  0),  # coefficients for testing a within b1
+                  "contr 02"=c(0,  0,  1, -1),  # coefficients for testing a within b2
+                  "contr 03"=c(1, -1, -1,  1))  # coefficients for interaction

# test contrasts without adjusting alpha, two-sided hypotheses
> library(multcomp)                   # for glht()
> summary(glht(aovRes, linfct=mcp(ab=cntrMat), alternative="two.sided"),
+         test=adjusted("none"))
Simultaneous Tests for General Linear Hypotheses
Multiple Comparisons of Means: User-defined Contrasts
Fit: aov(formula = y ~ ab, data = d)

Linear Hypotheses:
              Estimate Std. Error t value Pr(>|t|)
contr 01 == 0  -0.7704     0.7875  -0.978    0.330
contr 02 == 0  -1.0463     0.9067  -1.154    0.251
contr 03 == 0   0.2759     1.2009   0.230    0.819
(Adjusted p values reported -- none method)    

Vérifiez maintenant manuellement le résultat du premier contraste.

> P       <- 2                             # number of levels factor a
> Q       <- 2                             # number of levels factor b
> Njk     <- table(d$ab)                   # cell sizes
> Mjk     <- tapply(d$y, d$ab, mean)       # cell means
> dfSSE   <- sum(Njk) - P*Q                # degrees of freedom error SS
> SSE     <- sum((d$y - ave(d$y, d$ab, FUN=mean))^2)    # error SS
> MSE     <- SSE / dfSSE                   # mean error SS
> (psiHat <- sum(cntrMat[1, ] * Mjk))      # contrast estimate
[1] -0.7703638

> lenSq <- sum(cntrMat[1, ]^2 / Njk)       # squared length of contrast
> (SE   <- sqrt(lenSq*MSE))                # standard error
[1] 0.7874602

> (tStat <- psiHat / SE)                   # t-statistic
[1] -0.9782893

> (pVal <- 2 * (1-pt(abs(tStat), dfSSE)))  # p-value
[1] 0.3303902
caracal
la source
3
MERCI!!! Vous venez de répondre à une question que deux semestres de statistiques de niveau supérieur n'ont pas. J'ai même envisagé d'utiliser l'anova unidirectionnel auparavant, mais je n'ai trouvé aucune confirmation que c'était une approche légitime.
f1r3br4nd
@ f1r3br4nd C'est légitime car l'erreur MS est égale dans la conception unidirectionnelle associée et dans la conception bidirectionnelle d'origine.
caracal
Une dernière question complémentaire, si vous me le permettez: comment l'interaction bidirectionnelle se généralise-t-elle avec les interactions d'un plus grand nombre de variables? Si j'avais un terme A B C, devrais-je le construire à partir de A: B = (A | B = 1 - A | B = 2), C: B = (C | B = 1 - C | B = 2 ), A: B: C = A: B - C: B, et ainsi de suite?
f1r3br4nd
2
@ f1r3br4nd Dans une conception 2x2x2, il n'y a qu'un seul contraste d'interaction A B C unique (comme il n'y en a qu'un dans un boîtier 2x2). Les coefficients dans un contraste d'interaction A B C doivent totaliser zéro sur les lignes (A), les colonnes (B) et les plans (C) dans le "cube de conception". Si l'ordre des cellules dans le plan unidirectionnel associé est a1.b1.c1, a2.b1.c1, a1.b2.c1, a2.b2.c1, a1.b1.c2, a2.b1.c2, a1.b2.c2, a2.b2.c2, alors les coefficients le sont c(1, -1, -1, 1, -1, 1, 1, -1). Si vous avez plus de deux groupes dans vos facteurs, tous les contrastes suivant la règle de la somme à zéro sont des contrastes d'interaction à 3 voies.
caracal