我正在尝试使用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的参数,带有result.sigma2的epsilon term成功获得了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的结果证实我很明显,模型中添加了一些常量项.谢谢.
解决方法:
常数是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())
标签:statsmodels,python,time-series
来源: https://codeday.me/bug/20190830/1770275.html