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

如何为基于Bootstrap的袋装时间序列模型计算AICc值?

袋装Bootstrap预测模型的AICc计算问题

我参考《预测原理与实践》中的Bootstrap方法实现袋装预测,但不知道如何计算袋装模型的AICc值,执行相关代码时持续报错。

我的代码流程

  1. 数据预处理与分解模型初始化
library(fpp3)
library(tidyverse)
cement <- aus_production |>
  filter(year(Quarter) >= 1988) |>
  select(Quarter, Cement)
cement_stl <- cement |>
  model(stl = STL(Cement))
  1. 生成Bootstrap模拟序列
sim <- cement_stl |>
  generate(new_data = cement, times = 10,
           bootstrap_block_size = 8) |>
  select(-.model, -Cement)
  1. 拟合ETS模型并生成预测
ets_forecasts <- sim |>
  model(ets = ETS(.sim)) |>
  forecast(h = 12)
  1. 计算袋装预测均值
bagged <- ets_forecasts |>
  summarise(bagged_mean = mean(.mean))

报错情况

尝试以下代码计算AICc或准确率时:

glance(bagged)
accuracy(bagged)
glance(ets_forecasts)
accuracy(object = bagged, data = ets_forecasts)

返回错误:

Error in UseMethod("glance") : 
  no applicable method for 'accuracy' applied to an object of class "c('tbl_ts', 'tbl_df', 'tbl', 'data.frame')"

解决方案

问题根源:
bagged是summarise生成的时间序列表格,不是模型对象;glance()和accuracy()仅支持模型对象或包含真实值+预测值的结构化表格。此外,袋装模型是多个子模型预测的均值,没有单一拟合参数,无法直接计算传统AICc。

方法1:汇总子模型的AICc值

袋装模型没有自身的AICc,可计算所有子模型AICc的平均值作为参考:

# 提取每个ETS子模型的AICc
submodel_metrics <- ets_forecasts |>
  select(.sim_id, .sim) |>
  distinct() |>
  mutate(model_stats = map(.sim, ~glance(.x))) |>
  unnest(model_stats)

# 计算子模型AICc的均值
bagged_aicc <- submodel_metrics |>
  summarise(mean_aicc = mean(AICc))

方法2:评估袋装预测的准确率

若需评估预测性能,将袋装预测与原始数据结合后使用accuracy():

# 合并袋装预测与原始数据
bagged_vs_actual <- bagged |>
  left_join(cement, by = "Quarter")

# 计算准确率指标
accuracy(bagged_vs_actual, truth = Cement, estimate = bagged_mean)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:35:17