Using the method of Wickramasuriya et al. (2019), this function combines the
forecasts at all levels of a hierarchical or grouped time series. The
forecast.gts
calls this function when the MinT
method
is selected.
MinT( fcasts, nodes = NULL, groups = NULL, residual, covariance = c("shr", "sam"), nonnegative = FALSE, algorithms = c("lu", "cg", "chol"), keep = c("gts", "all", "bottom"), parallel = FALSE, num.cores = 2, control.nn = list() )
fcasts  Matrix of forecasts for all levels of a hierarchical or grouped time series. Each row represents one forecast horizon and each column represents one time series of aggregated or disaggregated forecasts. 

nodes  If the object class is hts, a list contains the number of child nodes referring to hts. 
groups  If the object is gts, a gmatrix is required, which is the same as groups in the function gts. 
residual  Matrix of insample residuals for all the aggregated and
disaggregated time series. The columns must be in the same order as

covariance  Type of the covariance matrix to be used. Shrinking
towards a diagonal unequal variances ( 
nonnegative  Logical. Should the reconciled forecasts be nonnegative? 
algorithms  Algorithm used to compute inverse of the matrices. 
keep  Return a gts object or the reconciled forecasts at the bottom level. 
parallel  Logical. Import parallel package to allow parallel processing. 
num.cores  Numeric. Specify how many cores are going to be used. 
control.nn  A list of control parameters to be passed on to the block principal pivoting algorithm. See 'Details'. 
Return the reconciled gts
object or forecasts at the bottom
level.
The control.nn
argument is a list that can supply any of the following components:
ptype
Permutation method to be used: "fixed"
or "random"
. Defaults to "fixed"
.
par
The number of full exchange rules that may be tried. Defaults to 10.
gtol
The tolerance of the convergence criteria. Defaults to sqrt(.Machine$double.eps)
.
Wickramasuriya, S. L., Athanasopoulos, G., & Hyndman, R. J. (2019). Optimal forecast reconciliation for hierarchical and grouped time series through trace minimization. Journal of the American Statistical Association, 114(526), 804819. https://robjhyndman.com/workingpapers/mint/
Wickramasuriya, S. L., Turlach, B. A., & Hyndman, R. J. (to appear). Optimal nonnegative forecast reconciliation. Statistics and Computing. https://robjhyndman.com/publications/nnmint/
Hyndman, R. J., Lee, A., & Wang, E. (2016). Fast computation of reconciled forecasts for hierarchical and grouped time series. Computational Statistics and Data Analysis, 97, 1632. https://robjhyndman.com/publications/hgts/
Shanika L Wickramasuriya
# hts example if (FALSE) { h < 12 ally < aggts(htseg1) n < nrow(ally) p < ncol(ally) allf < matrix(NA, nrow = h, ncol = p) res < matrix(NA, nrow = n, ncol = p) for(i in 1:p) { fit < auto.arima(ally[, i]) allf[, i] < forecast(fit, h = h)$mean res[, i] < na.omit(ally[, i]  fitted(fit)) } allf < ts(allf, start = 51) y.f < MinT(allf, get_nodes(htseg1), residual = res, covariance = "shr", keep = "gts", algorithms = "lu") plot(y.f) y.f_cg < MinT(allf, get_nodes(htseg1), residual = res, covariance = "shr", keep = "all", algorithms = "cg") } if (FALSE) { h < 12 ally < abs(aggts(htseg2)) allf < matrix(NA, nrow = h, ncol = ncol(ally)) res < matrix(NA, nrow = nrow(ally), ncol = ncol(ally)) for(i in 1:ncol(ally)) { fit < auto.arima(ally[, i], lambda = 0, biasadj = TRUE) allf[,i] < forecast(fit, h = h)$mean res[,i] < na.omit(ally[, i]  fitted(fit)) } b.f < MinT(allf, get_nodes(htseg2), residual = res, covariance = "shr", keep = "bottom", algorithms = "lu") b.nnf < MinT(allf, get_nodes(htseg2), residual = res, covariance = "shr", keep = "bottom", algorithms = "lu", nonnegative = TRUE, parallel = TRUE) } # gts example if (FALSE) { abc < ts(5 + matrix(sort(rnorm(200)), ncol = 4, nrow = 50)) g < rbind(c(1,1,2,2), c(1,2,1,2)) y < gts(abc, groups = g) h < 12 ally < aggts(y) n < nrow(ally) p < ncol(ally) allf < matrix(NA,nrow = h,ncol = ncol(ally)) res < matrix(NA, nrow = n, ncol = p) for(i in 1:p) { fit < auto.arima(ally[, i]) allf[, i] < forecast(fit, h = h)$mean res[, i] < na.omit(ally[, i]  fitted(fit)) } allf < ts(allf, start = 51) y.f < MinT(allf, groups = get_groups(y), residual = res, covariance = "shr", keep = "gts", algorithms = "lu") plot(y.f) }