Comment effectuer une ANOVA à trois facteurs en Python
Une ANOVA à trois facteurs est utilisée pour déterminer s’il existe ou non une différence statistiquement significative entre les moyennes de trois groupes indépendants ou plus qui ont été répartis sur trois facteurs.
L’exemple suivant montre comment effectuer une ANOVA à trois facteurs en Python.
Exemple : ANOVA à trois facteurs en Python
Supposons qu’un chercheur veuille déterminer si deux programmes d’entraînement conduisent à des améliorations moyennes différentes de la hauteur de saut chez les joueurs de basket-ball universitaires.
Le chercheur soupçonne que le sexe et la division (Division I ou II) peuvent également affecter la hauteur de saut, c’est pourquoi il collecte également des données sur ces facteurs.
Son objectif est d’effectuer une ANOVA à trois facteurs pour déterminer comment le programme d’entraînement, le sexe et la division affectent la hauteur de saut.
Utilisez les étapes suivantes pour effectuer cette ANOVA à trois facteurs en Python :
Étape 1 : Créer les données
Tout d’abord, créons un DataFrame pandas pour contenir les données :
import numpy as np
import pandas as pd
#create DataFrame
df = pd.DataFrame({'program': np.repeat([1, 2], 20),
'gender': np.tile(np.repeat(['M', 'F'], 10), 2),
'division': np.tile(np.repeat([1, 2], 5), 4),
'height': [7, 7, 8, 8, 7, 6, 6, 5, 6, 5,
5, 5, 4, 5, 4, 3, 3, 4, 3, 3,
6, 6, 5, 4, 5, 4, 5, 4, 4, 3,
2, 2, 1, 4, 4, 2, 1, 1, 2, 1]})
#view first ten rows of DataFrame
df[:10]
program gender division height
0 1 M 1 7
1 1 M 1 7
2 1 M 1 8
3 1 M 1 8
4 1 M 1 7
5 1 M 2 6
6 1 M 2 6
7 1 M 2 5
8 1 M 2 6
9 1 M 2 5
Étape 2 : Effectuer l’ANOVA à trois facteurs
Ensuite, nous pouvons utiliser la fonction anova_lm() de la bibliothèque statsmodels pour effectuer l’ANOVA à trois :
import statsmodels.api as sm
from statsmodels.formula.api import ols
#perform three-way ANOVA
model = ols("""height ~ C(program) + C(gender) + C(division) +
C(program):C(gender) + C(program):C(division) + C(gender):C(division) +
C(program):C(gender):C(division)""", data=df).fit()
sm.stats.anova_lm(model, typ=2)
sum_sq df F PR(>F)
C(program) 3.610000e+01 1.0 6.563636e+01 2.983934e-09
C(gender) 6.760000e+01 1.0 1.229091e+02 1.714432e-12
C(division) 1.960000e+01 1.0 3.563636e+01 1.185218e-06
C(program):C(gender) 2.621672e-30 1.0 4.766677e-30 1.000000e+00
C(program):C(division) 4.000000e-01 1.0 7.272727e-01 4.001069e-01
C(gender):C(division) 1.000000e-01 1.0 1.818182e-01 6.726702e-01
C(program):C(gender):C(division) 1.000000e-01 1.0 1.818182e-01 6.726702e-01
Residual 1.760000e+01 32.0 NaN NaN
Étape 3 : Interpréter les résultats
La colonne Pr(>F) affiche la valeur p pour chaque facteur individuel et les interactions entre les facteurs.
D’après les résultats, nous pouvons voir qu’aucune des interactions entre les trois facteurs n’était statistiquement significative.
Nous pouvons également constater que chacun des trois facteurs (programme, sexe et division) était statistiquement significatif avec les valeurs p suivantes :
- Valeur P du programme : 0,00000000298
- Valeur P du sexe : 0,00000000000171
- Valeur P de division : 0.00000185
En conclusion, nous dirions que le programme d’entraînement, le sexe et la division sont tous des indicateurs significatifs de l’augmentation de la hauteur de saut chez les joueurs.
Nous dirions également qu’il n’y a pas d’effets d’interaction significatifs entre ces trois facteurs.
Ressources additionnelles
Les didacticiels suivants expliquent comment adapter d’autres modèles ANOVA en Python :
Comment effectuer une ANOVA unidirectionnelle en Python
Comment effectuer une ANOVA bidirectionnelle en Python
Comment effectuer une ANOVA à mesures répétées en Python