This function allows the user to easily build the (\(n_a \times n_b\)) cross-sectional (contemporaneous) matrix mapping the \(n_b\) bottom level series into the \(n_a\) higher level ones. (Experimental version)
Cmatrix(formula, data, sep = "_", sparse = TRUE, top_label = "Total")
Specification of the hierarchical structure: grouped hierarchies are specified
using ~ g1 * g2
and nested hierarchies are specified using ~ parent / child
.
Mixtures of the two formulations are also possible, like ~ g1 * (grandparent / parent / child)
.
A dataset in which each column contains the values of the variables in the formula and each row identifies a bottom level time series.
Character to separate the names of the aggregated series (default is "_"
).
Option to return sparse matrix (default is TRUE
).
Label of the top level variable (default is "Total"
).
A (na x nb
) matrix.
Other utilities:
FoReco2ts()
,
agg_ts()
,
arrange_hres()
,
commat()
,
ctf_tools()
,
hts_tools()
,
lcmat()
,
oct_bounds()
,
residuals_matrix()
,
score_index()
,
shrink_estim()
,
thf_tools()
## Balanced hierarchy
# T
# |--------|
# A B
# |---| |--|--|
# AA AB BA BB BC
# Names of the bottom level variables
data_bts <- data.frame(X1 = c("A", "A", "B", "B", "B"),
X2 = c("A", "B", "A", "B", "C"),
stringsAsFactors = FALSE)
# Cross-sectional aggregation matrix
C <- Cmatrix(~ X1 / X2, data_bts, sep = "")
#> ------ Cross-sectional information ------
#> Number of total time series (n): 8
#> Number of upper time series (na): 3
#> Number of bottom time series (nb): 5
#> Number of levels: 2
## Unbalanced hierarchy (1)
# T
# |--------|------|
# A B C
# |---| |--|--|
# AA AB BA BB BC
# Names of the bottom level variables
data_bts <- data.frame(X1 = c("A", "A", "B", "B", "B", "C"),
X2 = c("A", "B", "A", "B", "C", NA),
stringsAsFactors = FALSE)
# Cross-sectional aggregation matrix
C <- Cmatrix(~ X1 / X2, data_bts, sep = "")
#> ------ Cross-sectional information ------
#> Number of total time series (n): 9
#> Number of upper time series (na): 3
#> Number of bottom time series (nb): 6
#> Number of levels: 2
## Unbalanced hierarchy (2)
# T
# |---------|---------|
# A B C
# |---| |---| |---|
# AA AB BA BB CA CB
# |----| |----|
# AAA AAB BBA BBB
# Names of the bottom level variables
data_bts <- data.frame(X1 = c("A", "A", "A", "B", "B", "B", "C", "C"),
X2 = c("A", "A", "B", "A", "B", "B", "A", "B"),
X3 = c("A", "B", NA, NA, "A", "B", NA, NA),
stringsAsFactors = FALSE)
# Cross-sectional aggregation matrix
C <- Cmatrix(~ X1 / X2 / X3, data_bts, sep = "")
#> ------ Cross-sectional information ------
#> Number of total time series (n): 14
#> Number of upper time series (na): 6
#> Number of bottom time series (nb): 8
#> Number of levels: 3
## Grouped hierarchy
# C S
# |--------| |--------|
# A B M F
# |---| |---|
# AA AB BA BB
# Names of the bottom level variables
data_bts <- data.frame(X1 = c("A", "A", "B", "B", "A", "A", "B", "B"),
X2 = c("A", "B", "A", "B", "A", "B", "A", "B"),
Y1 = c("M", "M", "M", "M", "F", "F", "F", "F"),
stringsAsFactors = FALSE)
# Cross-sectional aggregation matrix
C <- Cmatrix(~ Y1 * (X1 / X2), data_bts, sep = "")
#> ------ Cross-sectional information ------
#> Number of total time series (n): 21
#> Number of upper time series (na): 13
#> Number of bottom time series (nb): 8
#> Number of levels: 5