如何调整Fable预测的.mean值并使autoplot显示修改结果?
解决Fable预测对象修改后autoplot不生效的问题
问题核心:fable的autoplot()读取的是预测分布列(比如你的Turnover列),而非单独的.mean列。直接修改.mean只是更新了衍生计算值,并没有改变底层的分布对象,所以绘图不会变化。
解决方案1:更新预测分布列的参数
针对不同的分布类型(比如正态分布、泊松分布等),直接修改分布对象的参数,同步更新.mean列:
以正态分布为例,自定义lift_fc函数:
library(fpp3) library(distributional) lift_fc <- function(fable_obj, lift) { fable_obj %>% mutate( # 更新Turnover分布的均值为原均值乘以lift,保留原标准差 Turnover = dist_normal(mean = .mean * lift, sd = sqrt(Turnover$variance)), # 同步更新.mean列 .mean = .mean * lift ) }
如果你的预测分布是其他类型(比如dist_poisson),需要对应调整分布构造函数的参数,比如泊松分布只需修改lambda参数:
Turnover = dist_poisson(lambda = .mean * lift)
解决方案2:将分布转为点预测(丢失区间信息)
如果不需要预测区间,只想基于修改后的.mean绘图,可以把分布列替换为点预测类型:
lift_fc <- function(fable_obj, lift) { fable_obj %>% mutate( .mean = .mean * lift, # 将分布列转为点预测 Turnover = as_distribution(.mean, dist_type = "point") ) }
验证效果
修改后调用autoplot(level = NULL)就能看到翻倍后的预测曲线了:
cafe_fc %>% lift_fc(lift = 2) %>% autoplot(level = NULL)
内容的提问来源于stack exchange,提问作者dolphingang
相关产品推荐
相关产品推荐

