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

Ajouter un commentaire

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