Statsmodels自相关函数置信区间不匹配 - Python

5

我试图通过 ACF 图来找到重要的输出数字,但是 statsmodels.tsa.acf() 的结果置信区间与 statsmodels.graphics.tsa.acf() 图不匹配。

示例代码:

import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf

acf,confidence_interval=sm.tsa.acf(df_data,nlags=df_data.shape[0]-1,alpha=0.05,fft=False)

plot_acf(df_data,lags=df_data.shape[0]-1)

print(confidence_interval)

以下是图表:

ACF Graph

然而,sm.tsa.acf() 返回的置信区间值与图中的值有很大不同。

返回的数值为:

[[ 1.          1.        ]
 [-0.27174973  0.37268246]
 [-0.3286431   0.31742828]
 [ 0.0203798   0.66647139]
 [-0.61221928  0.10569058]
 [-0.61407253  0.14003004]
 [-0.42569193  0.35873921]
 [-0.58610165  0.19892257]
 [-0.64565391  0.15895208]
 [-0.34123344  0.49337893]
 [-0.53223297  0.30525403]
 [-0.56775509  0.2760946 ]
 [-0.02246426  0.83178741]
 [-0.55237867  0.37808097]
 [-0.53964256  0.39420078]
 [-0.19144858  0.74474359]
 [-0.63752942  0.33201877]
 [-0.66170085  0.31779123]
 [-0.5026759   0.48927364]
 [-0.63266561  0.35930273]
 [-0.60042286  0.39933612]
 [-0.50945575  0.49449365]
 [-0.47942564  0.52454691]
 [-0.48578234  0.51840072]
 [-0.32312106  0.68117201]
 [-0.40066389  0.61679615]
 [-0.3917795   0.63043611]
 [-0.35304025  0.67494402]
 [-0.52974159  0.50865544]
 [-0.57667548  0.46176601]
 [-0.5657842   0.47397661]
 [-0.61493365  0.42566845]
 [-0.57909456  0.46507539]
 [-0.54230719  0.50315461]
 [-0.51974363  0.52587038]
 [-0.53350424  0.5121135 ]
 [-0.52597853  0.51968465]]

看起来第一个值与图形匹配,然后就变得没有关联了。我在Stack Overflow上找到了类似的问题,但没有解决方案。我阅读了文档,搜索了类似的问题,但是我找不到解决方案。

如何获取反映在图表上的置信区间值?


1
重复,链接问题中的答案解释了这一点。只需从置信区间中减去acf即可使其居中于零。 - Josef
1个回答

0
解决方案
要获得由plot_acf返回的图形上反映的置信区间,您需要从confint边界中减去acf_values
示例
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import acf

# Generate some sample time series data
np.random.seed(0)
t = np.linspace(0, 10, n)
time_series = np.sin(t)

# Calculate the ACF with confidence intervals using statsmodels
acf_values, confint = acf(time_series, alpha=0.05)

lower_bound = confint[1:, 0] - acf_values[1:]
upper_bound = confint[1:, 1] - acf_values[1:]

# Create lag values for the x-axis
lags = np.arange(0, len(acf_values))

# Plot the ACF with confidence intervals using Matplotlib
plt.figure(figsize=(10, 6))
plt.bar(lags, acf_values, width=0.2, align='center', label='ACF')

# Fill the area between upper and lower bounds
plt.fill_between(lags[1:], lower_bound, upper_bound, color='grey', alpha=0.2, label='95% Confidence Interval')

# Plot the upper and lower bounds
plt.plot(lags[1:], upper_bound, color='grey')
plt.plot(lags[1:], lower_bound, color='grey')

plt.axhline(y=0, color='black', linewidth=0.8, linestyle='dotted')
plt.xlabel('Lag')
plt.ylabel('Autocorrelation')
plt.title('Autocorrelation Function (ACF) with Confidence Interval')
plt.legend()
plt.grid(True)
plt.show()

Examplary ACF plot

解释

plot_acfacf在其预期用途上有所不同:plot_acf提供了自相关的快速视觉表示,重点是视觉解释,而acf更注重提供自相关值本身,而不考虑图形上下文。

  • statsmodels.graphics.tsaplots.plot_acf(带有绘图功能)主要用于绘制时间序列的自相关函数(ACF)并提供视觉洞察。使用plot_acf计算和绘制ACF时,置信区间以零为中心。这对于可视化自相关值与零假设(无自相关性)偏离程度非常有用。请参阅plot_acf的参数barlett_confint文档

  • statsmodels.graphics.tsaplots.acf(不带绘图):函数acf专注于计算自相关函数而不创建图形绘制。当使用acf计算ACF时,该函数将置信区间的中心放在自相关值本身周围,而不是零。这对于涉及自相关的统计计算和假设检验非常有用。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接