ctlcc function

Level conditional coherent reconciliation for cross-temporal hierarchies

Level conditional coherent reconciliation for cross-temporal hierarchies

This function implements a forecast reconciliation procedure inspired by the original proposal by Hollyman et al. (2021) for cross-temporal hierarchies. Level conditional coherent reconciled forecasts are conditional on (i.e., constrained by) the base forecasts of a specific upper level in the hierarchy (exogenous constraints). It also allows handling the linear constraints linking the variables endogenously (Di Fonzo and Girolimetto, 2022). The function can calculate Combined Conditional Coherent (CCC) forecasts as simple averages of Level-Conditional Coherent (LCC) and bottom-up reconciled forecasts, with either endogenous or exogenous constraints.

ctlcc(base, agg_mat, nodes = "auto", agg_order, comb = "ols", res = NULL, CCC = TRUE, const = "exogenous", hfbts = NULL, tew = "sum", approach = "proj", nn = NULL, settings = NULL, ...)

Arguments

  • base: A (n×h(k+m)n \times h(k^\ast+m)) numeric matrix containing the base forecasts to be reconciled; nn is the total number of variables, mm is the max. order of temporal aggregation, kk^\ast is the sum of (a subset of) (p1p-1) factors of mm, excluding mm, and hh is the forecast horizon for the lowest frequency time series. The row identifies a time series, and the forecasts in each row are ordered from the lowest frequency (most temporally aggregated) to the highest frequency.

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

  • nodes: A (L×1L \times 1) numeric vector indicating the number of variables in each of the upper LL levels of the hierarchy. The default

    value is the string "auto" which calculates the number of variables in each level.

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

  • comb: A string specifying the reconciliation method. For a complete list, see ctcov .

  • res: A (n×N(k+m)n \times N(k^\ast+m)) optional numeric matrix containing the in-sample residuals at all the temporal frequencies ordered from the lowest frequency to the highest frequency (columns) for each variable (rows). This matrix is used to compute some covariance matrices.

  • CCC: A logical value indicating whether the Combined Conditional Coherent reconciled forecasts reconciliation should include bottom-up forecasts (TRUE, default), or not.

  • const: A string specifying the reconciliation constraints:

    • "exogenous" (default): Fixes the top level of each sub-hierarchy.
    • "endogenous": Coherently revises both the top and bottom levels.
  • hfbts: A (n×mhn \times mh) numeric matrix containing high frequency bottom base forecasts defined by the user. This parameter can be omitted if only base forecasts are used (see Di Fonzo and Girolimetto, 2024).

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

  • approach: A string specifying the approach used to compute the reconciled forecasts. Options include:

    • "proj" (default): Projection approach according to Byron (1978, 1979).

    • "strc": Structural approach as proposed by Hyndman et al. (2011).

    • "proj_osqp": Numerical solution using list("osqp")

      for projection approach.

    • "strc_osqp": Numerical solution using list("osqp")

      for structural approach.

  • nn: A string specifying the algorithm to compute non-negative reconciled forecasts:

    • "osqp": quadratic programming optimization (list("osqp") solver).
    • "sntz": heuristic "set-negative-to-zero" (Di Fonzo and Girolimetto, 2023).
  • settings: An object of class osqpSettings specifying settings for the list("osqp") solver. For details, refer to the c("list("osqp")", " documentation") (Stellato et al., 2020).

  • ...: Arguments passed on to ctcov

    • mse: If TRUE (default) the residuals used to compute the covariance matrix are not mean-corrected.
    • shrink_fun: Shrinkage function of the covariance matrix, shrink_estim (default).

