繁体   English   中英

Statsmodels PACF plot 置信区间与 PACF function 不匹配

[英]Statsmodels PACF plot confidence interval does not match PACF function

我有一个时间序列,在观察偏自相关 (PACF) plot 时似乎有明显的滞后,即 PACF 值大于蓝色置信区间。 我想以编程方式验证这一点,但它似乎不起作用。

我用 statsmodels 时间序列 api 绘制了 PACF plot,这表明第一个滞后是显着的。 因此,我使用PACF 估计来获取 PACF 值以及每个点的置信区间,但两者之间的置信区间不匹配。 更奇怪的是源代码中的 plot function使用基础估计 function 所以它们应该匹配。

例子:

import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

x = np.arange(1000) 
sm.graphics.tsa.plot_pacf(x)
plt.show()

在此处输入图像描述

这表明第一个滞后非常显着,约为 0.98,整个 plot 的置信区间(蓝色矩形)约为(-0.06,0.06)。

或者,在尝试获取这些精确的 plot 值时(为简洁起见,仅获取前 10 个滞后值):

sm.tsa.stattools.pacf(x, nlags=10, alpha=0.05) 

生成的 PACF 值为(与上图匹配):

array([ 1.        ,  0.997998  , -0.00200201, -0.00200402, -0.00200605,
        -0.0020081 , -0.00201015, -0.00201222, -0.0020143 , -0.00201639,
        -0.00201849])

置信区间(在上图中以蓝色显示)似乎在第一个滞后时关闭:

 array([[ 1.        ,  1.        ],
        [ 0.93601849,  1.0599775 ],
        [-0.06398151,  0.0599775 ],
        [-0.06398353,  0.05997548],
        [-0.06398556,  0.05997345],
        [-0.0639876 ,  0.05997141],
        [-0.06398965,  0.05996935],
        [-0.06399172,  0.05996729],
        [-0.0639938 ,  0.05996521],
        [-0.06399589,  0.05996312],
        [-0.06399799,  0.05996101]]))

这是怎么回事?

Api 参考:

根据代码:

  • stattools.pacf计算估计 pacf 周围的置信区间,即它以实际值为中心
  • graphics.tsa.plot_pacf采用该置信区间并减去估计的 pacf,因此置信区间以零为中心。

我不知道也不记得为什么要这样做。

在该示例中,滞后大于或等于 2 的所有 pacf 都接近于零,因此 plot 与 stattools.pacf 的结果之间没有明显差异。

滞后 0 的 PACF 始终为 1(参见此处的示例),因此其置信区间为 [1,1]。

这是由计算 CI 的代码片段的最后一行确保的:

varacf = 1. / len(x)  # for all lags >=1
interval = stats.norm.ppf(1. - alpha / 2.) * np.sqrt(varacf)
confint = np.array(lzip(ret - interval, ret + interval))
confint[0] = ret[0]  # fix confidence interval for lag 0 to varpacf=0

(另请参阅问题 1969 ,其中已解决此问题)。

由于 0 滞后没有意义,您通常使 PACF plot 从滞后 1 开始(如 R 的pacf function )。 这可以通过zero=False来实现:

sm.graphics.tsa.plot_pacf(x, ax=axes[0], zero=True, title='zero=True (default)')
sm.graphics.tsa.plot_pacf(x, ax=axes[1], zero=False, title='zero=False')

在此处输入图像描述

如果我正确理解了最初的问题——为什么 ACF/PACF function 返回的 CI 编号与图表上显示的 CI(由 function plot_acf 制作)不匹配? 答案很简单——图上的 CI 以 0 为中心,它使用的数字与您从 acf/pacf 函数中获得的数字相同。

我仍然不遵循答案。 通过查看我自己的数据,我了解到图表以零为中心,但按原样描绘了值。 这不就是把两个不同的天平合二为一吗? 您不应该选择 1:原始值与原始 CI(块 1),或者将值视为 0,CI 以零为中心(块 2)?

下图说明了我的观点:

第一个块: statsmodels.tsa.stattools.acf(df,nlags=10,alpha=0.05,fft=True)。

第二块: LCL-value和UCL-value减去值,与0比较。

第三块:匹配图表 sm.graphics.tsa.plot_acf(df, zero=False, lags = 10, alpha=0.05) 将显示:调整后的 LCL 和 UCL,但原始值。

如您所见,“原始”方式没有显着结果(eval、eval_w_0),但我从图中得到了显着结果(eval_adj)。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM