reconc_BUIS {bayesRecon} | R Documentation |
BUIS for Probabilistic Reconciliation of forecasts via conditioning
Description
Uses the Bottom-Up Importance Sampling algorithm to draw samples from the reconciled forecast distribution, 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 i-th 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 i-th element is a string with two possible values:
If |
num_samples |
Number of samples drawn from the reconciled distribution.
This is ignored if |
suppress_warnings |
Logical. If |
seed |
Seed for reproducibility. |
Details
The parameter base_forecast
is a list containing n elements where the i-th 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 list 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;size and prob (or mu) 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 real-valued and count time series. Statistics and Computing 34 (1), 21. doi:10.1007/s11222-023-10343-y.
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]] = list(mean = mus[[i]], sd = 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]] = list(lambda = 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))