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

如何用系数重构ARIMA预测?回归ARIMA误差模型拟合值复现

问题根源:混淆了拟合值(平滑值)与一步预测值,且初始条件处理错误

带ARIMA误差的回归模型核心结构为:
[ y_t = X_t\beta + n_t ]
其中 ( n_t = \phi n_{t-1} + \epsilon_t )(即你用的AR(1)误差项)。

R中arima()函数返回的fitted值是基于Kalman平滑的整体拟合值——用全部数据对每个时刻的 ( n_t ) 做最优估计,而非仅用前t-1个数据的一步预测。你自定义的fitted2大概率是用递推方式计算的一步预测值,两者逻辑完全不同,结果自然存在差异。

另外,即便你想计算一步预测,初始条件处理也可能有误:

  • 错误将第一个时刻的 ( n_1 ) 设为0,正确的初始一步预测应使用第一个观测的残差作为初始噪声项,或模型估计的初始状态(AR(1)的无条件均值)。
  • 递推逻辑误用了实际值减回归项,而非前一时刻的残差(( e_t = y_t - \hat{y}_t ))来计算当前噪声预测。

正确复现R中fitted值的方法

要在Excel中复现R的fitted结果,需遵循Kalman平滑逻辑,或直接从R模型提取平滑状态。具体步骤如下:

1. 提取模型参数

假设你用arima()拟合模型:

mod <- arima(y, xreg = x, order = c(1, 0, 0))
beta <- coef(mod)[!names(coef(mod)) %in% "ar1"]
phi <- coef(mod)["ar1"]

2. 计算回归部分

[ \text{reg}_t = X_t \cdot \beta ]

3. 提取平滑后的噪声项

直接从R模型中获取Kalman平滑后的噪声项,再计算拟合值:

library(forecast)
# 重新用forecast包的Arima拟合,方便提取状态
ss <- Arima(y, xreg = x, order = c(1,0,0))
n_smoothed <- ss$model$states[,1]
# 拟合值 = 回归部分 + 平滑后的噪声项
fitted_r <- reg_part + n_smoothed

这个结果会和fitted(mod)完全一致。

4. 如果需要递推计算一步预测值(适合Excel实现)

若你要的是一步预测值(而非R的平滑拟合值),正确递推逻辑为:

reg_part <- x %*% beta
fitted一步预测 <- numeric(length(y))
# 第一个时刻无前置数据,预测值为回归项
fitted一步预测[1] <- reg_part[1]
resid <- y - fitted一步预测

for(t in 2:length(y)){
  fitted一步预测[t] <- reg_part[t] + phi * resid[t-1]
  resid[t] <- y[t] - fitted一步预测[t]
}

该结果与forecast(mod)$fitted一致,但和fitted(mod)不同——前者是一步预测,后者是全数据平滑拟合。

总结

你的核心错误是:

  • 把R中基于全数据的平滑拟合值当成一步预测值进行递推计算
  • 初始条件处理不符合模型的估计逻辑

若要在Excel中复现R的fitted结果,要么直接从R导出拟合值,要么实现Kalman平滑逻辑;若仅需递推计算,就用上述一步预测的递推公式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:07:04