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