Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano
68
PyMC3's comprehensive library of 60+ probability distributions provides the building blocks for Bayesian models. All distributions support automatic broadcasting, shape inference, parameter transformations, and efficient computation through Theano integration.
Univariate continuous distributions for modeling real-valued random variables with support on continuous intervals.
class Normal:
"""
Univariate normal (Gaussian) distribution.
Parameters:
- mu: float or array, mean
- sigma: float or array, standard deviation (> 0)
- sd: float or array, alias for sigma (standard deviation, > 0)
- tau: float or array, precision (1/sigma^2, > 0)
"""
class Beta:
"""
Beta distribution for variables bounded between 0 and 1.
Parameters:
- alpha: float or array, shape parameter (> 0)
- beta: float or array, shape parameter (> 0)
"""
class Gamma:
"""
Gamma distribution for positive continuous variables.
Parameters:
- alpha: float or array, shape parameter (> 0)
- beta: float or array, rate parameter (> 0)
- mu: float or array, mean (alternative parameterization)
- sigma: float or array, standard deviation (alternative parameterization)
"""
class Exponential:
"""
Exponential distribution for positive continuous variables.
Parameters:
- lam: float or array, rate parameter (> 0)
"""
class StudentT:
"""
Student's t-distribution for robust modeling.
Parameters:
- nu: float or array, degrees of freedom (> 0)
- mu: float or array, location parameter
- sigma: float or array, scale parameter (> 0)
"""
class Uniform:
"""
Uniform distribution over continuous interval.
Parameters:
- lower: float or array, lower bound
- upper: float or array, upper bound (> lower)
"""
class Lognormal:
"""
Log-normal distribution for positive variables.
Parameters:
- mu: float or array, mean of underlying normal
- sigma: float or array, standard deviation of underlying normal (> 0)
"""
class Cauchy:
"""
Cauchy distribution with heavy tails.
Parameters:
- alpha: float or array, location parameter
- beta: float or array, scale parameter (> 0)
"""
class Laplace:
"""
Laplace (double exponential) distribution.
Parameters:
- mu: float or array, location parameter
- b: float or array, scale parameter (> 0)
"""
class AsymmetricLaplace:
"""
Asymmetric Laplace distribution.
Parameters:
- b: float or array, scale parameter (> 0)
- kappa: float or array, asymmetry parameter (> 0)
- mu: float or array, location parameter
"""
class Logistic:
"""
Logistic distribution.
Parameters:
- mu: float or array, location parameter
- s: float or array, scale parameter (> 0)
"""
class LogitNormal:
"""
Logit-normal distribution for variables in (0,1).
Parameters:
- mu: float or array, mean of underlying normal
- sigma: float or array, standard deviation of underlying normal (> 0)
"""
class Weibull:
"""
Weibull distribution for survival analysis.
Parameters:
- alpha: float or array, shape parameter (> 0)
- beta: float or array, scale parameter (> 0)
"""
class Pareto:
"""
Pareto distribution for power-law phenomena.
Parameters:
- alpha: float or array, shape parameter (> 0)
- m: float or array, scale parameter (> 0)
"""
class ChiSquared:
"""
Chi-squared distribution.
Parameters:
- nu: float or array, degrees of freedom (> 0)
"""
class InverseGamma:
"""
Inverse gamma distribution.
Parameters:
- alpha: float or array, shape parameter (> 0)
- beta: float or array, scale parameter (> 0)
"""
class Gumbel:
"""
Gumbel distribution for extreme value modeling.
Parameters:
- mu: float or array, location parameter
- beta: float or array, scale parameter (> 0)
"""
class SkewNormal:
"""
Skew-normal distribution.
Parameters:
- mu: float or array, location parameter
- sigma: float or array, scale parameter (> 0)
- alpha: float or array, shape parameter
"""
class Triangular:
"""
Triangular distribution.
Parameters:
- lower: float or array, lower bound
- upper: float or array, upper bound
- c: float or array, mode
"""
class ExGaussian:
"""
Exponentially modified Gaussian distribution.
Parameters:
- mu: float or array, mean of Gaussian component
- sigma: float or array, standard deviation of Gaussian component (> 0)
- nu: float or array, rate parameter of exponential component (> 0)
"""
class VonMises:
"""
Von Mises distribution for circular data.
Parameters:
- mu: float or array, mean direction
- kappa: float or array, concentration parameter (≥ 0)
"""
class Wald:
"""
Wald (inverse Gaussian) distribution.
Parameters:
- mu: float or array, mean (> 0)
- lam: float or array, shape parameter (> 0)
"""
class Kumaraswamy:
"""
Kumaraswamy distribution for variables in (0,1).
Parameters:
- a: float or array, shape parameter (> 0)
- b: float or array, shape parameter (> 0)
"""
class Rice:
"""
Rice distribution.
Parameters:
- nu: float or array, non-centrality parameter (≥ 0)
- sigma: float or array, scale parameter (> 0)
"""
class Moyal:
"""
Moyal distribution.
Parameters:
- mu: float or array, location parameter
- sigma: float or array, scale parameter (> 0)
"""
class TruncatedNormal:
"""
Truncated normal distribution.
Parameters:
- mu: float or array, mean of untruncated normal
- sigma: float or array, standard deviation of untruncated normal (> 0)
- lower: float or array, lower bound
- upper: float or array, upper bound
"""Half distributions for positive-constrained variables, useful for variance parameters and other positive quantities.
class HalfNormal:
"""
Half-normal distribution (normal truncated at zero).
Parameters:
- sigma: float or array, scale parameter (> 0)
"""
class HalfCauchy:
"""
Half-Cauchy distribution (Cauchy truncated at zero).
Parameters:
- beta: float or array, scale parameter (> 0)
"""
class HalfStudentT:
"""
Half-Student's t distribution.
Parameters:
- nu: float or array, degrees of freedom (> 0)
- sigma: float or array, scale parameter (> 0)
"""
class HalfFlat:
"""
Half-flat (improper) prior for positive variables.
"""Improper uniform priors for uninformative modeling.
class Flat:
"""
Flat (improper uniform) prior over entire real line.
"""Discrete distributions for count data, categorical variables, and other integer-valued outcomes.
class Binomial:
"""
Binomial distribution for number of successes.
Parameters:
- n: int or array, number of trials (≥ 0)
- p: float or array, probability of success (0 ≤ p ≤ 1)
"""
class Poisson:
"""
Poisson distribution for count data.
Parameters:
- mu: float or array, rate parameter (> 0)
"""
class NegativeBinomial:
"""
Negative binomial distribution for overdispersed count data.
Parameters:
- mu: float or array, mean (> 0)
- alpha: float or array, dispersion parameter (> 0)
"""
class Bernoulli:
"""
Bernoulli distribution for binary outcomes.
Parameters:
- p: float or array, probability of success (0 ≤ p ≤ 1)
"""
class Categorical:
"""
Categorical distribution for discrete choices.
Parameters:
- p: array, probabilities for each category (sums to 1)
"""
class Geometric:
"""
Geometric distribution for number of trials until first success.
Parameters:
- p: float or array, probability of success (0 < p ≤ 1)
"""
class HyperGeometric:
"""
Hypergeometric distribution for sampling without replacement.
Parameters:
- N: int, population size
- K: int, number of success states in population
- n: int, number of draws
"""
class DiscreteUniform:
"""
Discrete uniform distribution.
Parameters:
- lower: int or array, lower bound
- upper: int or array, upper bound
"""
class DiscreteWeibull:
"""
Discrete Weibull distribution.
Parameters:
- q: float or array, shape parameter (0 < q < 1)
- beta: float or array, shape parameter (> 0)
"""
class BetaBinomial:
"""
Beta-binomial distribution for overdispersed binomial data.
Parameters:
- alpha: float or array, shape parameter (> 0)
- beta: float or array, shape parameter (> 0)
- n: int or array, number of trials
"""
class Constant:
"""
Constant distribution (degenerate at single value).
Parameters:
- c: float or array, constant value
"""Mixture distributions for count data with excess zeros.
class ZeroInflatedPoisson:
"""
Zero-inflated Poisson distribution.
Parameters:
- theta: float or array, probability of zero inflation (0 ≤ theta ≤ 1)
- mu: float or array, Poisson rate parameter (> 0)
"""
class ZeroInflatedBinomial:
"""
Zero-inflated binomial distribution.
Parameters:
- theta: float or array, probability of zero inflation (0 ≤ theta ≤ 1)
- n: int or array, number of trials
- p: float or array, probability of success (0 ≤ p ≤ 1)
"""
class ZeroInflatedNegativeBinomial:
"""
Zero-inflated negative binomial distribution.
Parameters:
- theta: float or array, probability of zero inflation (0 ≤ theta ≤ 1)
- mu: float or array, mean parameter (> 0)
- alpha: float or array, dispersion parameter (> 0)
"""Specialized distributions for ordinal regression models.
class OrderedLogistic:
"""
Ordered logistic regression distribution.
Parameters:
- eta: float or array, linear predictor
- cutpoints: array, ordered cutpoint parameters
"""
class OrderedProbit:
"""
Ordered probit regression distribution.
Parameters:
- eta: float or array, linear predictor
- cutpoints: array, ordered cutpoint parameters
"""Distributions for vector-valued random variables with dependence structure.
class MvNormal:
"""
Multivariate normal distribution.
Parameters:
- mu: array, mean vector
- cov: array, covariance matrix (positive definite)
- tau: array, precision matrix (inverse covariance, positive definite)
- chol: array, Cholesky decomposition of covariance
"""
class MvStudentT:
"""
Multivariate Student's t distribution.
Parameters:
- nu: float, degrees of freedom (> 0)
- mu: array, location vector
- cov: array, scale matrix (positive definite)
"""
class Dirichlet:
"""
Dirichlet distribution for probability vectors.
Parameters:
- a: array, concentration parameters (> 0)
"""
class Multinomial:
"""
Multinomial distribution for count vectors.
Parameters:
- n: int or array, number of trials
- p: array, probabilities for each category (sums to 1)
"""
class DirichletMultinomial:
"""
Dirichlet-multinomial distribution for overdispersed multinomial data.
Parameters:
- n: int or array, number of trials
- a: array, concentration parameters (> 0)
"""
class Wishart:
"""
Wishart distribution for positive definite matrices.
Parameters:
- nu: float, degrees of freedom (> dim - 1)
- V: array, scale matrix (positive definite)
"""
class WishartBartlett:
"""
Wishart distribution using Bartlett decomposition.
Parameters:
- nu: float, degrees of freedom (> dim - 1)
- S: array, scale matrix (positive definite)
"""
class LKJCorr:
"""
LKJ correlation matrix distribution.
Parameters:
- eta: float, shape parameter (> 0)
- n: int, dimension of correlation matrix
"""
class LKJCholeskyCov:
"""
LKJ Cholesky covariance matrix distribution.
Parameters:
- eta: float, LKJ shape parameter (> 0)
- n: int, dimension of covariance matrix
- sd_dist: distribution for standard deviations
"""
class MatrixNormal:
"""
Matrix normal distribution.
Parameters:
- mu: array, mean matrix
- rowcov: array, row covariance matrix
- colcov: array, column covariance matrix
"""
class KroneckerNormal:
"""
Kronecker-structured normal distribution.
Parameters:
- mu: array, mean vector
- covs: list of arrays, Kronecker factor covariance matrices
"""Distributions for temporal dependence and sequential data.
class GaussianRandomWalk:
"""
Gaussian random walk process.
Parameters:
- mu: float or array, innovation mean
- sigma: float or array, innovation standard deviation (> 0)
- init: distribution for initial value
"""
class AR1:
"""
First-order autoregressive process AR(1).
Parameters:
- k: float or array, constant term
- tau_e: float or array, innovation precision (> 0)
- phi: float or array, autoregressive coefficient (|phi| < 1 for stationarity)
"""
class AR:
"""
Autoregressive process AR(p).
Parameters:
- rho: array, autoregressive coefficients
- sigma: float or array, innovation standard deviation (> 0)
- constant: bool, whether to include constant term
- init: distribution for initial values
"""
class GARCH11:
"""
GARCH(1,1) process for volatility modeling.
Parameters:
- omega: float, constant term (> 0)
- alpha_1: float, ARCH coefficient (≥ 0)
- beta_1: float, GARCH coefficient (≥ 0)
- initial_vol: float, initial volatility (> 0)
"""
class MvGaussianRandomWalk:
"""
Multivariate Gaussian random walk.
Parameters:
- mu: array, innovation mean vector
- cov: array, innovation covariance matrix
- init: distribution for initial values
"""
class MvStudentTRandomWalk:
"""
Multivariate Student's t random walk.
Parameters:
- nu: float, degrees of freedom (> 0)
- mu: array, innovation location vector
- cov: array, innovation scale matrix
- init: distribution for initial values
"""Finite mixture models for modeling heterogeneous populations.
class Mixture:
"""
General finite mixture distribution.
Parameters:
- w: array, mixture weights (sums to 1)
- comp_dists: list of distributions, mixture components
"""
class NormalMixture:
"""
Mixture of normal distributions.
Parameters:
- w: array, mixture weights (sums to 1)
- mu: array, component means
- sigma: array, component standard deviations (> 0)
"""
class MixtureSameFamily:
"""
Mixture of distributions from same parametric family.
Parameters:
- w: array, mixture weights (sums to 1)
- comp_dists: distribution, component distribution template
"""Advanced and specialized distributions for specific modeling needs.
class DensityDist:
"""
Custom distribution defined by log-density function.
Parameters:
- logp: function, log-density function
- shape: tuple, shape of distribution
- dtype: data type
"""
class Bound:
"""
Wrapper to add bounds to any distribution.
Parameters:
- dist: distribution to bound
- lower: float or array, lower bound
- upper: float or array, upper bound
"""
class Interpolated:
"""
Interpolated univariate distribution from data.
Parameters:
- x_points: array, interpolation points
- pdf_points: array, probability density values
"""
class Simulator:
"""
Distribution for simulation-based inference.
Parameters:
- function: callable, simulator function
- **params: parameters to pass to simulator
"""
class BART:
"""
Bayesian Additive Regression Trees distribution.
Parameters:
- X: array, predictor matrix
- Y: array, response vector
- m: int, number of trees
- alpha: float, tree structure prior parameter
- beta: float, tree structure prior parameter
"""Foundation classes and helper functions for distribution implementation.
class Distribution:
"""Base class for all PyMC3 distributions."""
class Continuous:
"""Base class for continuous distributions."""
class Discrete:
"""Base class for discrete distributions."""
class NoDistribution:
"""Placeholder for missing distributions."""
def draw_values(*params, point=None, size=None):
"""
Draw values from distributions and constants.
Parameters:
- params: distributions or constants to draw from
- point: dict, point in parameter space
- size: int or tuple, shape of samples to draw
Returns:
- tuple: drawn values
"""
def generate_samples(generator, *args, **kwargs):
"""
Generate samples from a distribution using custom generator.
Parameters:
- generator: function, sample generator
- args, kwargs: arguments to pass to generator
Returns:
- array: generated samples
"""
def fast_sample_posterior_predictive(trace, samples=None, model=None, **kwargs):
"""
Fast posterior predictive sampling for specific distribution types.
Parameters:
- trace: MultiTrace, posterior samples
- samples: int, number of posterior predictive samples
- model: Model, model context
Returns:
- dict: posterior predictive samples
"""import pymc3 as pm
import numpy as np
# Sample from distributions
samples_normal = pm.Normal.dist(mu=0, sigma=1).random(size=1000)
samples_beta = pm.Beta.dist(alpha=2, beta=5).random(size=1000)
# Evaluate log-probability
x = np.array([0.0, 1.0, 2.0])
logp = pm.Normal.dist(mu=0, sigma=1).logp(x)with pm.Model() as model:
# Continuous priors
alpha = pm.Normal('alpha', mu=0, sigma=10)
beta = pm.Beta('beta', alpha=1, beta=1)
sigma = pm.HalfNormal('sigma', sigma=5)
# Discrete parameter
k = pm.Poisson('k', mu=3)
# Multivariate parameter
theta = pm.Dirichlet('theta', a=np.ones(4))
# Time series component
walks = pm.GaussianRandomWalk('walks', mu=0, sigma=0.1, shape=100)
# Mixture distribution
mixture = pm.Mixture('mixture',
w=theta,
comp_dists=pm.Normal.dist(mu=[-2, 0, 2], sigma=1))import theano.tensor as tt
# Custom distribution using DensityDist
def logp_custom(value, mu, sigma):
return -0.5 * tt.sum(((value - mu) / sigma) ** 2)
with pm.Model() as model:
mu = pm.Normal('mu', 0, 1)
sigma = pm.HalfNormal('sigma', 1)
custom = pm.DensityDist('custom',
logp_custom,
observed=data,
mu=mu,
sigma=sigma)with pm.Model() as zip_model:
# Zero-inflation probability
theta = pm.Beta('theta', alpha=1, beta=1)
# Poisson rate parameter
mu = pm.Exponential('mu', lam=1)
# Zero-inflated Poisson likelihood
y_obs = pm.ZeroInflatedPoisson('y_obs',
theta=theta,
mu=mu,
observed=count_data)Install with Tessl CLI
npx tessl i tessl/pypi-pymc3docs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10