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

如何从fable包的forecast对象中提取模拟路径数据?

从fable对象提取模拟预测路径并绘制分布

我使用fable包的forecast()函数生成1000条模拟样本路径,得到未来10个周期、置信水平为80%和95%的预测结果,对应的fable对象已生成。现在需要从该fable对象中提取模拟路径,绘制例如第20周期的预测结果分布。

使用的代码如下:

library(feasts)
library(fable)
library(fabletools)
library(ggplot2)
library(tsibble)

tmp <- data.frame(
  Month = c(1,2,3,4,5,6,7,8,9,10),
  StateX = c(1527,1297,933,832,701,488,424,353,302,280)
  ) %>%
  as_tsibble(index = Month)

fit <-  tmp %>% model(NAIVE(StateX))

fc <- fit %>% forecast(h = 10, bootstrap = TRUE, times = 1000)

autoplot(fc, tmp) +
  labs(title="Transitions to Dead State X", y="Units" )

解决方案

fable对象中的模拟路径存储在.simulations列表列中,我们可以通过以下步骤提取并可视化:

  1. 展开模拟路径数据
    使用unnest()将列表格式的模拟数据转换为整洁的表格形式:
library(tidyverse)

# 提取并展开模拟路径
sim_paths <- fc %>%
  unnest(cols = .simulations) %>%
  rename(simulation = .rep, StateX_sim = StateX)
  • .rep是模拟样本的编号(1到1000),重命名为simulation更直观
  • StateX_sim是对应周期的模拟预测值
  1. 筛选目标周期数据
    以第20周期为例(原数据为1-10月,预测h=10,所以预测周期为11-20):
period_20_sim <- sim_paths %>%
  filter(Month == 20)
  1. 绘制预测值分布
    可以用直方图+密度图展示分布特征:
ggplot(period_20_sim, aes(x = StateX_sim)) +
  geom_histogram(bins = 30, fill = "#619CFF", alpha = 0.7) +
  geom_density(color = "#F8766D", size = 1) +
  labs(title = "第20周期StateX预测值分布",
       x = "预测值",
       y = "频数/密度") +
  theme_minimal()

拓展:查看所有模拟路径走势

如果需要展示所有1000条模拟路径的整体趋势,可以运行以下代码:

ggplot(sim_paths, aes(x = Month, y = StateX_sim, group = simulation)) +
  geom_line(alpha = 0.1, color = "#619CFF") +
  # 叠加原始数据走势
  geom_line(data = tmp, aes(x = Month, y = StateX), color = "#F8766D", size = 1.2) +
  labs(title = "StateX所有模拟预测路径",
       x = "月份",
       y = "Units") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Village.Idyot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:50:16