Come eseguire un test di causalità di granger in python


Il test di causalità di Granger viene utilizzato per determinare se una serie temporale è utile o meno per prevederne un’altra.

Questo test utilizza le seguenti ipotesi nulle e alternative:

Ipotesi nulla (H 0 ): la serie temporale x non causa la serie temporale y a Granger

Ipotesi alternativa ( HA ): Serie temporali x Serie temporali delle cause Granger y

Il termine “cause di Granger” significa che conoscere il valore della serie temporale x con un certo ritardo è utile per prevedere il valore della serie temporale y in un periodo successivo.

Questo test produce una statistica del test F con un valore p corrispondente. Se il valore p è inferiore a un certo livello di significatività (cioè α = 0,05), allora possiamo rifiutare l’ipotesi nulla e concludere che abbiamo prove sufficienti per affermare che la serie temporale x Granger causa la serie temporale y.

Possiamo usare la funzione grangercausalitytests() dal pacchetto statsmodels per eseguire un test Granger-Causality in Python:

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])

Tieni presente che maxlag specifica il numero di ritardi da utilizzare nella prima serie temporale.

Il seguente esempio passo passo mostra come utilizzare questa funzione nella pratica.

Passaggio 1: caricare i dati

Per questo esempio, utilizzeremo un set di dati contenente valori per il numero di uova prodotte e il numero di polli negli Stati Uniti dal 1930 al 1983:

 import pandas as pd

#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statorials/Miscellaneous/main/chicken_egg.txt"

#read in dataset as pandas DataFrame
df = pd. read_csv (url, sep=" ")

#view first five rows of DataFrame
df. head ()

	year chicken egg
0 1930 468491 3581
1 1931 449743 3532
2 1932 436815 3327
3 1933 444523 3255
4 1934 433937 3156

Correlato: Come leggere file CSV con Panda

Passaggio 2: eseguire il test di causalità di Granger

Successivamente, utilizzeremo la funzione grangercausalitytests () per eseguire un test di causalità di Granger per vedere se il numero di uova prodotte è predittivo del futuro numero di galline. Eseguiremo il test utilizzando tre offset:

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' chicken ', ' egg ']], maxlag=[ 3 ])

Granger Causality
number of lags (no zero) 3
ssr based F test: F=5.4050, p=0.0030, df_denom=44, df_num=3
ssr based chi2 test: chi2=18.7946, p=0.0003, df=3
likelihood ratio test: chi2=16.0003, p=0.0011, df=3
parameter F test: F=5.4050, p=0.0030, df_denom=44, df_num=3

La statistica del test F risulta essere 5,405 e il corrispondente valore p è 0,0030 .

Poiché il valore p è inferiore a 0,05, possiamo rifiutare l’ipotesi nulla del test e concludere che conoscere il numero di uova è utile per prevedere il futuro numero di galline.

Passaggio 3: eseguire il test di causalità di Granger al contrario

Sebbene abbiamo rifiutato l’ipotesi nulla del test, è infatti possibile che si verifichi un caso di causalità inversa. In altre parole, è possibile che il numero di galline provochi una variazione nel numero di uova.

Per escludere questa possibilità, dobbiamo eseguire il test di Granger-Causalità al contrario, utilizzando i polli come variabile predittiva e le uova come variabile di risposta :

 from statsmodels. tsa . stattools import grangercausalitytests

#perform Granger-Causality test
grangercausalitytests(df[[' egg ', ' chicken ']], maxlag=[ 3 ])

Granger Causality
number of lags (no zero) 3
ssr based F test: F=0.5916, p=0.6238, df_denom=44, df_num=3
ssr based chi2 test: chi2=2.0572, p=0.5606, df=3
likelihood ratio test: chi2=2.0168, p=0.5689, df=3
parameter F test: F=0.5916, p=0.6238, df_denom=44, df_num=3

La statistica del test F risulta essere 0,5916 e il corrispondente valore p è 0,6238 .

Poiché il valore p non è inferiore a 0,05, non possiamo rifiutare l’ipotesi nulla. In altre parole, il numero di galline non predice il futuro numero di uova.

Possiamo quindi concludere che conoscere il numero di uova è utile per prevedere il futuro numero di galline.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni con le serie temporali in Python:

Come creare un grafico di serie temporali in Seaborn
Come creare un grafico di serie temporali in Matplotlib

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *