csmo: Cross-sectional middle-out reconciliation

View source: R/middleout.R

csmoR Documentation

Cross-sectional middle-out reconciliation

Description

The middle-out forecast reconciliation (Athanasopoulos et al., 2009) combines top-down (cstd) and bottom-up (csbu) for genuine hierarchical/grouped time series. Given the base forecasts of variables at an intermediate level l, it performs

  • a top-down approach for the levels <l;

  • a bottom-up approach for the levels >l.

Usage

csmo(base, agg_mat, id_rows = 1, weights, normalize = TRUE)

Arguments

base

A (h \times n_l) numeric matrix containing the l-level base forecast; n_l is the number of variables at level l, and h is the forecast horizon.

agg_mat

A (n_a \times n_b) numeric matrix representing the cross-sectional aggregation matrix. It maps the n_b bottom-level (free) variables into the n_a upper (constrained) variables.

id_rows

A numeric vector indicating the l-level rows of agg_mat.

weights

A (h \times n_b) numeric matrix containing the proportions for the bottom time series; h is the forecast horizon, and n_b is the total number of bottom variables.

normalize

If TRUE (default), the weights will sum to 1.

Value

A (h \times n) numeric matrix of cross-sectional reconciled forecasts.

References

Athanasopoulos, G., Ahmed, R. A. and Hyndman, R.J. (2009) Hierarchical forecasts for Australian domestic tourism. International Journal of Forecasting 25(1), 146–166. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/j.ijforecast.2008.07.004")}

See Also

Middle-out reconciliation: ctmo(), temo()

Cross-sectional framework: csboot(), csbu(), cscov(), cslcc(), csrec(), cstd(), cstools()

Examples

set.seed(123)
# Aggregation matrix for Z = X + Y, X = XX + XY and Y = YX + YY
A <- matrix(c(1,1,1,1,1,1,0,0,0,0,1,1), 3, byrow = TRUE)
# (3 x 2) top base forecasts vector (simulated), forecast horizon = 3
baseL2 <- matrix(rnorm(2*3, 5), 3, 2)
# Same weights for different forecast horizons
fix_weights <- runif(4)
reco <- csmo(base = baseL2, agg_mat = A, id_rows = 2:3, weights = fix_weights)

# Different weights for different forecast horizons
h_weights <- matrix(runif(4*3), 3, 4)
recoh <- csmo(base = baseL2, agg_mat = A, id_rows = 2:3, weights = h_weights)


FoReco documentation built on Sept. 14, 2024, 9:07 a.m.