如何在Python的statsmodels中获取AR模型的常数项?

3 投票
1 回答
3927 浏览
提问于 2025-04-18 09:29

我正在尝试用AR模型来处理我的时间序列数据。

这里输入图片描述

这是我使用的代码。

# Compute AR-model (data is a python list of number)

model = AR(data)
result = model.fit()

plt.plot(data, 'b-', label='data')
plt.plot(range(result.k_ar, len(data)), result.fittedvalues, 'r-')
plt.show()

我已经成功获取了p值,使用的是result.k_ar,参数用result.params,还有误差项用result.sigma2。问题是我找不到获取常数项c的方法。下面是我写的代码来比较结果。

# Plot

fit = []
for t in range(result.k_ar, len(data)):
    value = 0
    for i in range(1, result.k_ar+1):
        value += result.params[i-1] * data[t - i]
    fit.append(value)

plt.plot(data, 'b-', label='data')
plt.plot(range(result.k_ar, len(data)), fit, 'r-', label='fit')
plt.plot(range(result.k_ar, len(data)), result.fittedvalues, 'r-')
plt.show()

我的结果和result.fittedvalues的结果都表明模型中确实添加了一些常数项。谢谢。

这里输入图片描述

1 个回答

5

常数是参数中的第零个元素,比如说 params[0]。

你的代码应该是

fit = []
for t in range(result.k_ar, len(data)):
    value = result.params[0]
    for i in range(2, result.k_ar + 2):
        value += result.params[i - 1] * data[t - i + 1]
    fit.append(value)

或者更简单一些,因为我们已经为你准备好了滞后矩阵(这就是 fittedvalues 的作用)。

np.dot(result.model.X, result.params)

顺便提一下,对于自回归(AR)模型来说,这实际上是常数,而不是平均值。平均值是由 ARMA 模型报告的,ARMA 模型比普通的 AR 模型功能更强大一些。(它有一个总结方法可以报告常数。AR 模型也应该有这个功能,但实际上没有。)它们之间的关系是

constant = mean(1 - arparams.sum())

撰写回答