Quand utiliser aov() contre anova() dans R



Les fonctions aov() et anova() dans R semblent similaires, mais nous les utilisons en réalité dans deux scénarios différents.

Nous utilisons aov() lorsque nous souhaitons ajuster un modèle ANOVA et afficher les résultats dans un tableau récapitulatif ANOVA.

Nous utilisons anova() lorsque nous souhaitons comparer l’ajustement de modèles de régression imbriqués pour déterminer si un modèle de régression avec un certain ensemble de coefficients offre un ajustement significativement meilleur qu’un modèle avec seulement un sous-ensemble de coefficients.

Les exemples suivants montrent comment utiliser chaque fonction dans la pratique.

Exemple 1 : Comment utiliser aov() dans R

Supposons que nous souhaitions effectuer une ANOVA unidirectionnelle pour déterminer si trois programmes d’exercices différents ont un impact différent sur la perte de poids.

Nous recrutons 90 personnes pour participer à une expérience dans laquelle nous assignons au hasard 30 personnes à suivre soit le programme A, soit le programme B, soit le programme C pendant un mois.

Le code suivant montre comment utiliser la fonction aov() dans R pour effectuer cette ANOVA unidirectionnelle :

#make this example reproducible
set.seed(0)

#create data frame
df <- data.frame(program = rep(c("A", "B", "C"), each=30),
                 weight_loss = c(runif(30, 0, 3),
                                 runif(30, 0, 5),
                                 runif(30, 1, 7)))

#fit one-way anova using aov()
fit <- aov(weight_loss ~ program, data=df)

#view results
summary(fit)

            Df Sum Sq Mean Sq F value   Pr(>F)    
program      2  98.93   49.46   30.83 7.55e-11 ***
Residuals   87 139.57    1.60                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

À partir des résultats du modèle, nous pouvons voir que la valeur p du programme (0,0000000000755) est inférieure à 0,05, ce qui signifie qu’il existe une différence statistiquement significative dans la perte de poids moyenne entre les trois programmes.

Exemple 2 : Comment utiliser anova() dans R

Supposons que nous souhaitions utiliser le nombre d’heures étudiées pour prédire les résultats aux examens des étudiants d’un certain collège. Nous pouvons décider d’adapter les deux modèles de régression suivants :

Modèle complet : score = β 0 + B 1 (heures) + B 2 (heures) 2

Modèle réduit : score = β 0 + B 1 (heures)

Le code suivant montre comment utiliser la fonction anova() dans R pour effectuer un test de manque d’ajustement afin de déterminer si le modèle complet offre un ajustement nettement meilleur que le modèle réduit :

#make this example reproducible
set.seed(1)

#create dataset
df <- data.frame(hours = runif(50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)

#view head of data
head(df)

      hours    score
1  7.655087 64.30191
2  8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5  7.016819 59.81595
6 13.983897 83.60510

#fit full model
full <- lm(score ~ poly(hours,2), data=df)

#fit reduced model
reduced <- lm(score ~ hours, data=df)

#perform lack of fit test using anova()
anova(full, reduced)

Analysis of Variance Table

Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
  Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
1     47 368.48                                
2     48 451.22 -1   -82.744 10.554 0.002144 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Étant donné que la valeur p dans le tableau de sortie (0,002144) est inférieure à 0,05, nous pouvons rejeter l’hypothèse nulle du test et conclure que le modèle complet offre un ajustement statistiquement significativement meilleur que le modèle réduit.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment effectuer une ANOVA unidirectionnelle dans R
Comment effectuer une ANOVA bidirectionnelle dans R
Comment effectuer une ANOVA à mesures répétées dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *