Probabilistic forecast reconciliation of mixed hierarchies via conditioning
Source:R/reconc_MixCond.R
reconc_MixCond.Rd
Uses importance sampling to draw samples from the reconciled forecast distribution, obtained via conditioning, in the case of a mixed hierarchy.
Usage
reconc_MixCond(
A,
fc_bottom,
fc_upper,
bottom_in_type = "pmf",
distr = NULL,
num_samples = 20000,
return_type = "pmf",
suppress_warnings = FALSE,
seed = NULL
)
Arguments
- A
Aggregation matrix (n_upper x n_bottom).
- fc_bottom
A list containing the bottom base forecasts, see details.
- fc_upper
A list containing the upper base forecasts, see details.
- bottom_in_type
A string with three possible values:
'pmf' if the bottom base forecasts are in the form of pmf, see details;
'samples' if the bottom base forecasts are in the form of samples;
'params' if the bottom base forecasts are in the form of estimated parameters.
- distr
A string describing the type of bottom base forecasts ('poisson' or 'nbinom').
This is only used if
bottom_in_type='params'
.- num_samples
Number of samples drawn from the reconciled distribution. This is ignored if
bottom_in_type='samples'
; in this case, the number of reconciled samples is equal to the number of samples of the base forecasts.- return_type
The return type of the reconciled distributions. A string with three possible values:
'pmf' returns a list containing the reconciled marginal pmf objects;
'samples' returns a list containing the reconciled multivariate samples;
'all' returns a list with both pmf objects and samples.
- suppress_warnings
Logical. If
TRUE
, no warnings about samples are triggered. IfFALSE
, warnings are generated. Default isFALSE
. See Details.- seed
Seed for reproducibility.
Value
A list containing the reconciled forecasts. The list has the following named elements:
bottom_reconciled
: a list containing the pmf, the samples (matrix n_bottom xnum_samples
) or both, depending on the value ofreturn_type
;upper_reconciled
: a list containing the pmf, the samples (matrix n_upper xnum_samples
) or both, depending on the value ofreturn_type
.
Details
The base bottom forecasts fc_bottom
must be a list of length n_bottom, where each element is either
a PMF object (see details below), if
bottom_in_type='pmf'
;a vector of samples, if
bottom_in_type='samples'
;a list of parameters, if
bottom_in_type='params'
:lambda for the Poisson base forecast if
distr
='poisson', see Poisson;size and prob (or mu) for the negative binomial base forecast if
distr
='nbinom', see NegBinomial.
The base upper forecasts fc_upper
must be a list containing the parameters of
the multivariate Gaussian distribution of the upper forecasts.
The list must contain only the named elements mu
(vector of length n_upper)
and Sigma
(n_upper x n_upper matrix).
The order of the upper and bottom base forecasts must match the order of (respectively) the rows and the columns of A.
A PMF object is a numerical vector containing the probability mass function of a discrete distribution. Each element corresponds to the probability of the integers from 0 to the last value of the support. See also PMF.get_mean, PMF.get_var, PMF.sample, PMF.get_quantile, PMF.summary for functions that handle PMF objects.
Warnings are triggered from the Importance Sampling step if:
weights are all zeros, then the upper forecast is ignored during reconciliation;
the effective sample size is < 200;
the effective sample size is < 1% of the sample size.
Note that warnings are an indication that the base forecasts might have issues. Please check the base forecasts in case of warnings.
References
Zambon, L., Azzimonti, D., Rubattu, N., Corani, G. (2024). Probabilistic reconciliation of mixed-type hierarchical time series. The 40th Conference on Uncertainty in Artificial Intelligence, accepted.
Examples
library(bayesRecon)
# Consider a simple hierarchy with two bottom and one upper
A <- matrix(c(1,1),nrow=1)
# The bottom forecasts are Poisson with lambda=15
lambda <- 15
n_tot <- 60
fc_bottom <- list()
fc_bottom[[1]] <- apply(matrix(seq(0,n_tot)),MARGIN=1,FUN=function(x) dpois(x,lambda=lambda))
fc_bottom[[2]] <- apply(matrix(seq(0,n_tot)),MARGIN=1,FUN=function(x) dpois(x,lambda=lambda))
# The upper forecast is a Normal with mean 40 and std 5
fc_upper<- list(mu=40, Sigma=matrix(5^2))
# We can reconcile with reconc_MixCond
res.mixCond <- reconc_MixCond(A, fc_bottom, fc_upper)
# Note that the bottom distributions are slightly shifted to the right
PMF.summary(res.mixCond$bottom_reconciled$pmf[[1]])
#> Min. 1st Qu. Median Mean 3rd Qu. Max
#> 1 6 15 18 17.7846 20 30
PMF.summary(fc_bottom[[1]])
#> Min. 1st Qu. Median Mean 3rd Qu. Max
#> 1 0 12 15 15 18 43
PMF.summary(res.mixCond$bottom_reconciled$pmf[[2]])
#> Min. 1st Qu. Median Mean 3rd Qu. Max
#> 1 6 15 18 17.68955 20 31
PMF.summary(fc_bottom[[2]])
#> Min. 1st Qu. Median Mean 3rd Qu. Max
#> 1 0 12 15 15 18 43
# The upper distribution is slightly shifted to the left
PMF.summary(res.mixCond$upper_reconciled$pmf[[1]])
#> Min. 1st Qu. Median Mean 3rd Qu. Max
#> 1 22 33 35 35.47415 38 51
PMF.get_var(res.mixCond$upper_reconciled$pmf[[1]])
#> [,1]
#> [1,] 14.46693