Résultats ANOVA hiérarchique

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Résultats ANOVA hiérarchique

Messagepar Maxime Hervé » 30 Jan 2012, 16:25

Bonjour,

quelqu'un sait-il pourquoi, dans le cas d'une ANOVA hiérarchique, les résultats pour le facteur d'emboîtement sont délibérément faux ?
Par exemple, avec ce genre de données :

Code : Tout sélectionner

set.seed(1720)
result <- rnorm(120)
region <- factor(rep(paste("Region",1:3,sep=""),each=40))
pop <- factor(rep(c(paste("R1_pop",1:2,sep=""),paste("R2_pop",1:2,sep=""),paste("R3_pop",1:2,sep="")),each=20))

qui ont une structure de ce type :

Code : Tout sélectionner

aggregate(result~region+pop,FUN=length)
   region     pop result
1 Region1 R1_pop1     20
2 Region1 R1_pop2     20
3 Region2 R2_pop1     20
4 Region2 R2_pop2     20
5 Region3 R3_pop1     20
6 Region3 R3_pop2     20

on obtient le résultat suivant :

Code : Tout sélectionner

anova(lm(result~region/pop))
Analysis of Variance Table

Response: result
            Df  Sum Sq Mean Sq F value Pr(>F)
region       2   1.186 0.59275  0.5152 0.5987
region:pop   3   2.592 0.86413  0.7511 0.5239
Residuals  114 131.148 1.15042

alors que l'on devrait avoir :

Code : Tout sélectionner

Analysis of Variance Table

Response: result
            Df  Sum Sq Mean Sq F value Pr(>F)
region       2   1.186 0.59275  0.6860 0.4946
region:pop   3   2.592 0.86413  0.7511 0.5239
Residuals  114 131.148 1.15042

Le F est en effet calculé par rapport au carré moyen résiduel, alors qu'il devrait l'être à partir du carré moyen du facteur emboîté...
Je suis certain qu'il y a une très bonne raison, puisque la fonction Anova (du package car) procède de même. La question est : quelle est-elle ?

Maxime

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Messagepar Maxime Hervé » 01 Fév 2012, 10:47

Aucune idée ?

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 01 Fév 2012, 12:53

Bonjour,
Il s'agit d'une ANOVA avec 2 facteurs fixes l'un emboîté dans l'autre, et R applique bien les formules données par la théorie.

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Messagepar Maxime Hervé » 01 Fév 2012, 13:41

Je me permets de sortir une petite seconde de R mais c'est juste pour m'ôter un doute car je pense voir d'où vient mon erreur : si 2 facteurs sont emboîtés, on calcule l'effet du facteur d'emboîtement par rapport :
- au carré moyen résiduel si le facteur emboîté est fixe
- au carré moyen du facteur emboîté si celui-ci est aléatoire.
C'est bien ça ?
Mon erreur vient du fait qu'on présente dans la grande majorité des cas uniquement le calcul où le facteur emboîté est aléatoire, et que je l'ai pris pour une généralité... Or évidemment si on ne précise rien R le considère comme fixe...

Maxime

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 01 Fév 2012, 13:49

Oui c'est ça.

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Messagepar Maxime Hervé » 01 Fév 2012, 13:50

OK merci, sujet clos.

Maxime

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

Messagepar Matthieu Lesnoff » 03 Fév 2012, 10:56

en complément : dans le cas d'un modèle hiérarchique A/B où B est aléatoire, et lorsque le plan est équlibré, une manière simple de tester A en évitant les package nlme ou lme4 est d'utiliser aov :

Code : Tout sélectionner

fm <- aov(y ~ A + Error(B), data = x)
summary(fm)

# même chose (pour A) que :

require(nlme)
fm <- lme(fixed = y ~ A, random = ~ 1 | B, data = x)
anova(fm)
summary(fm)

require(lme4)
fm <- lmer(formula = y ~ A + (1 | B), data = x)
summary(fm)

ML

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 10 Fév 2012, 21:03

Mathieu, B n'est pas emboîté dans A dans les modèles que tu as écrit avec lme et lmer (pour aov je ne sais pas, je n'ai toujours pas compris la fonction Error())

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Messagepar Maxime Hervé » 11 Fév 2012, 09:56

Normalement, il me semble que si les niveaux de B sont bien codés, du genre :

Code : Tout sélectionner

A B
A a
A a
A a
A b
A b
A b
B c
B c
B c
B d
B d
B d
C e
C e
C e
C f
C f
C f

la syntaxe de Matthieu est bonne avec lme et lmer. Si jamais on a ce codage là :

Code : Tout sélectionner

A B
A a
A a
A a
A b
A b
A b
B a
B a
B a
B b
B b
B b
C a
C a
C a
C b
C b
C b

alors il faut donner explicitement la structure hiérarchique à lme et lmer, qui ne peuvent pas la comprendre seules (normal !).
Pour ce qui est d'aov(), le terme Error() signifie que le calcul du F de A se fera par rapport au Carré Moyen de B, et non au carré moyen résiduel.

Maxime

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 11 Fév 2012, 10:13

Ah ok, en remplaçant B par A:B. Merci !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité