R 如何在使用hts::combinef()协调自定义预测时使用加权最后平方?
我正在尝试使用hts包中的combinef函数协调自定义预测。 我想比较重组的自动化方法和重组的自定义预测 () combinef(forecast.gts)的自动coutertpart非常用户友好。 如果需要自底向上预测,则可以设置method=“comb”。 如果需要协调,则您可以通过将参数权重设置为权重=c(“wls”、“ols”、“N系列”),在加权最后一个正方形、普通最后一个正方形和结构缩放之间进行选择 对于combinef(),权重参数的默认值是普通的最后平方,因此这种方法可以很容易地实现。 在另一个线程中,已经解释了如何应用自底向上方法() 我现在也对使用“wls”以及als“N系列”感兴趣。 有没有一个简单的方法来实现这一点 编辑 我深入研究了forecast.gts()和combinef()函数的原始代码。我最终得到了以下自定义代码:R 如何在使用hts::combinef()协调自定义预测时使用加权最后平方?,r,time-series,hierarchy,forecast,R,Time Series,Hierarchy,Forecast,我正在尝试使用hts包中的combinef函数协调自定义预测。 我想比较重组的自动化方法和重组的自定义预测 () combinef(forecast.gts)的自动coutertpart非常用户友好。 如果需要自底向上预测,则可以设置method=“comb”。 如果需要协调,则您可以通过将参数权重设置为权重=c(“wls”、“ols”、“N系列”),在加权最后一个正方形、普通最后一个正方形和结构缩放之间进行选择 对于combinef(),权重参数的默认值是普通的最后平方,因此这种方法可以很容易
library(hts)
library(rlist)
#forecast grouped time series by custom function
ally_df <- aggts(htseg1) %>% as.data.frame
forecast_list <- apply(ally_df, 2, function(x){x %>% auto.arima %>% forecast(h = 12)})
ally_fitted <- lapply(forecast_list, function(x){x$fitted %>% as.data.frame}) %>% list.cbind
colnames(ally_fitted) <- colnames(ally)
ally_forecast <- lapply(forecast_list, function(x){x$mean %>% as.data.frame}) %>% list.cbind
colnames(ally_forecast) <- colnames(ally)
#create weights for reconciliation
recomb_approaches <- c("wls", "ols", "nseries", "bu")
recomb_approach <- recomb_approaches[1]
if(recomb_approach == "bu"){
weights <- c(rep(0, ncol(ally_df)-ncol(htseg1$bts)), rep(1, ncol(htseg1$bts)))
}else if(recomb_approach == "ols"){
weights <- NULL
}else if(recomb_approach == "wls"){
tmp.resid <- ally_df - ally_fitted
weights <- 1/colMeans(tmp.resid^2, na.rm = TRUE)
}else if(recomb_approach == "nseries"){
# A function to calculate No. of groups at each level
Mlevel <- function(xgroup) {
m <- apply(xgroup, 1, function(x) length(unique(x)))
return(m)
}
# A function to get the inverse of row sums of S matrix
InvS4g <- function(xgroup) {
mlevel <- Mlevel(xgroup)
len <- length(mlevel)
repcount <- mlevel[len]/mlevel
inv.s <- 1/unlist(mapply(rep, repcount, mlevel, SIMPLIFY = FALSE))
return(inv.s)
}
weights <- InvS4g(htseg1$groups)
}
ally_forecast_recombined_df <- combinef(ally_forecast
, nodes = get_nodes(htseg1)
, weights = weights
, algorithms = "lu"
, keep = "bottom"
, parallel = TRUE
, num.cores = cores
)
库(hts)
图书馆(rlist)
#按自定义函数预测分组的时间序列
ally_df%as.data.frame
预测列表%auto.arima%>%forecast(h=12)})
ally_已安装%as.data.frame})%%>%list.cbind
colnames(ally_fitted)%list.cbind
colnames(ally_forecast)WLS forecast对账使用与剩余方差相等的一步预测方差。下面是一个小示例中的一些代码
库(hts)
h感谢您提供的工作示例。我深入研究了您的forecast.gts代码,并使用部分代码为combinef()函数生成权重(选中编辑)。这会按它应该的方式工作吗?