You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

statsmodels中ARIMA模型拟合值的计算方式技术咨询

Statsmodels中ARIMA(1,0,0)拟合值的计算逻辑

问题背景

给定随机生成的序列:

series = array([ 1.76405235,  0.40015721,  0.97873798,  2.2408932 ,  1.86755799,
       -0.97727788,  0.95008842, -0.15135721, -0.10321885,  0.4105985 ])

拟合AR(1)模型:

import statsmodels.api as sm
model = sm.tsa.ARIMA(series, order=(1,0,0)).fit()
parameters = model.params
fitted_values = model.fittedvalues

存在两个疑问:

  • 为何用model.params[0] + model.params[1]*series[i-1]无法得到正确的拟合值?
  • 为何fitted_values[0]与model.params[0]相等?

解答

Statsmodels中ARIMA模型的拟合值(样本内一步预测值)通过卡尔曼滤波计算,而非简单的原始序列滞后项递推,具体逻辑如下:

  1. 第一个拟合值的由来
    序列第一个观测点(索引0)没有前一期观测数据,卡尔曼滤波会将初始拟合值直接设为模型的截距项(即model.params[0]),这就是两者相等的原因。

  2. 后续拟合值的计算逻辑
    从第二个观测点(索引1)开始,拟合值依赖前一期的拟合值而非原始序列的前一期值,公式为:

    fitted_values[i] = parameters[0] + parameters[1] * fitted_values[i-1]
    

    这和你尝试的原始序列滞后项计算方式不同——卡尔曼滤波基于之前的预测结果(拟合值)更新当前预测,而非直接使用原始观测的滞后项,因此用series[i-1]代入会得到错误结果。


补充说明

如果想要得到基于原始序列滞后项的拟合值(条件最小二乘法下的结果),可以手动计算:

  • 索引≥1的点:parameters[0] + parameters[1] * series[i-1]
  • 第一个点:使用AR(1)模型的无条件均值 parameters[0]/(1 - parameters[1])
    这种计算结果和statsmodels的fittedvalues会有差异,因为两者初始条件与计算逻辑不同。

内容的提问来源于stack exchange,提问作者simo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:50:53