skills/pymc/references/distributions.md
This reference provides a comprehensive catalog of probability distributions available in PyMC, organized by category. Use this to select appropriate distributions for priors and likelihoods when building Bayesian models.
Continuous distributions define probability densities over real-valued domains.
pm.Normal(name, mu, sigma)
mu (mean), sigma (standard deviation)pm.HalfNormal(name, sigma)
sigma (standard deviation)pm.Uniform(name, lower, upper)
lower, upper (bounds)pm.Beta(name, alpha, beta)
alpha, beta (shape parameters)pm.Gamma(name, alpha, beta)
alpha (shape), beta (rate)pm.Exponential(name, lam)
lam (rate parameter)pm.LogNormal(name, mu, sigma)
mu, sigma (parameters of underlying normal)pm.StudentT(name, nu, mu, sigma)
nu (degrees of freedom), mu (location), sigma (scale)pm.Cauchy(name, alpha, beta)
alpha (location), beta (scale)pm.HalfStudentT(name, nu, sigma)
pm.Laplace(name, mu, b) - Laplace (double exponential) distribution
pm.AsymmetricLaplace(name, kappa, mu, b) - Asymmetric Laplace distribution
pm.InverseGamma(name, alpha, beta) - Inverse gamma distribution
pm.Weibull(name, alpha, beta) - Weibull distribution for reliability analysis
pm.Logistic(name, mu, s) - Logistic distribution
pm.LogitNormal(name, mu, sigma) - Logit-normal distribution for (0,1) support
pm.Pareto(name, alpha, m) - Pareto distribution for power-law phenomena
pm.ChiSquared(name, nu) - Chi-squared distribution
pm.ExGaussian(name, mu, sigma, nu) - Exponentially modified Gaussian
pm.VonMises(name, mu, kappa) - Von Mises (circular normal) distribution
pm.SkewNormal(name, mu, sigma, alpha) - Skew-normal distribution
pm.Triangular(name, lower, c, upper) - Triangular distribution
pm.Gumbel(name, mu, beta) - Gumbel distribution for extreme values
pm.PolyaGamma(name, h, z) - Polya-gamma distribution for data augmentation patterns
pm.Rice(name, nu, sigma) - Rice (Rician) distribution
pm.Moyal(name, mu, sigma) - Moyal distribution
pm.Kumaraswamy(name, a, b) - Kumaraswamy distribution (Beta alternative)
pm.Wald(name, mu, lam) - Wald / inverse Gaussian distribution
pm.Interpolated(name, x_points, pdf_points) - Custom distribution from interpolation
Discrete distributions define probabilities over integer-valued domains.
pm.Bernoulli(name, p)
p (success probability)pm.Binomial(name, n, p)
n (number of trials), p (success probability)pm.Poisson(name, mu)
mu (rate parameter)pm.Categorical(name, p)
p (probability vector)pm.DiscreteUniform(name, lower, upper)
lower, upper (bounds)pm.NegativeBinomial(name, mu, alpha)
mu (mean), alpha (dispersion)pm.Geometric(name, p)
p (success probability)pm.BetaBinomial(name, alpha, beta, n) - Beta-binomial (overdispersed binomial)
pm.HyperGeometric(name, N, k, n) - Hypergeometric distribution
pm.DiscreteWeibull(name, q, beta) - Discrete Weibull distribution
pm.OrderedLogistic(name, eta, cutpoints) - Ordered logistic for ordinal data
pm.OrderedProbit(name, eta, cutpoints) - Ordered probit for ordinal data
Multivariate distributions define joint probability distributions over vector-valued random variables.
pm.MvNormal(name, mu, cov)
mu (mean vector), cov (covariance matrix)pm.Dirichlet(name, a)
a (concentration parameters)pm.Multinomial(name, n, p)
n (number of trials), p (probability vector)pm.DirichletMultinomial(name, n, a)
pm.MvStudentT(name, nu, mu, cov)
nu (degrees of freedom), mu (location), cov (scale matrix)pm.LKJCorr(name, n, eta) - LKJ correlation matrix prior (for correlation matrices)
pm.LKJCholeskyCov(name, n, eta, sd_dist) - LKJ prior with Cholesky decomposition
pm.OrderedMultinomial(name, eta, cutpoints, n) - Ordered multinomial outcomes
pm.StickBreakingWeights(name, alpha, K) - Stick-breaking weights for mixture models
pm.ZeroSumNormal(name, sigma) - Normal prior constrained to sum to zero
pm.Wishart(name, nu, V) - Wishart distribution (for covariance matrices; prefer LKJ-based priors for most covariance models)
pm.InverseWishart(name, nu, V) - Inverse Wishart distribution
pm.WishartBartlett(name, S, nu) - Wishart with Bartlett decomposition
pm.MatrixNormal(name, mu, rowcov, colcov) - Matrix normal distribution
pm.KroneckerNormal(name, mu, covs, sigma) - Kronecker-structured normal
pm.CAR(name, mu, W, alpha, tau) - Conditional autoregressive (spatial)
pm.ICAR(name, W, sigma) - Intrinsic conditional autoregressive (spatial)
Mixture distributions combine multiple component distributions.
pm.Mixture(name, w, comp_dists)
w (weights), comp_dists (component distributions)pm.NormalMixture(name, w, mu, sigma)
pm.ZeroInflatedPoisson(name, psi, mu) - Excess zeros in count data
pm.ZeroInflatedBinomial(name, psi, n, p) - Zero-inflated binomial
pm.ZeroInflatedNegativeBinomial(name, psi, mu, alpha) - Zero-inflated negative binomial
pm.HurdlePoisson(name, psi, mu) - Hurdle Poisson (two-part model)
pm.HurdleNegativeBinomial(name, psi, mu, alpha) - Hurdle negative binomial for overdispersed counts with structural zeros
pm.HurdleGamma(name, psi, alpha, beta) - Hurdle gamma
pm.HurdleLogNormal(name, psi, mu, sigma) - Hurdle log-normal
Distributions designed for temporal data and sequential modeling.
pm.AR(name, rho, sigma, init_dist)
rho (AR coefficients), sigma (innovation std), init_dist (initial distribution)pm.GaussianRandomWalk(name, mu, sigma, init_dist)
mu (drift), sigma (step size), init_dist (initial value)pm.MvGaussianRandomWalk(name, mu, cov, init_dist)
pm.MvStudentTRandomWalk(name, nu, mu, cov, init_dist)
pm.GARCH11(name, omega, alpha_1, beta_1)
pm.EulerMaruyama(name, dt, sde_fn, sde_pars, init_dist)
pm.Deterministic(name, var)
pm.Potential(name, logp)
pm.Flat(name)
pm.HalfFlat(name)
pm.Truncated(name, dist, lower, upper)
pm.Censored(name, dist, lower, upper)
pm.CustomDist(name, ..., logp, random)
pm.Simulator(name, fn, params, ...)
HalfNormal, HalfCauchy, Exponential, or GammaBeta or Uniform(0, 1)Normal or StudentT (for robustness)LogNormal, Gamma, or ExponentialLKJCholeskyCov for covariance models; use LKJCorr when only correlations are neededPoisson or NegativeBinomial (for overdispersion)PyMC distributions support NumPy-style broadcasting. Use the shape parameter to create vectors or arrays of random variables:
# Vector of 5 independent normals
beta = pm.Normal('beta', mu=0, sigma=1, shape=5)
# 3x4 matrix of independent gammas
tau = pm.Gamma('tau', alpha=2, beta=1, shape=(3, 4))
Instead of shape, use dims for more readable models:
with pm.Model(coords={'predictors': ['age', 'income', 'education']}) as model:
beta = pm.Normal('beta', mu=0, sigma=1, dims='predictors')