Annalyse de la variance

Vous allez mener une ANOVA sur notre cas d'étude, en regardant précisément :

  • une ANOVA à 1 facteur : la variété de blé ;
  • une ANOVA à 1 facteur : le pesticide utilisé ;
  • une ANOVA à 2 facteurs : la variété de blé ET le pesticide utilisé.

Dans tous les cas, nous cherchons à comprendre si les facteurs ont une influence sur le rendement de blé.

N.B. : Ce cas est issu de la très bonne présentation de la méthode faite sur ce site

Importez les données

On charge tout d'abord les librairies nécessaires :

In [1]:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.api as sm

Le fichier data_anova.csv contient les rendements de blé pour 80 parcelles en fonction de la variété de blé (V1, V2, V3 ou V4).

In [3]:
ble = pd.read_csv('https://www.labri.fr/~zemmari/datasets/data_anova.csv', sep=";", decimal='.')
ble.head()
Out[3]:
parcelle variete phyto rdt
0 1 V1 Avec 5652
1 2 V1 Avec 5583
2 3 V1 Avec 5612
3 4 V1 Avec 5735
4 5 V1 Avec 5704

ANOVA à 1 facteur :

On veut étudier ici l'influence de la variété de blé sur le rendement.

On peut visualiser l'influence de la variété en affichant ces boîtes à moustaches :

In [4]:
sns.set()

ax = sns.boxplot(x="variete", y="rdt", data=ble, color='blue')
plt.xlabel('Variété de blé')
plt.ylabel('Rendement')
plt.title('Boîtes à moustaches')
plt.show()

Les 4 variétés semblent assez différentes, même si l'ordre de grandeur de ces écarts n'est pas très grand. La question sera de savoir si ces écarts sont significatifs ou pas.

C'est l'ANOVA qui nous permettra de répondre à cette question.

Étudions maintenant l'influence de la présence ou non de pesticide sur le rendement :

In [5]:
ax = sns.boxplot(x="phyto", y="rdt", data=ble, color='green')
plt.xlabel('Traitement phytosanitaire')
plt.ylabel('Rendement')
plt.title('Boîtes à moustaches')
plt.show()

Ici, les boîtes à moustaches ne sont pas très distinctes, même s'il y a un peu plus de variance dans le cas "SANS pesticide".

La présence de pesticide a-t-elle un impact sur le rendement ? L'ANOVA nous permet de confirmer ou d'infirmer cette intuition.

Lançons l'ANOVA pour tester l'influence de la variété de blé :

