将不同的预测方法传递给 R 中的分层时间序列预测?

Passing different forecasting method to hierarchical time series forecast in R?

我有一个分层时间序列,其底层序列都表现出间歇性需求。使用 Hyndman 的 HTS 包在层次结构中进行最佳组合似乎是有利的。使用 Kourentzes 的 MAPA 包对间歇性需求进行多重聚合预测似乎也很有利。本质上,我想做类似的事情:

forecast(my_hts, method='comb', fmethod='MAPA')

但是,我不清楚是否/如何将两者结合起来,因为 forecast.gts() 只接受 fmethod=c("ets", "arima", "rw").

有没有一种巧妙的方法可以将不同的预测方法传递给 forecast.gts() 而无需撕毁代码?

举例说明我的意思:

library(hts)
library(MAPA)
set.seed(1)

#note intermittent demand of bottom level time series
x <- ts(rpois(365, lambda=0.05), frequency=365, start=2014)
y <- ts(rpois(365, lambda=0.07), frequency=365, start=2014)

#it's easy to make a MAPA forecast for the top-level time series
#but this isn't an optimal hierarchical forecast
mapasimple(x+y)

#it's also easy to make this a HTS and make an optimal hierarchical forecast
#but now I cannot use MAPA
z <- hts(data.frame(x,y)))
z_arima <- forecast(z, fmethod="arima")
z_rw <- forecast(z, fmethod="rw")
z_ets <- forecast(z, fmethod="ets")

#z_MAPA <- ?

"Is there a clever way to pass different forecasting methods to forecast.gts() without having to tear up the code?" - 几乎可以肯定不是。 forecast.gts() 不允许您按照 family 参数到 glm() 和类似的方式插入预测方法。

运行 MAPA 预测然后自己重​​新实施最佳组合可能是最简单的方法。这真的不是那么难,在 hts 包出现之前我自己做了几次。查看hts包中的引用;其中大部分都可以作为预印本在 Rob Hyndman 的网站上找到。

将最优组合方法与间歇性需求预测相结合的一个关键问题是,最优组合很可能会产生 预测。在此处使用的 GLS 意义上,这些可能是 "optimal",但它们对需求没有意义。我的解决方案是在 mgcv 包中使用 pcls() 进行实际调节,以将解决方案(即底层调节预测)限制为非负值。

我发帖是因为在仔细查看 hts 文档(在此处插入当之无愧的 RTFM)后,我想我找到了使用 hts 中的 combinef() 函数的解决方法,可以使用以最佳方式组合 forecast.gts() 环境之外的预测。在接受答案之前,我会暂时搁置它,以便其他人可以告诉我我是否错了。

fh <- 8

library(hts)
library(MAPA)
set.seed(1)

x <- ts(rpois(365, lambda=0.05), frequency=365, start=2014)
y <- ts(rpois(365, lambda=0.07), frequency=365, start=2014)

my_hts <- hts(data.frame(x,y))

ally <- aggts(my_hts)

allf <- matrix(NA, nrow = fh, ncol = ncol(ally))

for(i in 1:ncol(ally)){
    allf[,i] <- mapafor(ally[,i], 
                        mapaest(ally[,i], outplot=0), 
                        fh = fh, 
                        outplot=0)$outfor
}

allf <- ts(allf)

y.f <- combinef(allf, my_hts$nodes, weights=NULL, keep="bottom")

#here's what the non-reconciled, bottom-level MAPA forecasts look like
print(allf[1,1:2])

 Series 1   Series 2
1 0.1343304 0.06032574

#here's what the reconciled MAPA bottom-level forecasts look like
#notice that they're different
print(y.f[1,])

[1] 0.06030926 0.07402938

我在过去使用 MAPA 预测和 combinef 的小实验中成功 运行。斯蒂芬关于负面预测的观点仍然是一个问题。您可能有兴趣查看 tsintermittent 包中的 iMAPA,它专门设计用于生成间歇性需求时间序列的预测。与实施 Croston 方法的 MAPA 相比,SBA 和指数平滑可在各种时间聚合级别中进行选择。

我非常有兴趣了解更多关于您的结果。也许 E. Spiliotis 等人在去年的 ISF 中提出了一项相关研究。 Examining the effect of temporal aggregation on forecasting accuracy for hierarchical energy consumption time series