我正在尝试使用 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()
我已经使用 result.k_ar
成功获取了 p 值,参数为 result.params
,epsilon 项为 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
的结果证实了我的证据,即模型中添加了一些常数项。谢谢。
最佳答案
常数是参数中的第零个元素。例如,参数[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 模型报告,该模型比普通 AR 模型功能更全面。 (它有一个报告常量的汇总方法。AR 也应该有但没有。)连接是
constant = mean(1 - arparams.sum())
关于python - 如何使用 statsmodels 和 Python 在 AR 模型中获取常数项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172454/