In [6]:
anova_variete = smf.ols('rdt~variete', data=ble).fit()
print(anova_variete.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    rdt   R-squared:                       0.448
Model:                            OLS   Adj. R-squared:                  0.426
Method:                 Least Squares   F-statistic:                     20.53
Date:                Wed, 25 Sep 2019   Prob (F-statistic):           7.67e-10
Time:                        16:27:31   Log-Likelihood:                -492.86
No. Observations:                  80   AIC:                             993.7
Df Residuals:                      76   BIC:                             1003.
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
=================================================================================
                    coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------
Intercept      5633.8000     26.300    214.211      0.000    5581.419    5686.181
variete[T.V2]   -49.7000     37.194     -1.336      0.185    -123.779      24.379
variete[T.V3]  -169.2000     37.194     -4.549      0.000    -243.279     -95.121
variete[T.V4]   118.4000     37.194      3.183      0.002      44.321     192.479
==============================================================================
Omnibus:                        2.869   Durbin-Watson:                   2.355
Prob(Omnibus):                  0.238   Jarque-Bera (JB):                2.611
Skew:                          -0.085   Prob(JB):                        0.271
Kurtosis:                       3.868   Cond. No.                         4.79
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

On y voit les paramètres estimés (dans la colonne "Estimate"), mais ici, ce ne sont pas les paramètres qui nous intéressent le plus.

Réalisez un test de Fisher

Ce qui nous intéresse réellement, c'est le test de Fisher. La p-valeur de ce test ($7.67∗10^{-7}$) est très petite et largement inférieure à 5 %. On rejette donc l'hypothèse H0 selon laquelle $\mu_{1}=\mu_{2}=\mu_{3}=\mu_{4}=0$.

La variété de blé a donc bien un effet sur le rendement, comme nous en avions l'intuition en regardant les boîtes à moustaches.

Pour obtenir le tableau de l'analyse de la variance, on utilise la commande anova_lm :

In [7]:
sm.stats.anova_lm(anova_variete, typ=2)
Out[7]:
sum_sq df F PR(>F)
variete 851844.55 3.0 20.525327 7.674413e-10
Residual 1051387.00 76.0 NaN NaN

Réalisons maintenant l'Analyse de la Variance sur le pesticide utilisé :

In [8]:
anova_phyto = smf.ols('rdt~phyto', data=ble).fit()
print(anova_phyto.summary())
sm.stats.anova_lm(anova_phyto, typ=2)
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    rdt   R-squared:                       0.001
Model:                            OLS   Adj. R-squared:                 -0.012
Method:                 Least Squares   F-statistic:                   0.04134
Date:                Wed, 25 Sep 2019   Prob (F-statistic):              0.839
Time:                        16:28:00   Log-Likelihood:                -516.58
No. Observations:                  80   AIC:                             1037.
Df Residuals:                      78   BIC:                             1042.
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
=================================================================================
                    coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------
Intercept      5612.2250     24.692    227.291      0.000    5563.067    5661.383
phyto[T.Sans]    -7.1000     34.920     -0.203      0.839     -76.619      62.419
==============================================================================
Omnibus:                        3.177   Durbin-Watson:                   1.446
Prob(Omnibus):                  0.204   Jarque-Bera (JB):                1.881
Skew:                           0.101   Prob(JB):                        0.390
Kurtosis:                       2.276   Cond. No.                         2.62
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Out[8]:
sum_sq df F PR(>F)
phyto 1008.20 1.0 0.041341 0.839411
Residual 1902223.35 78.0 NaN NaN

On trouve ici une p-valeur de 0.8, ce qui est très au-dessus de 5 %. On ne rejette donc pas l'hypothèse H0 selon laquelle $\mu_{1}=\mu_{2}=0$.

Il n'y a pas ici d'effet du pesticide sur le rendement de blé, tout au moins pas d'effet significatif.

ANOVA à 2 facteurs

Jusqu'ici, nous avons étudié les 2 facteurs (variété et pesticide) séparément. Cependant, la variété et le pesticide peuvent avoir des interactions qui influent sur le rendement.

En effet, même si l'on a montré que, globalement, le pesticide n'a pas d'effet sur le rendement, il se peut que, pour une variété précise, il y ait quand même un effet du pesticide sur le rendement. L'ANOVA à 2 facteurs va nous permettre d'étudier ces éventuelles interactions :

In [9]:
anova_variete_phyto = smf.ols('rdt~variete*phyto', data=ble).fit()
print(anova_variete_phyto.summary())
sm.stats.anova_lm(anova_variete_phyto)
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                    rdt   R-squared:                       0.451
Model:                            OLS   Adj. R-squared:                  0.398
Method:                 Least Squares   F-statistic:                     8.458
Date:                Wed, 25 Sep 2019   Prob (F-statistic):           1.62e-07
Time:                        16:29:45   Log-Likelihood:                -492.59
No. Observations:                  80   AIC:                             1001.
Df Residuals:                      72   BIC:                             1020.
Df Model:                           7                                         
Covariance Type:            nonrobust                                         
===============================================================================================
                                  coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------------------
Intercept                    5628.1000     38.086    147.772      0.000    5552.176    5704.024
variete[T.V2]                 -34.4000     53.862     -0.639      0.525    -141.772      72.972
variete[T.V3]                -167.6000     53.862     -3.112      0.003    -274.972     -60.228
variete[T.V4]                 138.5000     53.862      2.571      0.012      31.128     245.872
phyto[T.Sans]                  11.4000     53.862      0.212      0.833     -95.972     118.772
variete[T.V2]:phyto[T.Sans]   -30.6000     76.173     -0.402      0.689    -182.448     121.248
variete[T.V3]:phyto[T.Sans]    -3.2000     76.173     -0.042      0.967    -155.048     148.648
variete[T.V4]:phyto[T.Sans]   -40.2000     76.173     -0.528      0.599    -192.048     111.648
==============================================================================
Omnibus:                        2.691   Durbin-Watson:                   2.399
Prob(Omnibus):                  0.260   Jarque-Bera (JB):                2.415
Skew:                           0.008   Prob(JB):                        0.299
Kurtosis:                       3.851   Cond. No.                         12.5
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Out[9]:
df sum_sq mean_sq F PR(>F)
variete 3.0 851844.55 283948.183333 19.574935 2.205108e-09
phyto 1.0 1008.20 1008.200000 0.069504 7.928138e-01
variete:phyto 3.0 5968.20 1989.400000 0.137146 9.375236e-01
Residual 72.0 1044410.60 14505.702778 NaN NaN

On voit sur le tableau 3 lignes :

  • variete : qui teste l'effet de la variété ;
  • phyto : qui teste l'effet du pesticide ;
  • variete:phyto : qui teste les interactions pesticide-variété.

La p-valeur des interactions (93,75 %) est très largement supérieure à 5 % ; on en déduit donc que les interactions n'ont pas d'impact sur le rendement.

En pratique, on part toujours du tableau de l'ANOVA à 2 facteurs pour tester les interactions. Si elles sont significatives, on les conserve. Sinon, on teste séparément les 2 facteurs séparément par des ANOVA à 1 facteur.

In [ ]: