Come eseguire un test di breusch-godfrey in python
Uno dei presupposti chiave della regressione lineare è che non vi sia alcuna correlazione tra i residui, ovvero che i residui siano indipendenti.
Per verificare l’autocorrelazione del primo ordine, possiamo eseguire un test di Durbin-Watson . Tuttavia, se vogliamo testare l’autocorrelazione a ordini più alti, dobbiamo eseguire un test di Breusch-Godfrey .
Questo test utilizza le seguenti ipotesi :
H 0 (ipotesi nulla): non esiste autocorrelazione di ordine inferiore o uguale a p .
H A (ipotesi alternativa): esiste un’autocorrelazione di un certo ordine inferiore o uguale a p .
La statistica del test segue una distribuzione Chi-quadrato con p gradi di libertà.
Se il valore p che corrisponde a questa statistica test è inferiore a un certo livello di significatività (ad esempio 0,05), allora possiamo rifiutare l’ipotesi nulla e concludere che esiste un’autocorrelazione tra i residui ad un certo ordine inferiore o pari a p .
Per eseguire un test Breusch-Godfrey in Python, puoi utilizzare la funzione acorr_breusch_godfrey() dalla libreria statsmodels .
Il seguente esempio passo passo spiega come eseguire il test Breusch-Godfrey in Python.
Passaggio 1: creare i dati
Innanzitutto, creiamo un set di dati contenente due variabili predittive (x1 e x2) e una variabile di risposta (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
Passaggio 2: adattare un modello di regressione
Quindi possiamo adattare un modello di regressione lineare multipla utilizzando x1 e x2 come variabili predittive e y come variabile di risposta .
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 ()
Passaggio 3: eseguire il test di Breusch-Godfrey
Successivamente, eseguiremo il test di Breusch-Godfrey per verificare l’autocorrelazione tra i residui all’ordine p . Per questo esempio, sceglieremo 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)
Il primo valore dell’output rappresenta la statistica del test e il secondo valore rappresenta il corrispondente valore p.
Dal risultato possiamo vedere quanto segue:
- Statistica del test X 2 = 8,7031
- Valore P = 0,0335
Poiché questo valore p è inferiore a 0,05, possiamo rifiutare l’ipotesi nulla e concludere che esiste un’autocorrelazione tra i residui di ordine inferiore o uguale a 3.
Come gestire l’autocorrelazione
Se rifiuti l’ipotesi nulla e concludi che nei residui è presente l’autocorrelazione, hai diverse opzioni per correggere questo problema se lo consideri abbastanza serio:
- Per una correlazione seriale positiva, prendere in considerazione l’aggiunta di ritardi della variabile dipendente e/o indipendente al modello.
- Per la correlazione seriale negativa, assicurati che nessuna delle variabili abbia un ritardo eccessivo .
- Per la correlazione stagionale, prendere in considerazione l’aggiunta di dummy stagionali al modello.
Risorse addizionali
Una guida completa alla regressione lineare in Python
Come eseguire un test di Durbin-Watson in Python
Come eseguire un test Ljung-Box in Python