Jak wykonać test breuscha-godfreya w pythonie
Jednym z kluczowych założeń regresji liniowej jest to, że pomiędzy resztami nie ma korelacji, co oznacza, że reszty są niezależne.
Aby sprawdzić autokorelację pierwszego rzędu, możemy wykonać test Durbina-Watsona . Jeśli jednak chcemy przetestować autokorelację przy wyższych rzędach, musimy wykonać test Breuscha-Godfreya .
W tym teście przyjęto następujące założenia :
H 0 (hipoteza zerowa): Nie ma autokorelacji rzędu mniejszego lub równego p .
H A (hipoteza alternatywna): Istnieje autokorelacja pewnego rzędu mniejszego lub równego p .
Statystyka testowa ma rozkład chi-kwadrat z p stopniami swobody.
Jeżeli wartość p odpowiadająca tej statystyce testowej jest poniżej pewnego poziomu istotności (np. 0,05), wówczas możemy odrzucić hipotezę zerową i stwierdzić, że istnieje autokorelacja pomiędzy resztami na pewnym niższym poziomie lub równymi p .
Aby wykonać test Breuscha-Godfreya w Pythonie, możesz użyć funkcji acorr_breusch_godfrey() z biblioteki statsmodels .
Poniższy przykład krok po kroku wyjaśnia, jak wykonać test Breuscha-Godfreya w Pythonie.
Krok 1: Utwórz dane
Najpierw utwórzmy zbiór danych zawierający dwie zmienne predykcyjne (x1 i x2) oraz zmienną odpowiedzi (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
Krok 2: Dopasuj model regresji
Następnie możemy dopasować model regresji liniowej , używając x1 i x2 jako zmiennych predykcyjnych oraz y jakozmiennej odpowiedzi .
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 ()
Krok 3: Wykonaj test Breuscha-Godfreya
Następnie przeprowadzimy test Breuscha-Godfreya, aby sprawdzić autokorelację między resztami rzędu p . W tym przykładzie wybierzemy p = 3.
import statsmodels. stats . diagnosis 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)
Pierwsza wartość wyniku reprezentuje statystykę testową, a druga wartość reprezentuje odpowiednią wartość p.
Z wyniku możemy zobaczyć, co następuje:
- Statystyka testowa X 2 = 8,7031
- Wartość P = 0,0335
Ponieważ ta wartość p jest mniejsza niż 0,05, możemy odrzucić hipotezę zerową i stwierdzić, że istnieje autokorelacja między resztami rzędu mniejszego lub równego 3.
Jak sobie radzić z autokorelacją
Jeśli odrzucisz hipotezę zerową i dojdziesz do wniosku, że w resztach występuje autokorelacja, masz kilka możliwości rozwiązania tego problemu, jeśli uznasz go za wystarczająco poważny:
- Aby uzyskać dodatnią korelację szeregową, należy rozważyć dodanie do modelu opóźnień zmiennej zależnej i/lub niezależnej.
- W przypadku ujemnej korelacji szeregowej upewnij się, że żadna ze zmiennych nie jest nadmiernie opóźniona .
- Aby uzyskać korelację sezonową, rozważ dodanie do modelu manekinów sezonowych.
Dodatkowe zasoby
Kompletny przewodnik po regresji liniowej w Pythonie
Jak wykonać test Durbina-Watsona w Pythonie
Jak wykonać test Ljung-Box w Pythonie