Python 了解statsmodels grangercausalitytests的输出

Python 了解statsmodels grangercausalitytests的输出,python,time-series,statsmodels,causality,Python,Time Series,Statsmodels,Causality,我是格兰杰因果关系的新手,如果您能给我一些关于理解/解释python statsmodels输出结果的建议,我将不胜感激。我构建了两个数据集(正弦函数随噪声的增加而随时间移动) 并将其放入“数据”矩阵中,信号1为第一列,信号2为第二列。然后,我使用以下方法运行测试: granger_test_result = sm.tsa.stattools.grangercausalitytests(data, maxlag=40, verbose=True)` 结果表明,最佳滞后(就最高F测试值而言)为滞

我是格兰杰因果关系的新手,如果您能给我一些关于理解/解释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个点):

我显然误解了这里的某些东西。为什么预测的滞后与数据的变化不匹配

另外,有人能向我解释为什么p值如此小,以至于对于大多数滞后值可以忽略不计吗?对于大于30的滞后,它们才开始显示为非零

谢谢你能给我的帮助

来自

grangercausalitytests的无效假设是,第二列x2中的时间序列不会Granger导致第一列x1中的时间序列。Grange因果关系意味着x2的过去值对x1的当前值具有统计上的显著影响,将x1的过去值作为回归系数考虑在内。我们拒绝了零假设,即如果Pv值低于测试的期望大小,x2不会格兰杰导致x1

所有四个测试的零假设是,与第二个时间序列的过去值相对应的系数为零

测试完全按照预期进行

让我们为您的测试确定一个值,比如alpha=5%或1%。在进行测试之前选择它是很重要的。然后运行Granger(非)因果关系测试,其结果是第二个时间序列不会导致第一个时间序列,在Granger的意义上,固定滞后。正如您发现的,lag=1的pvalue高于您固定的阈值alpha,这意味着您可以拒绝无效假设(即无因果关系)。对于lag>25,Pv值降至零,这意味着您应该拒绝无效假设,即非因果关系

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

如前所述,为了运行格兰杰因果关系测试,您使用的时间序列必须是平稳的。实现这一点的常用方法是通过取每个序列的第一个差值来变换两个序列:

x = np.diff(x)[1:]
y = np.diff(y)[1:]
以下是我生成的类似数据集在滞后1和滞后25时格兰杰因果关系结果的比较:

不变的

第一差


我将尝试从概念上解释正在发生的事情。由于您使用的序列具有明显的平均趋势,早期滞后于1,2。。。在F检验中都给出了重要的预测模型。这是因为由于长期趋势,您可以很容易地将
x
值1滞后与
y
值负相关。此外(这是一个更有根据的猜测),我认为,与早期滞后相比,滞后25的F统计值非常低的原因是,由
x
序列解释的大量方差包含在滞后1-25的
y
的自相关中,由于非平稳性使自相关具有更强的预测能力。

你能找到答案吗?您好@rsmith49,从我上面读到的和看到的时间序列都是正弦波,加上一些噪声,它们怎么会是非平稳的?老实说,这让我有点不知所措,因为我的时间序列经历是一次研究生班,然后是一次工作调查。但从严格意义上看,平稳性将排除正弦波加噪声。根据我的实验结果,我假设格兰杰因果关系检验需要严格意义上的平稳性
x = np.diff(x)[1:]
y = np.diff(y)[1:]
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