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

《Forecasting Principles and Practice》干预变量示例及代码运行问题求助

问题核心原因

你混淆了两个同名的step()函数:

  • stats::step()用于逐步回归变量选择,不能直接嵌入TSLM()的公式中使用
  • fable::step()是构造干预分析用的阶跃变量的专用函数,需要传入干预发生时间的判断条件作为参数,而非模型对象。你代码中传入lm模型对象作为参数,不符合函数要求,因此返回空模型。

干预变量的正确用法

step()和spike()是用来构造特定时点的干预特征的函数,使用时需要先明确干预发生的时间点,以us_change数据集的季度时间粒度为例:

  • step(date == yearquarter("YYYY Qq")):从指定季度开始,变量取值为1,之前为0,适合模拟永久性结构冲击
  • spike(date == yearquarter("YYYY Qq")):仅指定季度取值为1,其余时间为0,适合模拟一次性短期冲击

可运行代码示例

library(tidyverse)
library(fpp3)

fit_consBest <- us_change %>%
  model(
    # 基准线性模型
    lm = TSLM(Consumption ~ Income + Savings + Unemployment + trend() + season()),
    # 加入2008年Q4金融危机阶跃干预的模型
    step_interv = TSLM(Consumption ~ Income + Savings + Unemployment + trend() + season() + step(date == yearquarter("2008 Q4"))),
    # 加入2008年Q4金融危机脉冲干预的模型
    spike_interv = TSLM(Consumption ~ Income + Savings + Unemployment + trend() + season() + spike(date == yearquarter("2008 Q4")))
  )

# 正常查看结果
report(fit_consBest)
fit_consBest %>% select(step_interv)
glance(fit_consBest)

如果你需要做逐步变量选择

如果你的需求是做变量筛选而非干预分析,需要单独调用stats::step(),不能直接写在TSLM()的公式内,写法如下:

# 提取基准模型的拟合引擎
base_lm <- us_change %>%
  model(lm = TSLM(Consumption ~ Income + Savings + Unemployment + trend() + season())) %>%
  extract_fit_engine()

# 执行逐步回归
step_select_model <- step(base_lm, scope = . ~ .)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:01