Hoe voer je een breusch-godfrey-test uit in python?
Een van de belangrijkste aannames van lineaire regressie is dat er geen correlatie bestaat tussen de residuen, dat wil zeggen dat de residuen onafhankelijk zijn.
Om te testen op autocorrelatie van de eerste orde kunnen we een Durbin-Watson-test uitvoeren. Als we echter willen testen op autocorrelatie bij hogere ordes, moeten we een Breusch-Godfrey-test uitvoeren.
Deze test maakt gebruik van de volgende aannames :
H 0 (nulhypothese): Er is geen autocorrelatie van een orde kleiner dan of gelijk aan p .
H A (alternatieve hypothese): Er bestaat een autocorrelatie van een bepaalde orde kleiner dan of gelijk aan p .
De teststatistiek volgt een Chi-kwadraatverdeling met p vrijheidsgraden.
Als de p-waarde die overeenkomt met deze teststatistiek onder een bepaald significantieniveau ligt (bijvoorbeeld 0,05), dan kunnen we de nulhypothese verwerpen en concluderen dat er een autocorrelatie bestaat tussen de residuen van een bepaalde lagere orde of gelijk aan p .
Om een Breusch-Godfrey-test in Python uit te voeren, kunt u de functie acorr_breusch_godfrey() uit de statsmodels- bibliotheek gebruiken.
In het volgende stapsgewijze voorbeeld wordt uitgelegd hoe u de Breusch-Godfrey-test in Python uitvoert.
Stap 1: Creëer de gegevens
Laten we eerst een gegevensset maken met twee voorspellende variabelen (x1 en x2) en een responsvariabele (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
Stap 2: Pas een regressiemodel toe
Vervolgens kunnen we een meervoudig lineair regressiemodel opstellen met x1 en x2 als voorspellende variabelen en y alsresponsvariabele .
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 ()
Stap 3: Voer de Breusch-Godfrey-test uit
Vervolgens zullen we de Breusch-Godfrey-test uitvoeren om te testen op autocorrelatie tussen de residuen bij volgorde p . Voor dit voorbeeld kiezen we 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)
De eerste waarde van de uitvoer vertegenwoordigt de teststatistiek en de tweede waarde vertegenwoordigt de overeenkomstige p-waarde.
Uit het resultaat kunnen we het volgende zien:
- Teststatistiek X 2 = 8,7031
- P-waarde = 0,0335
Omdat deze p-waarde kleiner is dan 0,05, kunnen we de nulhypothese verwerpen en concluderen dat er een autocorrelatie bestaat tussen de residuen van orde kleiner dan of gelijk aan 3.
Hoe om te gaan met autocorrelatie
Als je de nulhypothese verwerpt en concludeert dat er autocorrelatie aanwezig is in de residuen, dan heb je verschillende opties om dit probleem te corrigeren als je het ernstig genoeg acht:
- Voor positieve seriële correlatie kunt u overwegen vertragingen van de afhankelijke en/of onafhankelijke variabele aan het model toe te voegen.
- Zorg er bij negatieve seriële correlatie voor dat geen van uw variabelen te veel vertraging heeft.
- Voor seizoenscorrelatie kunt u overwegen seizoensdummies aan het model toe te voegen.
Aanvullende bronnen
Een complete gids voor lineaire regressie in Python
Hoe u een Durbin-Watson-test uitvoert in Python
Hoe een Ljung-Box-test uit te voeren in Python