Comment effectuer un test de Breusch-Godfrey en Python



L’une des hypothèses clés de la régression linéaire est qu’il n’y a pas de corrélation entre les résidus, c’est-à-dire que les résidus sont indépendants.

Pour tester l’autocorrélation de premier ordre, nous pouvons effectuer un test de Durbin-Watson . Cependant, si nous souhaitons tester l’autocorrélation à des ordres plus élevés, nous devons effectuer un test de Breusch-Godfrey .

Ce test utilise les hypothèses suivantes :

H 0 (hypothèse nulle) : Il n’y a pas d’autocorrélation d’un ordre inférieur ou égal à p .

H A (hypothèse alternative) : Il existe une autocorrélation d’un certain ordre inférieur ou égal à p .

La statistique du test suit une distribution du Chi carré avec p degrés de liberté.

Si la valeur p qui correspond à cette statistique de test est inférieure à un certain niveau de signification (par exemple 0,05), nous pouvons alors rejeter l’hypothèse nulle et conclure qu’une autocorrélation existe entre les résidus à un certain ordre inférieur ou égal à p .

Pour effectuer un test de Breusch-Godfrey en Python, on peut utiliser la fonction acorr_breusch_godfrey() de la bibliothèque statsmodels .

L’exemple étape par étape suivant explique comment effectuer le test de Breusch-Godfrey en Python.

Étape 1 : Créer les données

Tout d’abord, créons un ensemble de données contenant deux variables prédictives (x1 et x2) et une variable de réponse (y).

import pandas as pd 

#create dataset
df = pd.DataFrame({'x1': [3, 4, 4, 5, 8, 9, 11, 13, 14, 16, 17, 20],
                   'x2': [7, 7, 8, 8, 12, 4, 5, 15, 9, 17, 19, 19],
                    'y': [24, 25, 25, 27, 29, 31, 34, 34, 39, 30, 40, 49]})

#view first five rows of dataset
df.head()

	x1	x2	y
0	3	7	24
1	4	7	25
2	4	8	25
3	5	8	27
4	8	12	29

Étape 2 : Ajuster un modèle de régression

Ensuite, nous pouvons ajuster un modèle de régression linéaire multiple en utilisant x1 et x2 comme variables prédictives et y comme variable de réponse .

import statsmodels.api as sm

#define response variable
y = df['y']

#define predictor variables
x = df[['x1', 'x2']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

Étape 3 : Effectuer le test de Breusch-Godfrey

Ensuite, nous effectuerons le test de Breusch-Godfrey pour tester l’autocorrélation entre les résidus à l’ordre p . Pour cet exemple, nous choisirons p = 3.

import statsmodels.stats.diagnostic as dg

#perform Breusch-Godfrey test at order p = 3
print(dg.acorr_breusch_godfrey(model, nlags=3))

(8.70314827, 0.0335094873, 5.27967224, 0.0403980576)

La première valeur de la sortie représente la statistique de test et la deuxième valeur représente la valeur p correspondante.

À partir du résultat, nous pouvons voir ce qui suit :

  • Statistique de test X 2 = 8,7031
  • Valeur P = 0,0335

Puisque cette valeur p est inférieure à 0,05, nous pouvons rejeter l’hypothèse nulle et conclure qu’il existe une autocorrélation entre les résidus d’un ordre inférieur ou égal à 3.

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 :

  • 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.
  • Pour une corrélation série négative, assurez-vous qu’aucune de vos variables n’est surdifférée .
  • Pour la corrélation saisonnière, envisagez d’ajouter des variables fictives saisonnières au modèle.

Ressources additionnelles

Un guide complet de la régression linéaire en Python
Comment effectuer un test Durbin-Watson en Python
Comment effectuer un test Ljung-Box en Python

Ajouter un commentaire

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