Learn R Programming

hts (version 6.0.3)

MinT: Trace minimization for hierarchical or grouped time series

Description

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.

Usage

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()
)

Value

Return the reconciled gts object or forecasts at the bottom level.

Arguments

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 fcasts.

covariance

Type of the covariance matrix to be used. Shrinking towards a diagonal unequal variances ("shr") or sample covariance matrix ("sam").

nonnegative

Logical. Should the reconciled forecasts be non-negative?

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'.

Author

Shanika L Wickramasuriya

Details

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).

References

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), 804--819. https://robjhyndman.com/publications/mint/

Wickramasuriya, S. L., Turlach, B. A., & Hyndman, R. J. (to appear). Optimal non-negative 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, 16--32. https://robjhyndman.com/publications/hgts/

See Also

hts, gts, forecast.gts, combinef

Examples

Run this code

# 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)
}

Run the code above in your browser using DataLab