格兰杰因果关系检验的结论是一种统计估计,它先假设时间序列之间没有因果关系, 然后检验能否否定,如果能否定这个检验,那么这就可以验证这份时间序列数据对想要预测的目标是有效的。
目标使用b预测a,a是要得出预测结果的序列:
from statsmodels.tsa.stattools import grangercausalitytests
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=['a', 'b'])
grangercausalitytests(df[['a', 'b']], maxlag=2)
得到结果:
ssr based F test: F=1.8500 , p=0.2227 , df_denom=6, df_num=1
ssr based chi2 test: chi2=2.7750 , p=0.0957 , df=1
likelihood ratio test: chi2=2.4188 , p=0.1199 , df=1
parameter F test: F=1.8500 , p=0.2227 , df_denom=6, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=0.5091 , p=0.6451 , df_denom=3, df_num=2
ssr based chi2 test: chi2=2.7152 , p=0.2573 , df=2
likelihood ratio test: chi2=2.3377 , p=0.3107 , df=2
parameter F test: F=0.5091 , p=0.6451 , df_denom=3, df_num=2
主要看p
值(第二列),所有的p小于0.05才能证明b对a有效
有时可以把x与y的顺序调过来,说不定是x=f(y)
:
grangercausalitytests(df[['b', 'a']], maxlag=2)
各项指标含义
number of lags (no zero) 1:当lags为1时的检测结果
ssr based F test:残差平方和F检验
ssr based chi2 test:残差平方和卡方检验
likelihood ratio test:似然比检验结果
parr F testamete:参数 F 检验结果