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

R语言中h>2的样本外滚动窗口失业率预测实现问题

适配h>2的滚动窗口失业率预测实现方案

核心思路

原有代码仅存储了单步(h=1)预测值,要实现多步(h>2,此处以h=12为例)滚动窗口预测,需调整结果存储结构为矩阵(每行对应一个滚动窗口,每列对应一个预测步长),并修正循环边界以确保每个窗口后有足够的样本外观测值。

完整实现代码

library(forecast)

# 示例失业率数据(替换为你的FRED数据)
x <- c(4.1, 4, 4, 3.8, 4, 3.8, 
       3.8, 3.7, 3.8, 3.8, 3.9, 4, 3.8, 3.8, 3.6, 3.6, 3.6, 3.7, 3.7, 
       3.5, 3.6, 3.6, 3.6, 3.5, 3.5, 4.4, 14.7, 13.2, 11, 10.2, 8.4, 
       7.9, 6.9, 6.7, 6.7, 6.4, 6.2, 6, 6, 5.8, 5.9, 5.4, 5.2, 4.7, 
       4.6, 4.2, 3.9, 4, 3.8, 3.6, 3.6, 3.6, 3.6, 3.5, 3.7, 3.5)

# 配置参数
window_sizes <- c(24, 60)  # 滚动窗口大小
h <- 12                     # 目标预测步长
n_obs <- length(x)

# 初始化结果存储列表
forecast_results <- list()

for (win_size in window_sizes) {
  # 计算有效滚动窗口数量:确保训练集后有h个样本外观测值
  n_windows <- n_obs - win_size - h + 1
  
  # 创建矩阵存储多步预测结果:行=窗口数,列=1~h步预测
  ar1_preds <- matrix(NA, nrow = n_windows, ncol = h)
  ar2_preds <- matrix(NA, nrow = n_windows, ncol = h)
  rw_preds <- matrix(NA, nrow = n_windows, ncol = h)
  auto_arima_preds <- matrix(NA, nrow = n_windows, ncol = h)
  
  for (i in 1:n_windows) {
    # 定义当前滚动窗口的训练集
    train_end <- i + win_size - 1
    x_train <- x[i:train_end]
    
    # 拟合各单变量模型
    fit_ar1 <- Arima(x_train, order = c(1, 0, 0))
    fit_ar2 <- Arima(x_train, order = c(2, 0, 0))
    fit_rw <- rwf(x_train, h = h)  # 随机游走模型(替代原meanf,若需均值预测可换回meanf)
    fit_auto_arima <- auto.arima(x_train)
    
    # 生成h步预测并存储
    ar1_preds[i, ] <- forecast(fit_ar1, h = h)$mean
    ar2_preds[i, ] <- forecast(fit_ar2, h = h)$mean
    rw_preds[i, ] <- fit_rw$mean
    auto_arima_preds[i, ] <- forecast(fit_auto_arima, h = h)$mean
  }
  
  # 按窗口大小归类存储结果
  forecast_results[[paste0("window_", win_size)]] <- list(
    AR1 = ar1_preds,
    AR2 = ar2_preds,
    RandomWalk = rw_preds,
    AutoARIMA = auto_arima_preds
  )
}

关键调整说明

  • 结果存储结构:用矩阵替代向量,完整保留每个窗口的1~h步预测值,便于后续多步预测的误差分析或对比。
  • 循环边界修正:通过n_windows = n_obs - win_size - h + 1计算有效窗口数量,避免因训练集后观测值不足导致的索引越界问题。
  • 模型函数优化:使用forecast()函数统一处理多步预测输出,比predict()更适配forecast包的模型结构;随机游走模型改用rwf()(若你实际需要的是均值预测,可换回meanf())。
  • 结果组织:用列表按窗口大小分类存储不同模型的预测结果,提升后续分析的便利性。

后续使用示例

# 查看窗口大小24的AR1模型第1个滚动窗口的12步预测值
print(forecast_results[["window_24"]]$AR1[1, ])

# 生成对应样本外真实值矩阵(用于模型评估)
win_size <- 24
n_windows <- n_obs - win_size - h + 1
true_values <- matrix(NA, nrow = n_windows, ncol = h)
for (i in 1:n_windows) {
  true_start <- i + win_size
  true_end <- true_start + h - 1
  true_values[i, ] <- x[true_start:true_end]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:05:18