R语言手动实现AR1模型与ARIMA(pdq(1,0,0))输出不一致问题
为什么ARIMA(1,0,0)和手动LM拟合的AR1预测结果不一致?
核心差异来自三点:模型设定、估计方法、样本范围
1. 模型形式的本质区别
fable里的ARIMA(sales ~ pdq(1,0,0))用的是带均值修正的AR(1)模型,公式是:
[ y_t = \mu + \phi(y_{t-1} - \mu) + \epsilon_t ]
展开后等价于:
[ y_t = \mu(1-\phi) + \phi y_{t-1} + \epsilon_t ]
而你手动用lm(sales ~ lag1_sales)拟合的是无均值修正的线性回归形式:
[ y_t = \beta_0 + \beta_1 y_{t-1} + \epsilon_t ]
两者看似相似,但ARIMA会单独估计序列均值(\mu),而非直接将均值合并到截距项中,这导致参数估计的底层逻辑完全不同。
2. 参数估计方法的差异
- fable的ARIMA采用最大似然估计(MLE):基于序列服从正态分布的假设,最大化所有样本的似然值求解参数,会考虑时间序列的自相关特性。
- 手动LM拟合采用普通最小二乘(OLS):仅最小化残差平方和,未考虑时间序列的序列相关性,且OLS对AR模型的参数估计在小样本下存在偏差——尤其当自相关系数绝对值较大时,偏差会更显著。
3. 样本使用范围的不同
手动构建lag1_sales时,第一个观测值因无法生成滞后项会被自动丢弃,LM模型的样本量比ARIMA少1个。而fable的ARIMA通过状态空间模型处理初始观测值,会用到全部样本,样本量的差异也会导致参数和预测结果出现偏差。
验证方法
可以通过以下步骤确认差异来源:
- 用
report(arima_model)查看ARIMA估计的(\mu)和(\phi),代入展开式计算预测值,看是否能与LM的逻辑对应。 - 给LM添加均值修正:拟合
lm(sales ~ I(lag1_sales - mean(sales))),对比系数与ARIMA的(\phi)是否接近。 - 统一样本范围:给LM的第一个缺失滞后项填充序列均值,重新拟合后观察结果是否更靠近ARIMA的输出。
内容的提问来源于stack exchange,提问作者hachiko
相关产品推荐
相关产品推荐

