Jak wykonać test przyczynowości grangera w pythonie
Test przyczynowości Grangera służy do określenia, czy jedna seria czasowa jest przydatna do przewidywania innej.
W teście tym wykorzystuje się następujące hipotezy zerowe i alternatywne:
Hipoteza zerowa (H 0 ): szereg czasowy x nie powoduje, że szereg czasowy y przechodzi do Granger
Hipoteza alternatywna ( HA ): Szereg czasowy x Szereg czasowy przyczyn Grangera y
Termin „przyczyny Grangera” oznacza, że znajomość wartości szeregu czasowego x z pewnym opóźnieniem jest przydatna do przewidywania wartości szeregu czasowego y w późniejszym okresie.
Ten test generuje statystykę testu F z odpowiednią wartością p . Jeśli wartość p jest poniżej pewnego poziomu istotności (tj. α = 0,05), wówczas możemy odrzucić hipotezę zerową i stwierdzić, że mamy wystarczające dowody, aby stwierdzić, że szereg czasowy x Granger powoduje szereg czasowy y.
Możemy użyć funkcji grangercausalitytests() z pakietu statsmodels, aby przeprowadzić test Granger-Causality w Pythonie:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])
Należy pamiętać, że maxlag określa liczbę opóźnień do wykorzystania w pierwszej serii czasowej.
Poniższy przykład krok po kroku pokazuje, jak w praktyce wykorzystać tę funkcję.
Krok 1: Załaduj dane
W tym przykładzie użyjemy zbioru danych zawierającego wartości dotyczące liczby wyprodukowanych jaj oraz liczby kurcząt w Stanach Zjednoczonych w latach 1930–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
Powiązane: Jak czytać pliki CSV za pomocą Pand
Krok 2: Wykonaj test przyczynowości Grangera
Następnie użyjemy funkcji grangercausalitytests () , aby przeprowadzić test przyczynowości Grangera, aby sprawdzić, czy liczba wyprodukowanych jaj pozwala przewidzieć przyszłą liczbę kur. Test przeprowadzimy przy użyciu trzech przesunięć:
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
Statystyka testu F wynosi 5,405 , a odpowiadająca jej wartość p wynosi 0,0030 .
Ponieważ wartość p jest mniejsza niż 0,05, możemy odrzucić hipotezę zerową testu i stwierdzić, że znajomość liczby jaj jest przydatna w przewidywaniu przyszłej liczby kur.
Krok 3: Wykonaj test przyczynowości Grangera w odwrotnej kolejności
Chociaż odrzuciliśmy hipotezę zerową testu, w rzeczywistości jest możliwe, że może zaistnieć przypadek odwrotnej przyczynowości. Innymi słowy, możliwe jest, że liczba kur powoduje zmianę liczby jaj.
Aby wykluczyć tę możliwość, musimy przeprowadzić odwrotny test Grangera-Przyczynowości, używając kurczaków jako zmiennej predykcyjnej i jaj jakozmiennej odpowiedzi :
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
Statystyka testu F wynosi 0,5916 , a odpowiadająca jej wartość p wynosi 0,6238 .
Ponieważ wartość p jest nie mniejsza niż 0,05, nie możemy odrzucić hipotezy zerowej. Innymi słowy, liczba kur nie przewiduje przyszłej liczby jaj.
Możemy zatem stwierdzić, że znajomość liczby jaj jest przydatna w przewidywaniu przyszłej liczby kur.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania z szeregami czasowymi w Pythonie:
Jak utworzyć wykres szeregów czasowych w Seaborn
Jak utworzyć wykres szeregów czasowych w Matplotlib