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

在R的hts包中,如何用MinT调和非标准模型的层级预测

用hts包处理自定义预测的交叉分组调和(MinT方法)

步骤1:整理预测数据为标准ts对象

先确保预测数据是正确的时间序列对象,指定起始年份和频率(示例为年度数据,频率设为1):

library(hts)

# 你的示例数据
forecasts <- rbind(c(1,1,1,1,2,3,3,4,6),
                   c(1,1,2,1,3,4,3,2,7),
                   c(0,1,0,1,3,2,2,3,6))
rownames(forecasts) <- c("2010","2011","2012")
colnames(forecasts) <- c("uk_internal","eu_internal","uk_external","eu_external",
                         "uk_total","eu_total","total_external","total_internal",
                         "total_total")

# 转换为ts对象,起始2010,年度频率
forecasts_ts <- ts(forecasts, start = 2010, frequency = 1)

步骤2:提取底层序列并定义分组结构

你的数据是交叉分组时间序列(维度:地区UK/EU、类型Internal/External),先提取4个最细粒度的底层序列,再定义分组维度:

# 提取底层序列
bottom_ts <- forecasts_ts[, c("uk_internal","eu_internal","uk_external","eu_external")]

# 定义分组结构:每行对应一个底层序列的分组归属
# 第一列是地区(1=UK, 2=EU),第二列是类型(1=Internal, 2=External)
groups_matrix <- matrix(c(1,1,2,2,
                          1,2,1,2),
                        nrow = 4, byrow = FALSE)
# 也可以用更直观的因子形式
groups_df <- data.frame(Region = rep(c("UK", "EU"), each=2),
                        Type = rep(c("Internal", "External"), 2))

步骤3:构造gts对象并匹配预测列顺序

初始gts对象会自动生成所有聚合层级,需要将你已有的预测结果按gts的层级顺序对齐:

# 构造初始gts对象
my_gts <- gts(bottom_ts, groups = groups_matrix)

# 查看gts的层级标签顺序,用于匹配预测列
labels(my_gts)
# 输出:"UK-Internal" "EU-Internal" "UK-External" "EU-External" "UK" "EU" "Internal" "External" "Total"

# 调整预测列顺序,匹配gts的标签顺序
forecasts_ordered <- forecasts_ts[, c("uk_internal","eu_internal","uk_external","eu_external",
                                      "uk_total","eu_total","total_internal","total_external",
                                      "total_total")]

# 将对齐后的预测结果赋值给gts对象的forecasts属性
my_gts$forecasts <- forecasts_ordered

步骤4:用MinT方法调和预测

直接调用MinT()函数进行调和,支持OLS、WLS等多种方法:

# 使用OLS方法调和(默认)
reconciled_forecasts <- MinT(my_gts, method = "ols")

# 查看调和后的所有层级预测
forecast(reconciled_forecasts)

关键注意事项

  • 尽量保证聚合预测逻辑自洽(比如uk_total应等于uk_internal + uk_external),即使存在不一致,MinT也会自动修正。
  • 如果是多步滚动预测,只需保证ts对象的行数对应预测期数即可。
  • 分组结构的定义必须准确,否则gts无法正确识别聚合层级关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:19