Cross temporal reconciled forecasts for all series at any temporal aggregation level are computed by appropriate summation of the high-frequency bottom base forecasts $$\widehat{\mathbf{b}}_i, i = 1,...,n_b$$, according to a bottom-up procedure like what is currently done in both the cross-sectional and temporal frameworks.

ctbu(Bmat, m, C)

## Arguments

Bmat

($$n_b \times h m$$) matrix of high-frequency bottom time series base forecasts ($$\widehat{\mathbf{B}}^{}$$). h is the forecast horizon for the lowest frequency (most temporally aggregated) time series.

m

Highest available sampling frequency per seasonal cycle (max. order of temporal aggregation, $$m$$), or a subset of the $$p$$ factors of $$m$$.

C

($$n_a \times n_b$$) cross-sectional (contemporaneous) matrix mapping the bottom level series into the higher level ones.

## Value

The function returns a ($$n \times h (k^\ast + m)$$) matrix of bottom-up cross-temporally reconciled forecasts, $$\ddot{\mathbf{Y}}$$.

## Details

Denoting by $$\ddot{\mathbf{Y}}$$ the ($$n \times h (k^\ast + m)$$) matrix containing the bottom-up cross temporal reconciled forecasts, it is: $\ddot{\mathbf{Y}} = \left[\begin{array}{cc} \mathbf{C}\widehat{\mathbf{B}}^{}\mathbf{K}_1' & \mathbf{C}\widehat{\mathbf{B}}^{} \cr \widehat{\mathbf{B}}^{} \mathbf{K}_1' & \widehat{\mathbf{B}}^{} \end{array}\right],$ where $$\mathbf{C}$$ is the cross-sectional (contemporaneous) aggregation matrix, $$\mathbf{K}_1$$ is the temporal aggregation matrix with $$h=1$$, and $$\widehat{\mathbf{B}}^{}$$ is the matrix containing the high-frequency bottom time series base forecasts. This expression is equivalent to $$\mbox{vec}(\ddot{\mathbf{Y}}') = \widetilde{\mathbf{S}} \mbox{vec}(\widehat{\mathbf{Y}}')$$ for $$h = 1$$, where $$\widetilde{\mathbf{S}}$$ is the cross-temporal summing matrix for $$\mbox{vec}(\widehat{\mathbf{Y}}')$$, and $$\widehat{\mathbf{Y}}$$ is the ($$n \times h (k^\ast + m)$$) matrix containing all the base forecasts at any temporal aggregation order.

Other reconciliation procedures: cstrec(), htsrec(), iterec(), lccrec(), octrec(), tcsrec(), tdrec(), thfrec()
data(FoReco_data)
id <- which(simplify2array(strsplit(colnames(FoReco_data$base), split = "_"))[1, ] == "k1") hfbts <- FoReco_data$base[-c(1:3), id]
obj <- ctbu(Bmat = hfbts, m = 12, C = FoReco_data$C) rownames(obj) <- rownames(FoReco_data$base)