使用fable包ARIMA模型bootstrap预测返回全NA的问题求助
问题解决:fable中ARIMA带外部回归项bootstrap预测返回NA
问题核心原因
出现全NA结果主要有两个关键问题:
- 原代码中
time变量的起始值start未定义,导致时间序列的索引结构异常,影响模型拟合与预测的残差重采样逻辑; - 测试数据集
test_scenarios中不需要提前提供y值(它是待预测的目标变量),多余的y列会干扰bootstrap过程中残差的重采样映射。
此外,当bootstrap=TRUE时,fable需要从模型拟合产生的残差中重采样生成预测分布,若残差无法被正确提取(比如模型拟合异常),也会返回NA。
修正后的可复现代码
library(fable) library(tsibble) library(lubridate) library(dplyr) # 正确定义时间起始点 key <- c('A', 'B', 'C') start <- ymd("2023-01-01") time <- seq(start, by = 1, length.out = 15) set.seed(123) # 构造训练数据集并转换为tsibble格式 targets <- expand.grid(time = time, key = key) %>% mutate(x = sort(runif(45, 0, 30)), y = sort(runif(45, 0, 30))) %>% as_tsibble(key = 'key', index = 'time') # 拟合带外部回归项的ARIMA模型 ARIMA_model <- targets %>% model(ARIMA(y ~ x)) # 构造测试数据集:仅保留时间、分组和预测变量x,无需y test_scenarios <- expand.grid(time = seq(start + days(16), by = 1, length.out = 15), key = key) %>% mutate(x = sort(runif(45, 0, 30))) %>% as_tsibble(key = 'key', index = 'time') # 执行bootstrap预测 bootstrap_forecast <- ARIMA_model %>% forecast(new_data = test_scenarios, bootstrap = TRUE) # 查看预测结果 head(bootstrap_forecast)
关键修正细节
- 为
start赋值具体日期,确保时间序列索引有效,符合tsibble的格式要求; - 移除测试数据中的
y列,避免干扰预测逻辑; - 确保训练数据的tsibble结构正确,分组(
key)和时间索引(time)无异常。
额外排查方向
如果仍出现NA,可检查以下内容:
- 模型拟合状态:用
report(ARIMA_model)查看每个分组的模型参数,确认无拟合失败的情况; - 残差完整性:用
augment(ARIMA_model)查看.resid列,确保没有大量NA; - 调整bootstrap样本量:通过
times参数指定重采样次数(如bootstrap = TRUE, times = 100)。
内容的提问来源于stack exchange,提问作者Freya Olsson
相关产品推荐
相关产品推荐

