Comment effectuer une ANOVA bidirectionnelle en Python
Une ANOVA bidirectionnelle 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 deux facteurs.
Le but d’une ANOVA bidirectionnelle est de déterminer l’impact de deux facteurs sur une variable de réponse et de déterminer s’il existe ou non une interaction entre les deux facteurs sur la variable de réponse.
Ce tutoriel explique comment effectuer une ANOVA bidirectionnelle en Python.
Exemple : ANOVA bidirectionnelle en Python
Un botaniste veut savoir si la croissance des plantes est influencée par l’exposition au soleil et la fréquence des arrosages. Elle plante 30 graines et les laisse pousser pendant deux mois dans différentes conditions d’exposition au soleil et de fréquence d’arrosage. Après deux mois, elle enregistre la hauteur de chaque plante, en pouces.
Suivez les étapes suivantes pour effectuer une ANOVA bidirectionnelle afin de déterminer si la fréquence d’arrosage et l’exposition au soleil ont un effet significatif sur la croissance des plantes, et pour déterminer s’il existe un effet d’interaction entre la fréquence d’arrosage et l’exposition au soleil.
Étape 1 : Saisissez les données.
Tout d’abord, nous allons créer un DataFrame pandas qui contient les trois variables suivantes :
- eau : à quelle fréquence chaque plante a été arrosée : quotidiennement ou hebdomadairement
- soleil : quantité d’exposition au soleil que chaque plante a reçue : faible, moyenne ou élevée
- hauteur : la hauteur de chaque plante (en pouces) après deux mois
import numpy as np import pandas as pd #create data df = pd.DataFrame({'water': np.repeat(['daily', 'weekly'], 15), 'sun': np.tile(np.repeat(['low', 'med', 'high'], 5), 2), 'height': [6, 6, 6, 5, 6, 5, 5, 6, 4, 5, 6, 6, 7, 8, 7, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 8]}) #view first ten rows of data df[:10] water sun height 0 daily low 6 1 daily low 6 2 daily low 6 3 daily low 5 4 daily low 6 5 daily med 5 6 daily med 5 7 daily med 6 8 daily med 4 9 daily med 5
Étape 2 : Effectuez l’ANOVA bidirectionnelle.
Ensuite, nous effectuerons l’ANOVA bidirectionnelle en utilisant la fonction anova_lm() de la bibliothèque statsmodels :
import statsmodels.api as sm from statsmodels.formula.api import ols #perform two-way ANOVA model = ols('height ~ C(water) + C(sun) + C(water):C(sun)', data=df).fit() sm.stats.anova_lm(model, typ=2) sum_sq df F PR(>F) C(water) 8.533333 1.0 16.0000 0.000527 C(sun) 24.866667 2.0 23.3125 0.000002 C(water):C(sun) 2.466667 2.0 2.3125 0.120667 Residual 12.800000 24.0 NaN NaN
Étape 3 : Interprétez les résultats.
Nous pouvons voir les valeurs p suivantes pour chacun des facteurs dans le tableau :
- eau : valeur p = 0,000527
- soleil : valeur p = 0,0000002
- eau*soleil : valeur p = 0,120667
Puisque les valeurs p pour l’eau et le soleil sont toutes deux inférieures à 0,05, cela signifie que les deux facteurs ont un effet statistiquement significatif sur la hauteur des plantes.
Et comme la valeur p pour l’effet d’interaction (0,120667) n’est pas inférieure à 0,05, cela nous indique qu’il n’y a pas d’effet d’interaction significatif entre l’exposition au soleil et la fréquence d’arrosage.
Remarque : Bien que les résultats de l’ANOVA nous indiquent que la fréquence d’arrosage et l’exposition au soleil ont un effet statistiquement significatif sur la hauteur des plantes, nous devrons effectuer des tests post-hoc pour déterminer exactement comment les différents niveaux d’eau et de soleil affectent la hauteur des plantes.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes en Python :
Comment effectuer une ANOVA unidirectionnelle en Python
Comment effectuer une ANOVA à trois facteurs en Python