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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:25:08