Skip to contents

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. If FALSE, warnings are generated. Default is FALSE. 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 x num_samples) or both, depending on the value of return_type;

  • upper_reconciled: a list containing the pmf, the samples (matrix n_upper x num_samples) or both, depending on the value of return_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