ENH: Add ZeroOneInflatedBeta (Port from brms)
Author: nshin0911Created Mar 14, 2026Updated Aug 24, 2026
Labelsfeature request
Before
#Observed array of values in [0,1] is 'data' with excess zeros, ones
#Users have to fall back to a pm.Mixture approximation
import pymc as pm
with pm.Model() as model:
zoi = pm.Beta('zoi', alpha = 1, beta = 1) #probability of zero or one (boundaries)
coi = pm.Beta('coi', alpha = 1, beta = 1) #conditional given zoi, probability of one
mu = pm.Beta('mu', alpha=1, beta=1) # Mean of beta component
kappa = pm.Gamma('kappa', alpha=2, beta=0.1) # Precision of beta component, also phi
#Approximate point masses with epsilon
epsilon = 1e-6
#Components for mixture
zero_component = pm.Uniform.dist(lower=0, upper=epsilon)
one_component = pm.Uniform.dist(lower=1-epsilon, upper=1)
beta_component = pm.Beta.dist(mu=mu, kappa=kappa)
#Mixture weights
w = [zoi * (1 - coi), zoi * coi, 1 - zoi]
y = pm.Mixture(
'y',
w=w,
comp_dists=[zero_component, one_component, beta_component],
observed=data
)After
#Observed array of values in [0,1] is 'data' with excess zeros, ones
import pymc as pm
with pm.Model() as model:
zoi = pm.Beta('zoi', alpha = 1, beta = 1) #probability of zero or one (boundaries)
coi = pm.Beta('coi', alpha = 1, beta = 1) #conditional given zoi, probability of one
mu = pm.Beta('mu', alpha=1, beta=1) # Mean of beta component
kappa = pm.Gamma('kappa', alpha=2, beta=0.1) # Precision of beta component, also phi
y = pm.ZeroOneInflatedBeta(
'y',
zoi = zoi,
coi = coi,
mu = mu,
kappa = kappa,
observed = data
)Context for the issue:
Motivation: The zero-one-inflated beta distribution is useful for modeling proportion/rate data on [0,1] with excess zeros and ones. Common in:
- Healthcare: proportion of wound area healed
- Ecology: proportion of area covered by vegetation
- Economics: proportion of the budget allocated
Existing Implementation: brms (R/Stan): HERE
The plan for implementation includes following the pattern of ZeroInflatedPoisson and HurdleGamma, but with an additional boundary.
I am willing to implement this and have posted on Discourse for design feedback: HERE
References:
- Ospina & Ferrari (2010). Inflated beta distributions.
- Ospina & Ferrari (2012). Zero-or-one inflated beta regression models.
Source: pymc-devs/pymc