pyuncertainnumber.calibration.utils_bayesian

Classes

Prior

Abstract prior interface (minimal).

PriorUniform

Axis-aligned uniform prior over [lb, ub] in R^d (vector bounds).

JointBivariatePDF

Base class for 2D aleatoric samplers with copulas.

BetaGaussCopulaPDF

Aleatoric sampler: (xa1, xa2) ~ Beta marginals + Gaussian copula.

NormalGaussCopulaPDF

Aleatoric sampler: (xa1, xa2) ~ Truncated Normal marginals

BetaMixtureGaussCopulaPDF

Mixture of Beta marginals with Gaussian copula correlation.

Functions

initial_population(→ numpy.ndarray)

Generates initial population from prior distribution

log_prior(→ float)

log_prior_batch(→ numpy.ndarray)

compute_beta_update_evidence(beta, log_likelihoods, ...)

Computes beta for the next stage and updated model evidence

gaussian_proposals(→ numpy.ndarray)

compute_beta_update_evidence(beta, log_likelihoods, ...)

Computes beta for the next stage and updated model evidence

get_log_prior_samples(samples, all_pars)

Computes log_prior value at all particles

initial_population(→ numpy.ndarray)

Generates initial population from prior distribution

prepare_all_pars([n_epistemic, n_mix])

Prepare prior for the NASA case study with a mixture of Beta marginals + copula correlation.

prepare_prior_beta_model_NASA()

Prepare the prior for the beta model used in the NASA case study.

propose(current, covariance, n)

proposal distribution for MCMC in perturbation stage

MCMC_MH(particle_num, Em, Nm_steps, current, ...)

Markov chain Monte Carlo using Metropolis-Hastings

Module Contents

class pyuncertainnumber.calibration.utils_bayesian.Prior

Abstract prior interface (minimal).

abstractmethod generate_rns(n: int) numpy.ndarray

Return n samples ~ prior (shape: (n, d_i) or (n,)).

abstractmethod log_pdf_eval(x: numpy.ndarray) float

Return log p(x) for a single vector x.

class pyuncertainnumber.calibration.utils_bayesian.PriorUniform(lb: numpy.ndarray, ub: numpy.ndarray, name: str = 'uniform')

Bases: Prior

Axis-aligned uniform prior over [lb, ub] in R^d (vector bounds).

lb
ub
d
name = 'uniform'
_logZ
generate_rns(n: int) numpy.ndarray

Vectorized sampling over the hyper-rectangle.

log_pdf_eval(x: numpy.ndarray) float

log 1/Vol if x within bounds; -inf otherwise.

pyuncertainnumber.calibration.utils_bayesian.initial_population(n: int, priors: List[Prior]) numpy.ndarray
pyuncertainnumber.calibration.utils_bayesian.log_prior(x: numpy.ndarray, priors: List[Prior]) float
pyuncertainnumber.calibration.utils_bayesian.log_prior_batch(samples: numpy.ndarray, priors: List[Prior]) numpy.ndarray
pyuncertainnumber.calibration.utils_bayesian.compute_beta_update_evidence(beta: float, log_lik: numpy.ndarray, log_evidence: float, prev_ESS: float, target_frac: float = 0.95, min_particles: int = 50, max_iter: int = 30) tuple
pyuncertainnumber.calibration.utils_bayesian.gaussian_proposals(current: numpy.ndarray, cov: numpy.ndarray, n: int) numpy.ndarray
class pyuncertainnumber.calibration.utils_bayesian.JointBivariatePDF(params)

Base class for 2D aleatoric samplers with copulas.

eps = 1e-09
params
abstractmethod sample(ns: int = 1000)
class pyuncertainnumber.calibration.utils_bayesian.BetaGaussCopulaPDF(params, s=20)

Bases: JointBivariatePDF

Aleatoric sampler: (xa1, xa2) ~ Beta marginals + Gaussian copula. Params: [a1, a2, b1, b2, rho] with values in [0, 1]. Scaled internally via factor s (default: 20).

