cttd function

Cross-temporal top-down reconciliation

Cross-temporal top-down reconciliation

Top-down forecast reconciliation for cross-temporal hierarchical/grouped time series, where the forecast of a `Total' (top-level series, expected to be positive) is disaggregated according to a proportional scheme (weights). Besides fulfilling any aggregation constraint, the top-down reconciled forecasts should respect two main properties:

  • the top-level value remains unchanged;
  • all the bottom time series reconciled forecasts are non-negative.
cttd(base, agg_mat, agg_order, weights, tew = "sum", normalize = TRUE)

Arguments

  • base: A (hm×1hm \times 1) numeric vector containing top- and mm temporal aggregated level base forecasts; mm is the max aggregation order, and hh is the forecast horizon for the lowest frequency time series.
  • agg_mat: A (na×nbn_a \times n_b) numeric matrix representing the cross-sectional aggregation matrix. It maps the nbn_b bottom-level (free) variables into the nan_a upper (constrained) variables.
  • agg_order: Highest available sampling frequency per seasonal cycle (max. order of temporal aggregation, mm), or a vector representing a subset of pp factors of mm.
  • weights: A (nb×hmn_b \times hm) numeric matrix containing the proportions for each high-frequency bottom time series; nbn_b is the total number of high-frequency bottom variables, mm is the max aggregation order, and hh is the forecast horizon for the lowest frequency time series.
  • tew: A string specifying the type of temporal aggregation. Options include: "sum" (simple summation, default), "avg" (average), "first" (first value of the period), and "last" (last value of the period).
  • normalize: If TRUE (default), the weights will sum to 1.

Returns

A (n×h(k+m)n \times h(k^\ast+m)) numeric matrix of cross-temporal reconciled forecasts.

Examples

set.seed(123) # (3 x 1) top base forecasts vector (simulated), forecast horizon = 3 topf <- rnorm(3, 10) A <- t(c(1,1)) # Aggregation matrix for Z = X + Y # Same weights for different forecast horizons, agg_order = 4 fix_weights <- matrix(runif(4*2), 2, 4) reco <- cttd(base = topf, agg_mat = A, agg_order = 4, weights = fix_weights) # Different weights for different forecast horizons h_weights <- matrix(runif(4*2*3), 2, 3*4) recoh <- cttd(base = topf, agg_mat = A, agg_order = 4, weights = h_weights)

See Also

Top-down reconciliation: cstd(), tetd()

Cross-temporal framework: ctboot(), ctbu(), ctcov(), ctlcc(), ctmo(), ctrec(), cttools(), iterec(), tcsrec()