Il y a eu récemment une question sur la syntaxe aov :
viewtopic.php?t=587
qui me conduit à la question suivante.
Supposons un essai avec 2 facteurs de contrôle control1 et control2, 1 facteur étudié etud, et une variable x. Le jeu de données fictif suivant en est une illustration dans un cas volontairement déséquilibré :
Code : Tout sélectionner
df <- data.frame(control1=as.factor(c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)),
control2=as.factor(c(1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2)),
etud=as.factor(c(1, 2, 3, 3, 1, 2, 2, 2, 3, 1, 3, 3)),
x=c(10.22, 11.16, 11.04, 10.72, 3.21, 4.78, 3.80,
5.39, 5.31, 4.27, 4.68, 4.76))
df$control1.2 <- as.factor(paste(as.numeric(df$control1),as.numeric(df$control2),sep='.'))
Le facteur control1.2 n'est autre que la juxtaposition de control1 et control2, et correspond donc à un facteur de contrôle équivalent aux 2 premiers.
L'analyse sans tenir compte des facteurs de contrôle ne montre pas d'effet de etud :
Code : Tout sélectionner
> anova(lm(x~etud,data=df))
Analysis of Variance Table
Response: x
Df Sum Sq Mean Sq F value Pr(>F)
etud 2 4.336 2.168 0.1867 0.8329
Residuals 9 104.522 11.614
Si on fait rentrer les facteurs de contrôle par le biais de control1.2, on n'obtient pas non plus d'effet de etud, malgré une diminution drastique de la résiduelle :
Code : Tout sélectionner
> anova(lm(x~control1.2+etud,data=df))
Analysis of Variance Table
Response: x
Df Sum Sq Mean Sq F value Pr(>F)
control1.2 3 105.353 35.118 101.1405 1.583e-05 ***
etud 2 1.421 0.711 2.0467 0.2101
Residuals 6 2.083 0.347
Maintenant on veut intégrer explicitement control1 et control2 dans le modèle, et c'est là que les problèmes commencent :
Code : Tout sélectionner
> anova(lm(x~control1*control2+etud,data=df))
Analysis of Variance Table
Response: x
Df Sum Sq Mean Sq F value Pr(>F)
control1 1 43.777 43.777 126.080 2.981e-05 ***
control2 1 31.507 31.507 90.743 7.635e-05 ***
etud 2 8.454 4.227 12.174 0.0077288 **
control1:control2 1 23.036 23.036 66.346 0.0001841 ***
Residuals 6 2.083 0.347
En effet l'interaction control1:control2 est rejetée en fin d'analyse (et est effectivement introduite à la fin dans les calculs), de sorte que le facteur etud est significatif à tort car il absorbe une partie de l'interaction des facteurs de contrôle.
L'analyse correcte serait la suivante :
Code : Tout sélectionner
> anova(lm(x~control1+control2+control1.2+etud,data=df))
Analysis of Variance Table
Response: x
Df Sum Sq Mean Sq F value Pr(>F)
control1 1 43.777 43.777 126.0799 2.981e-05 ***
control2 1 31.507 31.507 90.7425 7.635e-05 ***
control1.2 1 30.069 30.069 86.5991 8.716e-05 ***
etud 2 1.421 0.711 2.0467 0.2101
Residuals 6 2.083 0.347
D'où la question : est-il possible d'imposer l'odre d'introduction des effets et interactions dans un modèle ? par défaut il semble que R rejette systématiquement les intéractions à la fin.