18

我是 Granger Causality 的新手,如果有任何关于理解/解释 python statsmodels 输出结果的建议,我将不胜感激。我已经构建了两个数据集(正弦函数随时间变化并添加了噪声)在此处输入图像描述

并将它们放入“数据”矩阵中,信号 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 的滞后,它们才开始显示为非零。

谢谢你提供的所有帮助。

4

2 回答 2

9

如此处所述,为了运行格兰杰因果关系检验,您使用的时间序列必须是固定的。实现此目的的一种常见方法是通过取每个系列的第一个差异来转换两个系列:

x = np.diff(x)[1:]
y = np.diff(y)[1:]

这是我生成的类似数据集在滞后 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 lag 与值负相关。y此外(这更像是一个有根据的猜测),我认为您看到滞后 25 的 F 统计量与早期滞后相比非常低的原因是该x系列解释的许多方差包含在自相关中y从滞后 1 到 25,因为非平稳性赋予自相关更多的预测能力。

于 2020-01-07T20:36:12.950 回答
5

来自statsmodels.tsa.stattools.grangercausalitytests 函数的注释

格兰杰因果关系检验的零假设是第二列 x2 中的时间序列不会格兰杰导致第一列 x1 中的时间序列。格兰奇因果关系意味着 x2 的过去值对 x1 的当前值具有统计显着的影响,将 x1 的过去值作为回归量考虑在内。如果 p 值低于所需的测试大小,我们拒绝 x2 不会导致 x1 的原假设。

所有四个检验的原假设是对应于第二个时间序列过去值的系数为零。

测试完全按预期工作。

让我们为您的测试确定一个显着性水平,例如 alpha = 5% 或 1%。在进行测试之前选择它很重要。然后你运行你的格兰杰(非)因果关系检验,其零假设 是第二个时间序列不会导致第一个时间序列,在格兰杰的意义上,一个固定的滞后。如您所见,lag = 1 的 p 值高于您固定的阈值 alpha,这意味着您可以拒绝原假设(即没有因果关系)。对于滞后 > 25,pvalues 下降到零,这意味着您应该拒绝原假设,即非因果关系。

这确实与您通过构造提供的时间序列一致。

于 2019-05-29T12:23:05.993 回答