使用fable::refit(reestimate=FALSE)时常数项系数变化的原因及解决方法
问题解答:fable模型重拟合时常数项异常及新数据估计方法
问题原因分析
当调用fable::refit(m, reestimate=FALSE)时常数项出现异常变化,是因为AR模型在fable中的参数化特性:你指定的AR(value ~ 1 + order(3))里,常数项并非直接截距,而是均值参数的变换形式(数学关系为 mu = constant / (1 - ar1 - ar2 - ar3))。当设置reestimate=FALSE固定AR系数时,函数会基于新数据重新求解常数项以匹配均值,这就导致了常数项的异常波动——这是当前fable版本(0.3.1)的预期行为,但不符合“完全固定所有参数”的需求。
正确的新数据估计方法
若要将训练好的模型应用到新数据获取估计值,无需使用refit,以下两种方法更直接:
方法1:用augment()获取拟合值
针对已有历史新数据,直接用augment()加载模型和新数据,完全沿用原模型参数计算拟合值:
# 对女性死亡数据应用男性模型,得到拟合结果 augment(fit, new_data = lung_deaths_female)
方法2:用forecast()获取预测/拟合值
如果需要对未观测数据做预测,或对历史新数据生成拟合结果,forecast()同样会保留原模型所有参数:
# 对女性死亡数据生成拟合/预测结果 forecast(fit, new_data = lung_deaths_female)
手动验证参数(可选)
若要确认参数完全固定,可提取原模型系数后手动计算:
# 提取原模型系数 coefs <- coef(fit) # 手动计算AR(3)模型的拟合值 lung_deaths_female %>% mutate( fit = coefs$constant + coefs$ar1 * lag(value, 1) + coefs$ar2 * lag(value, 2) + coefs$ar3 * lag(value, 3) )
关于refit(reestimate=FALSE)的补充说明
该函数的设计目标是固定部分参数、重新估计其余参数,并非完全冻结所有参数。对于带均值的AR模型,常数项与AR系数存在数学依赖关系,固定AR系数后重新计算常数项是函数的既定逻辑,但这显然不适合你“直接复用全参数”的场景。
内容的提问来源于stack exchange,提问作者Andreas Jendrzey
相关产品推荐
相关产品推荐

