Statsmodels PACF绘图置信区间与PACF函数不匹配

2024-10-17 12:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我用statsmodels时间序列api绘制了PACF图,这表明第一个滞后是显著的。因此,我使用PACF estimation来获得PACF值以及每个点的置信区间,但是两者之间的置信区间不匹配。更奇怪的是the plot function in the source code使用了底层的估计函数,所以它们应该匹配

例如:

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()

enter image description here

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

或者,当尝试获取这些精确的绘图值时(为了简洁起见,仅获取前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参考:


Tags: theimportapiplotasnp时间序列
3条回答

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

根据守则:

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

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

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

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

计算CI的the code snippet的最后一行确保了这一点:

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

(另见issue 1969,其中这是固定的)

由于对0滞后不感兴趣,您通常使PACF绘图从滞后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')

enter image description here

相关问题 更多 >