【问题标题】:Understanding output from statsmodels grangercausalitytests了解 statsmodels grangercausalitytests 的输出
【发布时间】:2019-01-17 05:48:42
【问题描述】:

我是 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 时才开始显示为非零。

感谢您提供的任何帮助。

【问题讨论】:

  • 你能找到答案吗?

标签: python time-series statsmodels causality


【解决方案1】:

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

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

【讨论】:

  • 嗨@rsmith49,根据我在上面阅读和看到的相关时间序列是添加了一些噪声的正弦波,这些是非平稳的吗?
  • 老实说,这让我陷入了一些困境,因为我在时间序列方面的经验是一个研究生课程,然后是一些工作调查。但从here 看来,Strict Sense Stationarity 会排除正弦波加噪声。我假设,根据我的实验结果,格兰杰因果检验需要严格意义上的平稳性
【解决方案2】:

来自statsmodels.tsa.stattools.grangercausalitytests function的笔记

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

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

测试完全按预期进行。

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

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

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2019-02-13
    • 2012-10-21
    • 2018-09-22
    • 2019-02-18
    • 2012-08-31
    相关资源
    最近更新 更多