Hoe u een granger-causaliteitstest uitvoert in python
De Granger-causaliteitstest wordt gebruikt om te bepalen of de ene tijdreeks al dan niet nuttig is bij het voorspellen van een andere.
Deze test maakt gebruik van de volgende nul- en alternatieve hypothesen:
Nulhypothese (H 0 ): de tijdreeks x veroorzaakt niet de tijdreeks y bij Granger
Alternatieve hypothese ( HA ): Tijdreeks x Tijdreeks van Granger veroorzaakt y
De term „Granger-oorzaken“ betekent dat het kennen van de waarde van tijdreeks x met een bepaalde vertraging nuttig is voor het voorspellen van de waarde van tijdreeks y in een latere periode.
Deze test levert een F-teststatistiek op met een overeenkomstige p-waarde . Als de p-waarde onder een bepaald significantieniveau ligt (dwz α = 0,05), dan kunnen we de nulhypothese verwerpen en concluderen dat we voldoende bewijs hebben om te beweren dat de tijdreeks x Granger de tijdreeks y veroorzaakt.
We kunnen de functie grangercausalitytests() uit het statsmodels-pakket gebruiken om een Granger-Causality-test uit te voeren in Python:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])
Houd er rekening mee dat maxlag het aantal vertragingen specificeert dat moet worden gebruikt in de eerste tijdreeks.
Het volgende stap-voor-stap voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.
Stap 1: Gegevens laden
Voor dit voorbeeld gebruiken we een dataset met waarden voor het aantal gemaakte eieren en het aantal kippen in de Verenigde Staten van 1930 tot 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
Gerelateerd: CSV-bestanden lezen met Panda’s
Stap 2: Voer de causaliteitstest van Granger uit
Vervolgens zullen we de functie grangercausalitytests () gebruiken om een Granger causaliteitstest uit te voeren om te zien of het aantal gemaakte eieren voorspellend is voor het toekomstige aantal kippen. We zullen de test uitvoeren met behulp van drie offsets:
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
De F-teststatistiek blijkt 5,405 te zijn en de overeenkomstige p-waarde is 0,0030 .
Omdat de p-waarde kleiner is dan 0,05, kunnen we de nulhypothese van de test verwerpen en concluderen dat het kennen van het aantal eieren nuttig is bij het voorspellen van het toekomstige aantal kippen.
Stap 3: Voer de Granger-causaliteitstest in omgekeerde volgorde uit
Hoewel we de nulhypothese van de test hebben verworpen, is het in feite mogelijk dat er sprake is van omgekeerde causaliteit. Met andere woorden: het is mogelijk dat het aantal kippen een verandering in het aantal eieren veroorzaakt.
Om deze mogelijkheid uit te sluiten, moeten we de Granger-Causaliteitstest in omgekeerde volgorde uitvoeren, met kippen als voorspellende variabele en eieren alsresponsvariabele :
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
De F-teststatistiek blijkt 0,5916 te zijn en de overeenkomstige p-waarde is 0,6238 .
Omdat de p-waarde niet kleiner is dan 0,05, kunnen we de nulhypothese niet verwerpen. Met andere woorden: het aantal kippen voorspelt niet het toekomstige aantal eieren.
We kunnen dus concluderen dat het kennen van het aantal eieren nuttig is bij het voorspellen van het toekomstige aantal kippen.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken met tijdreeksen in Python kunt uitvoeren:
Hoe u een tijdreeksplot maakt in Seaborn
Hoe u een tijdreeksplot maakt in Matplotlib