Python'da granger nedensellik testi nasıl yapılır?
Granger nedensellik testi, bir zaman serisinin diğerini tahmin etmede yararlı olup olmadığını belirlemek için kullanılır.
Bu test aşağıdaki boş ve alternatif hipotezleri kullanır:
Boş hipotez (H 0 ): x zaman serisi, y zaman serisinin Granger’a gitmesine neden olmaz
Alternatif hipotez ( HA ): Zaman serisi x Granger’ın zaman serisi y’ye neden olur
“Granger nedenleri” terimi, x zaman serisinin değerini belirli bir gecikmeyle bilmenin, y zaman serisinin değerini daha sonraki bir dönemde tahmin etmek için yararlı olduğu anlamına gelir.
Bu test, karşılık gelen p değerine sahip bir F testi istatistiği üretir. Eğer p değeri belirli bir anlamlılık seviyesinin altındaysa (yani α = 0,05), o zaman sıfır hipotezini reddedebilir ve x Granger zaman serisinin y zaman serisine neden olduğunu iddia etmek için yeterli kanıta sahip olduğumuz sonucuna varabiliriz.
Python’da Granger-Nedensellik testi gerçekleştirmek için statsmodels paketindeki grangercausalitytests() fonksiyonunu kullanabiliriz:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])
maxlag’in ilk zaman serisinde kullanılacak gecikme sayısını belirttiğini unutmayın.
Aşağıdaki adım adım örnek, bu işlevin pratikte nasıl kullanılacağını gösterir.
1. Adım: Verileri yükleyin
Bu örnek için, Amerika Birleşik Devletleri’nde 1930’dan 1983’e kadar yapılan yumurta sayısı ve tavuk sayısına ilişkin değerleri içeren bir veri kümesi kullanacağız:
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
İlgili: Pandalarla CSV Dosyaları Nasıl Okunur?
Adım 2: Granger nedensellik testini gerçekleştirin
Daha sonra, yapılan yumurta sayısının gelecekteki tavuk sayısını tahmin edip etmediğini görmek amacıyla Granger nedensellik testi yapmak için granger nedensellik testleri () fonksiyonunu kullanacağız. Testi üç ofset kullanarak gerçekleştireceğiz:
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
F testi istatistiği 5,405 ve buna karşılık gelen p değeri 0,0030 olarak ortaya çıkıyor.
P değeri 0,05’ten küçük olduğundan testin sıfır hipotezini reddedebilir ve yumurta sayısını bilmenin gelecekteki tavuk sayısını tahmin etmede faydalı olduğu sonucuna varabiliriz.
Adım 3: Granger Nedensellik Testini Tersine Yapın
Testin sıfır hipotezini reddetmiş olsak da aslında ters nedensellik durumunun ortaya çıkması mümkündür. Yani tavuk sayısının yumurta sayısında değişikliğe neden olması mümkündür.
Bu olasılığı dışlamak için, öngörücü değişken olarak tavukları ve yanıt değişkeni olarak yumurtaları kullanarak Granger-Nedensellik testini tersten uygulamamız gerekir:
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
F testi istatistiği 0,5916 ve buna karşılık gelen p değeri 0,6238 olarak ortaya çıkıyor.
P değeri 0,05’ten küçük olmadığından sıfır hipotezini reddedemeyiz. Başka bir deyişle, tavuk sayısı gelecekteki yumurta sayısını öngörmemektedir.
Dolayısıyla yumurta sayısını bilmenin gelecekteki tavuk sayısını tahmin etmede faydalı olduğu sonucuna varabiliriz.
Ek kaynaklar
Aşağıdaki eğitimlerde Python’da zaman serileriyle diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:
Seaborn’da Zaman Serisi Grafiği Nasıl Oluşturulur
Matplotlib’de zaman serisi grafiği nasıl oluşturulur