python时间序列因果检验_用python做时间序列预测八:Granger causality test(格兰杰因果检验)...
如果想知道一個序列是否對預測另一個序列有用,可以用Granger causality test(格蘭杰因果檢驗)。
Granger causality test的思想
如果使用時間序列X和Y的歷史值來預測Y的當前值,比僅通過Y的歷史值來預測Y的當前值得到的誤差更小,并且通過了F檢驗,卡方檢驗,則X對Y的預測是有一定幫助的。
了解了Granger causality test的思想之后會發現,其實Granger causality test最多能推斷出X對Y的預測是有一定幫助的,至于是否能說X和Y是因果關系,則不一定。
進一步了解可以去這里:https://www.zhihu.com/question/34787362
python代碼
python的statsmodel包的grangercausalitytests函數中提供了很好的實現。
該方法接收一個包含2列的2維的數組作為主要參數:
第一列是當前要預測未來值的序列A,第二列是另一個序列B,該方法就是看B對A的預測是否有幫助。該方法的零假設是:B對A沒有幫助。如果所有檢驗下的P-Values都小于顯著水平0.05,則可以拒絕零假設,并推斷出B確實對A的預測有用。
第二個參數maxlag是設定測試用的lags的最大值。
我們使用關于澳大利亞藥物銷售的數據集做預測,并利用Granger causality檢測‘月份’這個序列是否對數據集的預測用。
from statsmodels.tsa.stattools import grangercausalitytests
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'])
df['month'] = df.date.dt.month
grangercausalitytests(df[['value', 'month']], maxlag=2)
輸出結果:
Granger Causality
number of lags (no zero) 1
ssr based F test: F=54.7797 , p=0.0000 , df_denom=200, df_num=1
ssr based chi2 test: chi2=55.6014 , p=0.0000 , df=1
likelihood ratio test: chi2=49.1426 , p=0.0000 , df=1
parameter F test: F=54.7797 , p=0.0000 , df_denom=200, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=162.6989, p=0.0000 , df_denom=197, df_num=2
ssr based chi2 test: chi2=333.6567, p=0.0000 , df=2
likelihood ratio test: chi2=196.9956, p=0.0000 , df=2
parameter F test: F=162.6989, p=0.0000 , df_denom=197, df_num=2
每個檢驗的p值都小于5%,所以可以說月份對澳大利亞藥物銷售的預測有用,或者說藥物的銷售可能存在季節性。
ok,本篇就這么多內容啦~,下一篇將介紹時間序列預測常用的模型ARIMA,感謝閱讀O(∩_∩)O。
總結
以上是生活随笔為你收集整理的python时间序列因果检验_用python做时间序列预测八:Granger causality test(格兰杰因果检验)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dalsa线扫相机调试文档_线阵相机调试
- 下一篇: webstorm配置环境变量_webst