reconc_BUIS {bayesRecon}  R Documentation 
BUIS for Probabilistic Reconciliation of forecasts via conditioning
Description
Uses the BottomUp Importance Sampling algorithm to draw samples from the reconciled forecast distribution, which is obtained via conditioning.
Usage
reconc_BUIS(
S,
base_forecasts,
in_type,
distr,
num_samples = 20000,
suppress_warnings = FALSE,
seed = NULL
)
Arguments
S 
Summing matrix (n x n_bottom). 
base_forecasts 
A list containing the base_forecasts, see details. 
in_type 
A string or a list of length n. If it is a list the ith element is a string with two possible values:
If it 
distr 
A string or a list of length n describing the type of base forecasts. If it is a list the ith element is a string with two possible values:
If 
num_samples 
Number of samples drawn from the reconciled distribution. 
suppress_warnings 
Logical. If 
seed 
Seed for reproducibility. 
Details
The parameter base_forecast
is a list containing n elements where the ith element depends on
the values of in_type[[i]]
and distr[[i]]
.
If in_type[[i]]
='samples', then base_forecast[[i]]
is a vector containing samples from the base forecast distribution.
If in_type[[i]]
='params', then base_forecast[[i]]
is a vector containing the estimated:
mean and sd for the Gaussian base forecast if
distr[[i]]
='gaussian', see Normal;lambda for the Poisson base forecast if
distr[[i]]
='poisson', see Poisson;mu and size for the negative binomial base forecast if
distr[[i]]
='nbinom', see NegBinomial.
See the description of the parameters in_type
and distr
for more details.
The order of the base_forecast
list is given by the order of the time series in the summing matrix.
Warnings are triggered from the Importance Sampling step if:
weights are all zeros, then the upper is ignored during reconciliation;
the effective sample size is < 200;
the effective sample size is < 1% of the sample size (
num_samples
ifin_type
is 'params' or the size of the base forecast if ifin_type
is 'samples').
Note that warnings are an indication that the base forecasts might have issues. Please check the base forecasts in case of warnings.
Value
A list containing the reconciled forecasts. The list has the following named elements:

bottom_reconciled_samples
: a matrix (n_bottom xnum_samples
) containing the reconciled samples for the bottom time series; 
upper_reconciled_samples
: a matrix (n_upper xnum_samples
) containing the reconciled samples for the upper time series; 
reconciled_samples
: a matrix (n xnum_samples
) containing the reconciled samples for all time series.
References
Zambon, L., Azzimonti, D. & Corani, G. (2024). Efficient probabilistic reconciliation of forecasts for realvalued and count time series. doi:10.1007/s1122202310343y.
See Also
Examples
library(bayesRecon)
# Create a minimal hierarchy with 2 bottom and 1 upper variable
rec_mat < get_reconc_matrices(agg_levels=c(1,2), h=2)
S < rec_mat$S
#1) Gaussian base forecasts
#Set the parameters of the Gaussian base forecast distributions
mu1 < 2
mu2 < 4
muY < 9
mus < c(muY,mu1,mu2)
sigma1 < 2
sigma2 < 2
sigmaY < 3
sigmas < c(sigmaY,sigma1,sigma2)
base_forecasts = list()
for (i in 1:nrow(S)) {
base_forecasts[[i]] = c(mus[[i]], sigmas[[i]])
}
#Sample from the reconciled forecast distribution using the BUIS algorithm
buis < reconc_BUIS(S, base_forecasts, in_type="params",
distr="gaussian", num_samples=100000, seed=42)
samples_buis < buis$reconciled_samples
#In the Gaussian case, the reconciled distribution is still Gaussian and can be
#computed in closed form
Sigma < diag(sigmas^2) #transform into covariance matrix
analytic_rec < reconc_gaussian(S, base_forecasts.mu = mus,
base_forecasts.Sigma = Sigma)
#Compare the reconciled means obtained analytically and via BUIS
print(c(S %*% analytic_rec$bottom_reconciled_mean))
print(rowMeans(samples_buis))
#2) Poisson base forecasts
#Set the parameters of the Poisson base forecast distributions
lambda1 < 2
lambda2 < 4
lambdaY < 9
lambdas < c(lambdaY,lambda1,lambda2)
base_forecasts < list()
for (i in 1:nrow(S)) {
base_forecasts[[i]] = lambdas[i]
}
#Sample from the reconciled forecast distribution using the BUIS algorithm
buis < reconc_BUIS(S, base_forecasts, in_type="params",
distr="poisson", num_samples=100000, seed=42)
samples_buis < buis$reconciled_samples
#Print the reconciled means
print(rowMeans(samples_buis))