我之前曾要求this question尝试使用hts
套件预测比例预测重组。那里的解决方案适用于多级层次结构,但是当我尝试在两级层次结构上使用该解决方案时,我发现了一个错误。
library(hts)
# Create the hierarchy
newhts <- hts(htseg1$bts, list(ncol(htseg1$bts)))
# forecast creation adapted from the `combinef()` example
h <- 12
ally <- aggts(newhts)
allf <- matrix(NA, nrow = h, ncol = ncol(ally))
for(i in 1:ncol(ally))
allf[,i] <- forecast(auto.arima(ally[,i]), h = h, PI = FALSE)$mean
allf <- ts(allf, start = 51)
# Earo Wang's solution to my previous question
hts:::TdFp(allf, nodes = htseg1$nodes)
* .default(fcasts [,1L],prop)出错:时间序列/向量长度不匹配
问题似乎出现了,因为两级层次结构会跳过条件if
的最后一个if (l.levels > 2L)
条件。此条件乘法的最后一个陈述包括prop
乘以时间序列flist[[k + 1L]]
的片段,它将prop
转换为时间序列矩阵。如果跳过此语句,prop
仍然是一个常规矩阵,当时间序列向量fcasts[, 1L]
乘以矩阵prop
时会导致错误。
我理解TdFp
是一个非导出函数,因此可能不像包中的其他函数那样健壮,但有没有解决这个问题的方法?由于这是一个相对简单的案例,我可以自己编写解决方案,但由于hts::forecast.hts()
可以处理method = "tdfp"
的两个级别层次结构,我认为可能有一个很好的清洁解决方案。