Tutoriel R ANOVA : unidirectionnel et bidirectionnel (avec exemples)
Qu'est-ce que l'ANOVA ?
Analyse de la variance (ANOVA) est une technique statistique, couramment utilisรฉe pour รฉtudier les diffรฉrences entre deux ou plusieurs moyennes de groupe. Le test ANOVA est centrรฉ sur les diffรฉrentes sources de variation d'une variable typique. L'ANOVA dans R fournit principalement la preuve de l'existence de l'รฉgalitรฉ moyenne entre les groupes. Cette mรฉthode statistique est une extension du test t. Il est utilisรฉ dans une situation oรน la variable factorielle comporte plus dโun groupe.
ANOVA unidirectionnelle
Il existe de nombreuses situations dans lesquelles vous devez comparer la moyenne entre plusieurs groupes. Par exemple, le service marketing souhaite savoir si trois รฉquipes ont les mรชmes performances commerciales.
- รquipe : 3 facteurs de niveau : A, B et C
- Vente : une mesure de performance
Le test ANOVA permet de savoir si les trois groupes ont des performances similaires.
Pour clarifier si les donnรฉes proviennent de la mรชme population, vous pouvez effectuer une analyse de variance unidirectionnelle (ANOVA unidirectionnelle ci-aprรจs). Ce test, comme tout autre test statistique, indique si l'hypothรจse H0 peut รชtre acceptรฉe ou rejetรฉe.
Hypothรจse dans le test ANOVA unidirectionnel
- H0 : Les moyennes entre les groupes sont identiques
- H3 : Au moins, la moyenne d'un groupe est diffรฉrente
En dโautres termes, lโhypothรจse H0 implique quโil nโy a pas suffisamment de preuves pour prouver que la moyenne du groupe (facteur) est diffรฉrente dโun autre.
Ce test est similaire au test t, bien que le test ANOVA soit recommandรฉ dans les situations comportant plus de 2 groupes. Sauf que le test t et lโANOVA fournissent des rรฉsultats similaires.
Hypothรจses
Nous supposons que chaque facteur est รฉchantillonnรฉ de maniรจre alรฉatoire, indรฉpendant et provient d'une population normalement distribuรฉe avec des variances inconnues mais รฉgales.
Interprรฉter le test ANOVA
La statistique F est utilisรฉe pour tester si les donnรฉes proviennent de populations significativement diffรฉrentes, c'est-ร -dire de moyennes d'รฉchantillon diffรฉrentes.
Pour calculer la statistique F, vous devez diviser le variabilitรฉ entre les groupes au cours de la variabilitรฉ intra-groupe.
Le entre-groupes la variabilitรฉ reflรจte les diffรฉrences entre les groupes au sein de lโensemble de la population. Regardez les deux graphiques ci-dessous pour comprendre le concept de variance entre les groupes.
Le graphique de gauche montre trรจs peu de variation entre les trois groupes, et il est trรจs probable que les trois moyennes tendent vers global moyenne (c'est-ร -dire moyenne pour les trois groupes).
Le graphique de droite reprรฉsente trois distributions trรจs รฉloignรฉes les unes des autres, et aucune d'entre elles ne se chevauche. Il y a de fortes chances que la diffรฉrence entre la moyenne totale et la moyenne du groupe soit importante.
Le au sein du groupe la variabilitรฉ prend en compte la diffรฉrence entre les groupes. La variation vient des observations individuelles ; certains points peuvent รชtre totalement diffรฉrents des intentions du groupe. Le au sein du groupe la variabilitรฉ capte cet effet et se rรฉfรจre ร l'erreur d'รฉchantillonnage.
Pour comprendre visuellement le concept de variabilitรฉ au sein du groupe, regardez le graphique ci-dessous.
La partie gauche reprรฉsente la rรฉpartition de trois groupes diffรฉrents. Vous avez augmentรฉ la rรฉpartition de chaque รฉchantillon et il est clair que la variance individuelle est importante. Le test F diminuera, ce qui signifie que vous aurez tendance ร accepter l'hypothรจse nulle
La partie droite montre exactement les mรชmes รฉchantillons (moyenne identique) mais avec une variabilitรฉ plus faible. Cela conduit ร une augmentation du test F et tend en faveur de lโhypothรจse alternative.
Vous pouvez utiliser les deux mesures pour construire les statistiques F. Il est trรจs intuitif de comprendre la statistique F. Si le numรฉrateur augmente, cela signifie que la variabilitรฉ entre les groupes est รฉlevรฉe et qu'il est probable que les groupes de l'รฉchantillon proviennent de distributions complรจtement diffรฉrentes.
En dโautres termes, une statistique F faible indique peu ou pas de diffรฉrence significative entre la moyenne du groupe.
Exemple de test ANOVA unidirectionnel
Vous utiliserez l'ensemble de donnรฉes sur les poisons pour mettre en ลuvre le test ANOVA unidirectionnel. L'ensemble de donnรฉes contient 48 lignes et 3 variables :
- Temps : Temps de survie de l'animal
- poison : Type de poison utilisรฉ : niveau de facteur : 1,2 et 3
- traiter : Type de traitement utilisรฉ : niveau de facteur : 1,2 et 3
Avant de commencer ร calculer le test ANOVA, vous devez prรฉparer les donnรฉes comme suit :
- รtape 1 : Importer les donnรฉes
- รtape 2 : Supprimez les variables inutiles
- รtape 3 : Convertir le poison variable en niveau ordonnรฉ
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv" df <- read.csv(PATH) %>% select(-X) %>% mutate(poison = factor(poison, ordered = TRUE)) glimpse(df)
Sortie :
## Observations: 48 ## Variables: 3 ## $ time <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0... ## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2... ## $ treat <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...
Notre objectif est de tester lโhypothรจse suivante :
- H0 : Il n'y a pas de diffรฉrence dans la durรฉe moyenne de survie entre les groupes
- H3 : La moyenne des durรฉes de survie est diffรฉrente pour au moins un groupe.
En dโautres termes, vous voulez savoir sโil existe une diffรฉrence statistique entre la moyenne des temps de survie selon le type de poison administrรฉ au cochon dโInde.
Vous procรฉderez comme suit :
- รtape 1 : Vรฉrifiez le format de la variable poison
- รtape 2 : Imprimez la statistique rรฉcapitulative : nombre, moyenne et รฉcart type
- รtape 3 : Tracer une boรฎte ร moustaches
- รtape 4 : Calculer le test ANOVA unidirectionnel
- รtape 5 : Exรฉcutez un test t par paire
รtape 1) Vous pouvez vรฉrifier le niveau du poison avec le code suivant. Vous devriez voir trois valeurs de caractรจres car vous les convertissez en facteur avec le verbe muter.
levels(df$poison)
Sortie :
## [1] "1" "2" "3"
รtape 2) Vous calculez la moyenne et lโรฉcart type.
df % > % group_by(poison) % > % summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
Sortie :
## # A tibble: 3 x 4 ## poison count_poison mean_time sd_time ## <ord> <int> <dbl> <dbl> ## 1 1 16 0.617500 0.20942779 ## 2 2 16 0.544375 0.28936641 ## 3 3 16 0.276250 0.06227627
รtape 3) ร la troisiรจme รฉtape, vous pouvez vรฉrifier graphiquement sโil existe une diffรฉrence entre les distributions. Notez que vous incluez le point instable.
ggplot(df, aes(x = poison, y = time, fill = poison)) +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(0.21)) +
theme_classic()
Sortie :
รtape 4) Vous pouvez exรฉcuter le test ANOVA unidirectionnel avec la commande aov. La syntaxe de base d'un test ANOVA est la suivante :
aov(formula, data) Arguments: - formula: The equation you want to estimate - data: The dataset used
La syntaxe de la formule est :
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Vous pouvez rรฉpondre ร notre question : Y a-t-il une diffรฉrence dans la durรฉe de survie entre le cochon d'Inde, connaissant le type de poison administrรฉ.
Notez qu'il est conseillรฉ de stocker le modรจle et d'utiliser la fonction summary() pour obtenir une meilleure impression des rรฉsultats.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Explication du code
- aov(time ~ poison, data = df) : Exรฉcutez le test ANOVA avec la formule suivante
- summary(anova_one_way) : Imprimer le rรฉsumรฉ du test
Sortie :
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.033 0.5165 11.79 7.66e-05 *** ## Residuals 45 1.972 0.0438 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La valeur p est infรฉrieure au seuil habituel de 0.05. Vous pouvez affirmer avec certitude qu'il existe une diffรฉrence statistique entre les groupes, indiquรฉe par le ยซ * ยป.
Comparaison par paire
Le test ANOVA unidirectionnel nโindique pas quel groupe a une moyenne diffรฉrente. Au lieu de cela, vous pouvez effectuer un test Tukey avec la fonction TukeyHSD().
TukeyHSD(anova_one_way)
Sortie :
ANOVA bidirectionnelle
Un test ANOVA bidirectionnel ajoute une autre variable de groupe ร la formule. Il est identique au test ANOVA unidirectionnel, bien que la formule change lรฉgรจrement :
y=x1+x2
avec est une variable quantitative et et sont des variables catรฉgorielles.
Hypothรจse dans le test ANOVA bidirectionnel
- H0 : les moyennes sont รฉgales pour les deux variables (c'est-ร -dire la variable factorielle)
- H3 : Les moyennes sont diffรฉrentes pour les deux variables
Vous ajoutez une variable de traitement ร notre modรจle. Cette variable indique le traitement rรฉservรฉ au cochon d'Inde. Vous souhaitez voir s'il existe une dรฉpendance statistique entre le poison et le traitement administrรฉ au cochon d'Inde.
Nous ajustons notre code en ajoutant un traitement avec l'autre variable indรฉpendante.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
Sortie :
## Df Sum Sq Mean Sq F value Pr(>F) ## poison 2 1.0330 0.5165 20.64 5.7e-07 *** ## treat 3 0.9212 0.3071 12.27 6.7e-06 *** ## Residuals 42 1.0509 0.0250 ## ---
Vous pouvez conclure que le poison et le traitement sont statistiquement diffรฉrents de 0. Vous pouvez rejeter lโhypothรจse NULL et confirmer que le changement de traitement ou de poison a un impact sur la durรฉe de survie.
Rรฉsumรฉ
Nous pouvons rรฉsumer le test dans le tableau ci-dessous :
| Test | Code | Hypothรจse | Valeur P |
|---|---|---|---|
| ANOVA ร sens unique |
aov(y ~ X, data = df) |
H3 : La moyenne est diffรฉrente pour au moins un groupe | 0.05 |
| Par paire |
TukeyHSD(ANOVA summary) |
0.05 | |
| ANOVA ร deux voies |
aov(y ~ X1 + X2, data = df) |
H3 : La moyenne est diffรฉrente pour les deux groupes | 0.05 |




