zero_one_beta() defines a one-response distribution for continuous
proportions on [0, 1] when exact zeroes or ones are structural outcomes
rather than binomial denominator outcomes.
Details
The implemented fixed-effect contract is logit(mu) = eta_mu,
log(sigma) = eta_sigma, logit(zoi) = eta_zoi, and
logit(coi) = eta_coi. Here zoi is the probability that an observation
is exactly 0 or 1, and coi is the conditional probability of an exact 1
given that the observation is on the boundary. Interior observations follow
the same beta mean-scale contract as beta_family(), with internal precision
phi = 1 / sigma^2.
fitted() returns the unconditional response mean
(1 - zoi) * mu + zoi * coi. Ordinary unlabelled random intercepts and
independent numeric slopes such as (1 | id) and (0 + x | id) may enter
mu. Point-estimate-only support additionally includes one ordinary
intercept-only random effect in sigma, zoi, or coi, separately, plus
one ordinary slope-only effect in any one of those parameters when the fixed
and random terms use the same raw symbol. Examples are
zoi ~ x + (0 + x | id) and coi ~ x + (0 + x | id). The exact coi
admissions are that slope form and coi ~ 1 + (1 | id), both with fixed
sigma ~ 1 and zoi ~ 1. All of these routes have point-estimate
recovery evidence only. The two sigma routes now admit direct profiling, so
confint(method = "profile") reaches their SD target; that makes an
interval computable, not calibrated, and no interval, coverage, or broader
recovery claim is established for them. For the zoi and coi routes,
direct profiling, intervals, coverage, and broader recovery claims remain
unavailable. In the retained coi recovery rung (M = 64, 50 observations
per group), population-level point recovery remained stable when a few groups
had fewer than two observed zeroes or ones, but those groups can have weakly
identified conditional modes; inspect the within-group atom counts before
interpreting individual modes. Correlated or labelled effects,
intercept-plus-slope atom effects, transformed or mismatched zoi or coi
slope symbols, structured atom effects,
covariance blocks, and denominator syntax remain unsupported. One further
point-fit-only structured route is
available: an unlabelled q1 phylo(1 | group, tree = tree) intercept in
mu. It does not license other providers, slopes, labels, covariance,
q2-plus structured effects, profiling, intervals, coverage, or inference
claims.
Estimating coi needs both kinds of boundary value. If the response has
exact zeroes but no exact ones (or exact ones but no exact zeroes), the
coi likelihood is maximised at its boundary: the coi coefficient runs
towards minus (or plus) infinity with a huge standard error, check_drm()
reports the fit as degenerate, and is_converged() returns FALSE.
coi cannot be dropped, because an omitted coi formula means coi ~ 1.
The likelihood factorises into the interior beta part, the boundary
probability zoi, and coi, so for such data fit the same model as two
parts instead: beta_family() for the values strictly inside (0, 1) and
binomial() for the indicator of an exact boundary value. The two parts
give the same mu, sigma, and zoi estimates without the unidentified
parameter. drmTMB has no ordered-beta family.