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

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)