我正在尝试使用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
,result.params
参数,epsilon术语result.sigma2
成功获取p值。问题是我无法找到获得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 :(得分:5)
常量是params中的第零个元素。例如,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)
甚至更容易,因为我们为你制作了滞后矩阵(这就是拟合值所做的)
np.dot(result.model.X, result.params)
顺便说一句,请注意,对于AR来说,这实际上是常数而不是均值。平均值由ARMA模型报告,其比普通AR模型更全面。 (它有一个报告常量的摘要方法.AR也应该但不是。)连接是
constant = mean(1 - arparams.sum())