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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert