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模型的拟合值(样本内一步预测值)通过卡尔曼滤波计算,而非简单的原始序列滞后项递推,具体逻辑如下:
第一个拟合值的由来
序列第一个观测点(索引0)没有前一期观测数据,卡尔曼滤波会将初始拟合值直接设为模型的截距项(即model.params[0]),这就是两者相等的原因。后续拟合值的计算逻辑
从第二个观测点(索引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
相关产品推荐
相关产品推荐

