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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *