Comment effectuer un test Durbin-Watson en Python
L’une des hypothèses de la régression linéaire est qu’il n’y a pas de corrélation entre les résidus. En d’autres termes, les résidus sont supposés indépendants.
Une façon de déterminer si cette hypothèse est remplie consiste à effectuer un test de Durbin-Watson , qui est utilisé pour détecter la présence d’autocorrélation dans les résidus d’une régression . Ce test utilise les hypothèses suivantes :
H 0 (hypothèse nulle) : Il n’y a pas de corrélation entre les résidus.
H A (hypothèse alternative) : Les résidus sont autocorrélés.
La statistique du test est approximativement égale à 2*(1-r) où r est l’autocorrélation de l’échantillon des résidus. Ainsi, la statistique du test sera toujours comprise entre 0 et 4 avec l’interprétation suivante :
- Une statistique de test de 2 indique aucune corrélation en série.
- Plus les statistiques du test sont proches de 0 , plus il y a de preuves d’une corrélation sérielle positive.
- Plus les statistiques du test sont proches de 4 , plus il y a de preuves d’une corrélation sérielle négative.
En règle générale, les valeurs statistiques de test comprises entre 1,5 et 2,5 sont considérées comme normales. Cependant, des valeurs en dehors de cette plage pourraient indiquer que l’autocorrélation pose un problème.
Ce tutoriel explique comment effectuer un test Durbin-Watson en Python.
Exemple : test Durbin-Watson en Python
Supposons que nous disposions de l’ensemble de données suivant qui décrit les attributs de 10 joueurs de basket-ball :
import numpy as np import pandas as pd #create dataset df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19], 'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view dataset df rating points assists rebounds 0 90 25 5 11 1 85 20 7 8 2 82 14 7 10 3 88 16 8 6 4 94 27 5 6 5 90 20 7 9 6 76 12 6 6 7 75 15 9 10 8 87 14 9 10 9 86 19 5 7
Supposons que nous ajustions un modèle de régression linéaire multiple en utilisant la notation comme variable de réponse et les trois autres variables comme variables prédictives :
from statsmodels.formula.api import ols #fit multiple linear regression model model = ols('rating ~ points + assists + rebounds', data=df).fit() #view model summary print(model.summary())
Nous pouvons effectuer un Durbin Watson en utilisant la fonction durbin_watson() de la bibliothèque statsmodels pour déterminer si les résidus du modèle de régression sont autocorrélés :
from statsmodels.stats.stattools import durbin_watson #perform Durbin-Watson test durbin_watson(model.resid) 2.392
La statistique du test est de 2,392 . Puisque cette valeur est comprise entre 1,5 et 2,5, nous considérons que l’autocorrélation ne pose pas de problème dans ce modèle de régression.
Comment gérer l’autocorrélation
Si vous rejetez l’hypothèse nulle et concluez qu’une autocorrélation est présente dans les résidus, vous disposez alors de plusieurs options pour corriger ce problème si vous le jugez suffisamment grave :
1. Pour une corrélation en série positive, envisagez d’ajouter des décalages de la variable dépendante et/ou indépendante au modèle.
2. Pour une corrélation série négative, assurez-vous qu’aucune de vos variables n’est surdifférée .
3. Pour la corrélation saisonnière, envisagez d’ajouter des variables fictives saisonnières au modèle.