Skip to contents

This function computes the cross-sectional bottom-up reconciled forecasts (Dunn et al., 1976) for all series by appropriate summation of the bottom base forecasts \(\widehat{\mathbf{b}}\): $$\widetilde{\mathbf{y}} = \mathbf{S}_{cs}\widehat{\mathbf{b}},$$ where \(\mathbf{S}_{cs}\) is the cross-sectional structural matrix.

Usage

csbu(base, agg_mat, sntz = FALSE)

Arguments

base

A (\(h \times n_b\)) numeric matrix or multivariate time series (mts class) containing bottom base forecasts; \(h\) is the forecast horizon, and \(n_b\) is the total number of bottom variables.

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.

sntz

If TRUE, the negative base forecasts are set to zero before applying bottom-up.

Value

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

References

Dunn, D. M., Williams, W. H. and Dechaine, T. L. (1976), Aggregate versus subaggregate models in local area forecasting, Journal of the American Statistical Association 71(353), 68–71. doi:10.1080/01621459.1976.10481478

See also

Bottom-up reconciliation: ctbu(), tebu()

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

Examples

set.seed(123)
# (3 x 2) bottom base forecasts matrix (simulated), Z = X + Y
bts <- matrix(rnorm(6, mean = c(10, 10)), 3, byrow = TRUE)

# Aggregation matrix for Z = X + Y
A <- t(c(1,1))
reco <- csbu(base = bts, agg_mat = A)

# Non negative reconciliation
bts[2,2] <- -bts[2,2] # Making negative one of the base forecasts for variable Y
nnreco <- csbu(base = bts, agg_mat = A, sntz = TRUE)