【问题标题】:How to get constant term in AR Model with statsmodels and Python?如何使用 statsmodels 和 Python 在 AR 模型中获得常数项?
【发布时间】:2014-08-02 01:45:23
【问题描述】:

我正在尝试使用 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 获得了参数,使用result.sigma2 获得了epsilon 项。问题是我找不到获得 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 的结果证实了我很明显在模型中添加了一些常数项。谢谢。

【问题讨论】:

    标签: python time-series statsmodels


    【解决方案1】:

    常量是 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)
    

    甚至更简单,因为我们已经为您制作了滞后矩阵(这就是 fitvalues 所做的)

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

    顺便说一句,请注意,对于 AR,这实际上是常数,而不是平均值。平均值由 ARMA 模型报告,它比普通的 AR 模型功能更全面。 (它有一个报告常量的汇总方法。AR 也应该但没有。)连接是

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

    【讨论】:

    • 根据等式,我是否应该将 epsilon 添加到结果中 (fit.append(value + result.sigma2)?
    • 否,但您可以使用 sigma2 来获得预测不确定性的估计值。有一个 PR 可以将其放入 AR,但目前它仅在 ARMA/ARIMA 中可用。
    • 我尝试过使用 ARMA,但仍然遇到一些问题。你能帮我看看这个问题吗? stackoverflow.com/q/24331886/1241606
    猜你喜欢
    • 2021-01-09
    • 1970-01-01
    • 2017-09-13
    • 2019-07-11
    • 2015-03-05
    • 1970-01-01
    • 2017-04-12
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多