Returns

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

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) # (7 x 7) base forecasts matrix (simulated), agg_order = 4 base <- rbind(rnorm(7, rep(c(40, 20, 10), c(1, 2, 4))), rnorm(7, rep(c(20, 10, 5), c(1, 2, 4))), rnorm(7, rep(c(20, 10, 5), c(1, 2, 4))), rnorm(7, rep(c(10, 5, 2.5), c(1, 2, 4))), rnorm(7, rep(c(10, 5, 2.5), c(1, 2, 4))), rnorm(7, rep(c(10, 5, 2.5), c(1, 2, 4))), rnorm(7, rep(c(10, 5, 2.5), c(1, 2, 4)))) # (7 x 70) in-sample residuals matrix (simulated) res <- matrix(rnorm(70*7), nrow = 7) # (4 x 4) Naive high frequency bottom base forecasts vector: # all forecasts are set equal to 2.5 naive <- matrix(2.5, 4, 4) ## EXOGENOUS CONSTRAINTS (Hollyman et al., 2021) # Level Conditional Coherent (LCC) reconciled forecasts exo_LC <- ctlcc(base = base, agg_mat = A, agg_order = 4, comb = "wlsh", nn = "osqp", hfbts = naive, res = res, nodes = "auto", CCC = FALSE) # Combined Conditional Coherent (CCC) reconciled forecasts exo_CCC <- ctlcc(base = base, agg_mat = A, agg_order = 4, comb = "wlsh", hfbts = naive, res = res, nodes = "auto", CCC = TRUE) # Results detailed by level: info_exo <- recoinfo(exo_CCC, verbose = FALSE) # info_exo$lcc ## ENDOGENOUS CONSTRAINTS (Di Fonzo and Girolimetto, 2024) # Level Conditional Coherent (LCC) reconciled forecasts endo_LC <- ctlcc(base = base, agg_mat = A, agg_order = 4, comb = "wlsh", res = res, nodes = "auto", CCC = FALSE, const = "endogenous") # Combined Conditional Coherent (CCC) reconciled forecasts endo_CCC <- ctlcc(base = base, agg_mat = A, agg_order = 4, comb = "wlsh", res = res, nodes = "auto", CCC = TRUE, const = "endogenous") # Results detailed by level: info_endo <- recoinfo(endo_CCC, verbose = FALSE) # info_endo$lcc

References

Byron, R.P. (1978), The estimation of large social account matrices, Journal of the Royal Statistical Society, Series A, 141, 3, 359-367. tools:::Rd_expr_doi("10.2307/2344807")

Byron, R.P. (1979), Corrigenda: The estimation of large social account matrices, Journal of the Royal Statistical Society, Series A, 142(3), 405. tools:::Rd_expr_doi("10.2307/2982515")

Di Fonzo, T. and Girolimetto, D. (2024), Forecast combination-based forecast reconciliation: Insights and extensions, International Journal of Forecasting, 40(2), 490–514. tools:::Rd_expr_doi("10.1016/j.ijforecast.2022.07.001")

Di Fonzo, T. and Girolimetto, D. (2023b) Spatio-temporal reconciliation of solar forecasts. Solar Energy 251, 13–29. tools:::Rd_expr_doi("10.1016/j.solener.2023.01.003")

Hyndman, R.J., Ahmed, R.A., Athanasopoulos, G. and Shang, H.L. (2011), Optimal combination forecasts for hierarchical time series, Computational Statistics & Data Analysis, 55, 9, 2579-2589. tools:::Rd_expr_doi("10.1016/j.csda.2011.03.006")

Hollyman, R., Petropoulos, F. and Tipping, M.E. (2021), Understanding forecast reconciliation. European Journal of Operational Research, 294, 149–160. tools:::Rd_expr_doi("10.1016/j.ejor.2021.01.017")

Stellato, B., Banjac, G., Goulart, P., Bemporad, A. and Boyd, S. (2020), OSQP: An Operator Splitting solver for Quadratic Programs, Mathematical Programming Computation, 12, 4, 637-672. tools:::Rd_expr_doi("10.1007/s12532-020-00179-2")

See Also

Level conditional coherent reconciliation: cslcc(), telcc()

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