rho
cov
sample(ns: int = 1000)
class pyuncertainnumber.calibration.utils_bayesian.NormalGaussCopulaPDF(params, s_mu=2, s_sigma=2)

Bases: JointBivariatePDF

Aleatoric sampler: (xa1, xa2) ~ Truncated Normal marginals

rho
cov
sample(ns: int = 1000)
class pyuncertainnumber.calibration.utils_bayesian.BetaMixtureGaussCopulaPDF(params, n_mix: int = 2, s: int = 20, weights=None)

Bases: JointBivariatePDF

Mixture of Beta marginals with Gaussian copula correlation. Each component uses (a1, a2), (b1, b2) marginals + rho. Params: flat vector of length n_param * n_mix with values in [0, 1]; scaled internally.

n_mix = 2
s = 20
eps = 1e-06
components = []
sample(ns: int = 1000)
pyuncertainnumber.calibration.utils_bayesian.compute_beta_update_evidence(beta, log_likelihoods, log_evidence, prev_ESS)

Computes beta for the next stage and updated model evidence :param beta: :type beta: float stage parameter. :param log_likelihoods: :type log_likelihoods: numpy array of size N log likelihood values at all particles :param log_evidence: :type log_evidence: float log of evidence. :param prev_ESS: :type prev_ESS: int effective sample size of previous stage

Returns:

  • new_beta (float stage parameter for next stage.)

  • log_evidence (float updated log evidence.)

  • Wm_n (numpy array of size N weights of particles for the next stage)

  • ESS (float effective sample size of new stage)

pyuncertainnumber.calibration.utils_bayesian.get_log_prior_samples(samples, all_pars)

Computes log_prior value at all particles s : numpy array of size N x Np (N samples x N parameters) all_pars: list of PDFs objects, length Np

all_pars[i]: is a PDF object with a callable log_pdf_eval method.

Returns

log_p : numpy array of size N log prior at all N particles .

pyuncertainnumber.calibration.utils_bayesian.initial_population(N, all_pars) numpy.ndarray

Generates initial population from prior distribution N : float number of particles. all_pars : list of size Np is number of parameters; all_pars[i] is object of type pdfs ini_pop : numpy array of size N x Np initial population.

pyuncertainnumber.calibration.utils_bayesian.prepare_all_pars(n_epistemic: int = 3, n_mix: int = 2)

Prepare prior for the NASA case study with a mixture of Beta marginals + copula correlation. Each mixture component gets its own (a1, a2, b1, b2, rho), scaled ∈ [0.001, 0.999].

pyuncertainnumber.calibration.utils_bayesian.prepare_prior_beta_model_NASA()

Prepare the prior for the beta model used in the NASA case study.

pyuncertainnumber.calibration.utils_bayesian.propose(current, covariance, n)

proposal distribution for MCMC in perturbation stage

pyuncertainnumber.calibration.utils_bayesian.MCMC_MH(particle_num, Em, Nm_steps, current, likelihood_current, posterior_current, beta, numAccepts, all_pars, log_likelihood)

Markov chain Monte Carlo using Metropolis-Hastings “perturbs” each particle using MCMC-MH

Parameters:
  • particle_num (int) – particle number

  • Em (numpy array of size Np x Np) – proposal covarince matrix.

  • Nm_steps (int) – number of perturbation steps.

  • current (numpy array of size Np) – current particle location

  • likelihood_current (float) – log likelihood value at current particle

  • posterior_current (float) – log posterior value at current particle

  • beta (float) – stage parameter.

  • numAccepts (int) – total number of accepts

  • all_pars (: list of size Np) – Np is number of parameters all_pars[i] is object of type pdfs all parameters to be inferred.

  • log_likelihood (function) – log likelihood function to be defined in main.py.

Returns:

  • current (numpy array of size Np) – perturbed particle location

  • likelihood_current (float) – log likelihood value at perturbed particle

  • posterior_current (float) – log posterior value at perturbed particle

  • numAccepts (int) – total number of accepts during perturbation (MCMC - MH)