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

Ajouter un commentaire

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