如何从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列表列中,我们可以通过以下步骤提取并可视化:
- 展开模拟路径数据
使用unnest()将列表格式的模拟数据转换为整洁的表格形式:
library(tidyverse) # 提取并展开模拟路径 sim_paths <- fc %>% unnest(cols = .simulations) %>% rename(simulation = .rep, StateX_sim = StateX)
.rep是模拟样本的编号(1到1000),重命名为simulation更直观StateX_sim是对应周期的模拟预测值
- 筛选目标周期数据
以第20周期为例(原数据为1-10月,预测h=10,所以预测周期为11-20):
period_20_sim <- sim_paths %>% filter(Month == 20)
- 绘制预测值分布
可以用直方图+密度图展示分布特征:
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
相关产品推荐
相关产品推荐

