Jak wykonać test goldfelda-quandta w pythonie
Test Goldfelda-Quandta służy do określenia, czy w modelu regresji występuje heteroskedastyczność .
Heteroscedastyczność odnosi się do nierównego rozproszenia reszt na różnych poziomachzmiennej odpowiedzi w modelu regresji.
Jeśli występuje heteroskedastyczność, narusza to jedno z kluczowych założeń regresji liniowej , że reszty są równomiernie rozproszone na każdym poziomie zmiennej odpowiedzi.
W tym samouczku przedstawiono krok po kroku przykład wykonania testu Goldfelda-Quandta w języku Python.
Krok 1: Utwórz zbiór danych
Na potrzeby tego przykładu utwórzmy następującą pandę DataFrame zawierającą informacje o przepracowanych godzinach, zdanych egzaminach przygotowawczych i wynikach egzaminów końcowych uzyskanych przez 13 uczniów w klasie:
import pandas as pd #createDataFrame 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 exam 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
Krok 2: Dopasuj model regresji liniowej
Następnie dopasujemy model regresji liniowej, wykorzystując godziny i egzaminy jako zmienne predykcyjne oraz wynik jako zmienną odpowiedzi:
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
==================================================== ============================
Dept. Variable: R-squared score: 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
Model: 2
Covariance Type: non-robust
==================================================== ============================
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
==================================================== ============================
Krok 3: Wykonaj test Goldfelda-Quandta
Następnie użyjemy funkcji statsmodels het_goldfeldquandt() do wykonania testu Goldfelda-Quandta.
Uwaga : Test Goldfelda-Quandta polega na usunięciu pewnej liczby obserwacji znajdujących się w środku zbioru danych, a następnie sprawdzeniu, czy rozkład reszt różni się od dwóch wynikowych zbiorów danych, które wiążą się po obu stronach obserwacji centralnych.
Zazwyczaj decydujemy się na usunięcie około 20% wszystkich obserwacji. W tym przypadku możemy użyć argumentu drop , aby określić, że chcemy usunąć 20% obserwacji:
#perform Goldfeld-Quandt test sm. stats . diagnosis . het_goldfeldquandt (y, x, drop= 0.2 ) (1.7574505407790355, 0.38270288684680076, 'increasing')
Oto jak zinterpretować wynik:
- Statystyka testowa wynosi 1,757 .
- Odpowiednia wartość p wynosi 0,383 .
Test Goldfelda-Quandta wykorzystuje następujące hipotezy zerowe i alternatywne:
- Null (H 0 ) : Homoskedastyczność jest obecna.
- Alternatywa ( HA ): Występuje heteroskedastyczność.
Ponieważ wartość p jest nie mniejsza niż 0,05, nie możemy odrzucić hipotezy zerowej.
Nie mamy wystarczających dowodów, aby argumentować, że heteroskedastyczność jest problemem w modelu regresji.
Co zrobic nastepnie
Jeśli nie odrzucisz hipotezy zerowej testu Goldfelda-Quandta, wówczas heteroskedastyczność nie występuje i możesz przystąpić do interpretacji wyniku pierwotnej regresji.
Jeśli jednak odrzucisz hipotezę zerową, oznacza to, że w danych występuje heteroskedastyczność. W takim przypadku błędy standardowe wyświetlane w tabeli wyników regresji mogą być niewiarygodne.
Istnieje kilka typowych sposobów rozwiązania tego problemu, w tym:
1. Przekształć zmienną odpowiedzi.
Możesz spróbować przeprowadzić transformację zmiennej odpowiedzi, na przykład biorąc log, pierwiastek kwadratowy lub pierwiastek sześcienny zmiennej odpowiedzi. Ogólnie rzecz biorąc, może to spowodować zanik heteroskedastyczności.
2. Zastosuj regresję ważoną.
Regresja ważona przypisuje wagę każdemu punktowi danych na podstawie wariancji jego dopasowanej wartości. Zasadniczo nadaje to niskie wagi punktom danych o większych wariancjach, zmniejszając ich kwadraty resztowe.
Przy zastosowaniu odpowiednich wag regresja ważona może wyeliminować problem heteroskedastyczności.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje w Pythonie:
Jak wykonać regresję OLS w Pythonie
Jak utworzyć wykres resztkowy w Pythonie
Jak wykonać test White’a w Pythonie
Jak wykonać test Breuscha-Pagana w Pythonie