Comment effectuer le test Goldfeld-Quandt en Python
Le test de Goldfeld-Quandt est utilisé pour déterminer si l’hétéroscédasticité est présente dans un modèle de régression.
L’hétéroscédasticité fait référence à la dispersion inégale des résidus à différents niveaux d’une variable de réponse dans un modèle de régression.
Si l’hétéroscédasticité est présente, cela viole l’une des hypothèses clés de la régression linéaire selon laquelle les résidus sont également dispersés à chaque niveau de la variable de réponse.
Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer le test Goldfeld-Quandt en Python.
Étape 1 : Créer l’ensemble de données
Pour cet exemple, créons le DataFrame pandas suivant qui contient des informations sur les heures étudiées, les examens préparatoires passés et les résultats de l’examen final obtenus par 13 étudiants dans une classe :
import pandas as pd #create DataFrame df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6], 'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2], 'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96]}) #view DataFrame print(df) hours exams score 0 1 1 76 1 2 3 78 2 2 3 85 3 4 5 88 4 2 2 72 5 1 2 69 6 5 1 94 7 4 1 94 8 2 0 88 9 4 3 92 10 4 4 90 11 3 3 75 12 6 2 96
Étape 2 : Ajuster le modèle de régression linéaire
Ensuite, nous ajusterons un modèle de régression linéaire multiple en utilisant les heures et les examens comme variables prédictives et le score comme variable de réponse :
import statsmodels.api as sm
#define predictor and response variables
y = df['score']
x = df[['hours', 'exams']]
#add constant to predictor variables
x = sm.add_constant(x)
#fit linear regression model
model = sm.OLS(y, x).fit()
#view model summary
print(model.summary())
OLS Regression Results
==============================================================================
Dep. Variable: score R-squared: 0.718
Model: OLS Adj. R-squared: 0.661
Method: Least Squares F-statistic: 12.70
Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.00180
Time: 09:22:56 Log-Likelihood: -38.618
No. Observations: 13 AIC: 83.24
Df Residuals: 10 BIC: 84.93
Df Model: 2
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 71.4048 4.001 17.847 0.000 62.490 80.319
hours 5.1275 1.018 5.038 0.001 2.860 7.395
exams -1.2121 1.147 -1.057 0.315 -3.768 1.344
==============================================================================
Omnibus: 1.103 Durbin-Watson: 1.248
Prob(Omnibus): 0.576 Jarque-Bera (JB): 0.803
Skew: -0.289 Prob(JB): 0.669
Kurtosis: 1.928 Cond. No. 11.7
==============================================================================
Étape 3 : Effectuer le test de Goldfeld-Quandt
Ensuite, nous utiliserons la fonction het_goldfeldquandt() de statsmodels pour effectuer le test Goldfeld-Quandt.
Remarque : Le test de Goldfeld-Quandt fonctionne en supprimant un certain nombre d’observations situées au centre de l’ensemble de données, puis en testant pour voir si la répartition des résidus est différente des deux ensembles de données résultants qui se trouvent de chaque côté des observations centrales.
En règle générale, nous choisissons de supprimer environ 20 % du total des observations. Dans ce cas, nous pouvons utiliser l’argument drop pour spécifier que nous souhaitons supprimer 20 % des observations :
#perform Goldfeld-Quandt test sm.stats.diagnostic.het_goldfeldquandt(y, x, drop=0.2) (1.7574505407790355, 0.38270288684680076, 'increasing')
Voici comment interpréter le résultat :
- La statistique du test est de 1,757 .
- La valeur p correspondante est de 0,383 .
Le test de Goldfeld-Quandt utilise les hypothèses nulles et alternatives suivantes :
- Null (H 0 ) : L’homoscédasticité est présente.
- Alternative (H A ) : L’hétéroscédasticité est présente.
Puisque la valeur p n’est pas inférieure à 0,05, nous ne parvenons pas à rejeter l’hypothèse nulle.
Nous ne disposons pas de preuves suffisantes pour affirmer que l’hétéroscédasticité constitue un problème dans le modèle de régression.
Que faire ensuite
Si vous ne parvenez pas à rejeter l’hypothèse nulle du test de Goldfeld-Quandt, alors l’hétéroscédasticité n’est pas présente et vous pouvez procéder à l’interprétation du résultat de la régression originale.
Cependant, si vous rejetez l’hypothèse nulle, cela signifie qu’une hétéroscédasticité est présente dans les données. Dans ce cas, les erreurs types affichées dans le tableau de sortie de la régression peuvent ne pas être fiables.
Il existe plusieurs manières courantes de résoudre ce problème, notamment :
1. Transformez la variable de réponse.
Vous pouvez essayer d’effectuer une transformation sur la variable de réponse, par exemple en prenant le journal, la racine carrée ou la racine cubique de la variable de réponse. Généralement, cela peut entraîner la disparition de l’hétéroscédasticité.
2. Utilisez la régression pondérée.
La régression pondérée attribue un poids à chaque point de données en fonction de la variance de sa valeur ajustée. Essentiellement, cela donne de faibles poids aux points de données qui ont des variances plus élevées, ce qui réduit leurs carrés résiduels.
Lorsque les pondérations appropriées sont utilisées, la régression pondérée peut éliminer le problème de l’hétéroscédasticité.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes en Python :
Comment effectuer une régression OLS en Python
Comment créer un tracé résiduel en Python
Comment effectuer le test de White en Python
Comment effectuer un test Breusch-Pagan en Python