我对Granger因果关系很陌生,希望了解/解释python输出结果的任何建议。我构造了两个数据集(正弦函数随时间移动,加上噪声)

并将它们放在一个“数据”矩阵中,信号1作为第一列,信号2作为第二列。然后,我使用以下方法运行测试:
granger_test_result = sm.tsa.stattools.grangercausalitytests(data, maxlag=40, verbose=True)`结果表明,最优滞后(最高F检验值)为滞后1。
Granger Causality
('number of lags (no zero)', 1)
ssr based F test: F=96.6366 , p=0.0000 , df_denom=995, df_num=1
ssr based chi2 test: chi2=96.9280 , p=0.0000 , df=1
likelihood ratio test: chi2=92.5052 , p=0.0000 , df=1
parameter F test: F=96.6366 , p=0.0000 , df_denom=995, df_num=1然而,似乎最能描述数据最佳重叠的延迟约为25 (在下图中,信号1已向右移动25分):

Granger Causality
('number of lags (no zero)', 25)
ssr based F test: F=4.1891 , p=0.0000 , df_denom=923, df_num=25
ssr based chi2 test: chi2=110.5149, p=0.0000 , df=25
likelihood ratio test: chi2=104.6823, p=0.0000 , df=25
parameter F test: F=4.1891 , p=0.0000 , df_denom=923, df_num=25我显然误解了一些东西。为什么预测的滞后不能与数据的变化相匹配?
另外,有人能向我解释为什么p值如此之小,以至于对于大多数滞后值来说都是可以忽略不计的?当延迟超过30时,它们才开始出现非零。
谢谢你能提供的任何帮助。
发布于 2020-01-07 20:36:12
正如这里所说,为了运行格兰杰因果检验,您所使用的时间序列必须是平稳的。实现这一目标的一种常见方法是将两个系列转换为两个系列的第一个区别:
x = np.diff(x)[1:]
y = np.diff(y)[1:]下面是对我生成的类似数据集的Granger因果关系结果在滞后1和滞后25时的比较:
不变
Granger Causality
number of lags (no zero) 1
ssr based F test: F=19.8998 , p=0.0000 , df_denom=221, df_num=1
ssr based chi2 test: chi2=20.1700 , p=0.0000 , df=1
likelihood ratio test: chi2=19.3129 , p=0.0000 , df=1
parameter F test: F=19.8998 , p=0.0000 , df_denom=221, df_num=1
Granger Causality
number of lags (no zero) 25
ssr based F test: F=6.9970 , p=0.0000 , df_denom=149, df_num=25
ssr based chi2 test: chi2=234.7975, p=0.0000 , df=25
likelihood ratio test: chi2=155.3126, p=0.0000 , df=25
parameter F test: F=6.9970 , p=0.0000 , df_denom=149, df_num=25第一差
Granger Causality
number of lags (no zero) 1
ssr based F test: F=0.1279 , p=0.7210 , df_denom=219, df_num=1
ssr based chi2 test: chi2=0.1297 , p=0.7188 , df=1
likelihood ratio test: chi2=0.1296 , p=0.7188 , df=1
parameter F test: F=0.1279 , p=0.7210 , df_denom=219, df_num=1
Granger Causality
number of lags (no zero) 25
ssr based F test: F=6.2471 , p=0.0000 , df_denom=147, df_num=25
ssr based chi2 test: chi2=210.3621, p=0.0000 , df=25
likelihood ratio test: chi2=143.3297, p=0.0000 , df=25
parameter F test: F=6.2471 , p=0.0000 , df_denom=147, df_num=25我将尝试从概念上解释正在发生的事情。由于您所使用的系列在平均上有一个明显的趋势,早期滞后在1,2,.在F检验中,等等都给出了显着的预测模型。这是因为,由于长期趋势,您可以很容易地将x值1滞后与y值关联起来。另外(这是一个比较有根据的猜测),我认为你看到滞后25的F统计量比早期滞后很低的原因是,x序列解释的很多方差包含在y从滞后1-25的自相关中,因为非平稳性给了自相关更大的预测能力。
发布于 2019-05-29 12:23:05
来自statsmodels.tsa.stattools.grangercausalitytests函数的笔记
关于因果关系检验的零假设是,第二列x2中的时间序列并不是Granger引起第一列x1中时间序列的原因。Grange因果关系意味着x2的过去值对x1的当前值有统计意义的影响,并将x1的过去值考虑为回归项。如果p值低于所需的测试大小,则我们拒绝x2不Granger导致x1的空假设。 所有四个检验的零假设是,与第二个时间序列的过去值相对应的系数为零。
测试正如期而至。
让我们为您的测试修复一个显着水平,例如alpha = 5%或1%。在执行测试之前选择它是很重要的。然后运行格兰杰(非)因果检验,其零假设是第二个时间序列不会导致第一个时间序列,在格兰杰的意义上,一个固定的滞后。正如您所发现的,滞后=1的pvalue高于您固定的阈值alpha,这意味着您可以拒绝空假设(即没有因果关系)。对于滞后> 25,pvalue下降到零,这意味着您应该拒绝空假设,即非因果关系。
这确实与你所提供的时间序列是一致的。
https://stackoverflow.com/questions/51772493
复制相似问题