pub enum LikelihoodScaleMetadata {
ProfiledGaussian,
FixedDispersion {
phi: f64,
},
FixedGammaShape {
shape: f64,
},
EstimatedGammaShape {
shape: f64,
},
EstimatedBetaPhi {
phi: f64,
},
FixedBetaPhi {
phi: f64,
},
EstimatedTweediePhi {
phi: f64,
},
EstimatedNegBinTheta {
theta: f64,
},
FixedNegBinTheta {
theta: f64,
},
Unspecified,
}Expand description
How a likelihood’s scale parameter is handled by the fit/result contract.
Variants§
ProfiledGaussian
Gaussian identity fits profile sigma outside the fixed-scale GLM machinery.
FixedDispersion
Fixed exponential-dispersion parameter phi.
FixedGammaShape
Fixed Gamma shape k, equivalent to phi = 1 / k.
EstimatedGammaShape
Gamma shape k estimated jointly with the mean model.
EstimatedBetaPhi
Beta-regression precision phi estimated jointly with the mean model.
Var(y) = mu(1-mu)/(1+phi); larger phi means less noise. Estimated
from the working residuals after each mean fit and refreshed across outer
iterations, exactly like the Gamma shape (issue #567).
FixedBetaPhi
Beta-regression precision phi held FIXED for the duration of the
smoothing-parameter (λ) search (#2369). Identical role to
EstimatedBetaPhi in every weight / variance / covariance expression
(Var(y) = mu(1-mu)/(1+phi), the digamma mean score reads phi through
the same Beta { phi } family variant), but the inner solver’s
per-solve Pearson refresh is gated off (its guard is
beta_phi_is_estimated(), which FixedBetaPhi does not satisfy). The
fixed/estimated split mirrors FixedGammaShape vs EstimatedGammaShape
and FixedNegBinTheta vs EstimatedNegBinTheta. This is a transient
λ-search form produced only by
with_beta_phi_frozen_for_search; the single final reported fit
Pearson-refreshes phi at the converged η and records EstimatedBetaPhi.
EstimatedTweediePhi
Tweedie exponential-dispersion phi estimated jointly with the mean
model. Var(y) = phi · mu^p with phi a genuine free parameter (unlike
Binomial/Poisson, where phi ≡ 1). Estimated by the Pearson moment
estimator phî = Σ wᵢ (yᵢ − μᵢ)² / μᵢ^p / Σ wᵢ at the converged η and
refreshed across outer iterations, exactly like the Gamma shape and the
Beta precision. phi enters the IRLS working weight prior·μ^{2−p}/phi,
so the coefficient covariance Vb = H⁻¹ already scales as phi and the
reported SEs track √phi (issue #771).
EstimatedNegBinTheta
Negative-Binomial overdispersion theta estimated jointly with the mean
model. Var(y) = mu + mu^2 / theta; larger theta means less
overdispersion (the Poisson limit is theta → ∞). Estimated by the
maximum-likelihood theta score
Σ wᵢ[ψ(yᵢ+θ) − ψ(θ) + lnθ + 1 − ln(θ+μᵢ) − (yᵢ+θ)/(μᵢ+θ)] = 0 at the
converged η (MASS glm.nb’s theta.ml) and refreshed across outer
iterations, exactly like the Gamma shape / Beta precision / Tweedie φ.
Unlike those, theta is not a dispersion scale phi: it enters only
the IRLS working weight W = μθ/(θ+μ) (the full NB2 Fisher information),
so the stored penalized Hessian is already the true one and the
coefficient covariance Vb = H⁻¹ takes no post-hoc multiply — phi ≡ 1
for NB, the overdispersion lives in the variance function. The theta
carried here mirrors ResponseFamily::NegativeBinomial { theta } (the
canonical store every weight/deviance expression reads), kept in sync by
with_negbin_theta, exactly as EstimatedBetaPhi mirrors Beta { phi }
(issue #802).
FixedNegBinTheta
Negative-Binomial overdispersion theta held fixed at a user-supplied
value (--negative-binomial-theta, issue #983). Identical role to
EstimatedNegBinTheta in every weight / variance / covariance
expression (W = μθ/(θ+μ), Var(y) = μ + μ²/θ, phi ≡ 1), but the
inner solver’s ML refresh is gated off: the recorded theta is the
user’s, by construction. The fixed/estimated split mirrors
FixedGammaShape vs EstimatedGammaShape.
Unspecified
The engine does not expose fixed-scale semantics for this family. Family has no scalar GLM scale by model definition (currently only Royston-Parmar). This is not a missing-value fallback.
Implementations§
Source§impl LikelihoodScaleMetadata
impl LikelihoodScaleMetadata
pub const fn fixed_phi(self) -> Option<f64>
Sourcepub const fn negbin_theta_is_estimated(self) -> bool
pub const fn negbin_theta_is_estimated(self) -> bool
Whether the Negative-Binomial overdispersion theta is estimated from
data (the default for NB families, issue #802).
Sourcepub const fn negbin_theta(self) -> Option<f64>
pub const fn negbin_theta(self) -> Option<f64>
The Negative-Binomial theta carried in the scale metadata (estimated
or user-fixed), or None for non-NB families.
Sourcepub const fn beta_phi_is_estimated(self) -> bool
pub const fn beta_phi_is_estimated(self) -> bool
Whether the Beta-regression precision phi is estimated from data.
Sourcepub const fn tweedie_phi_is_estimated(self) -> bool
pub const fn tweedie_phi_is_estimated(self) -> bool
Whether the Tweedie exponential-dispersion phi is estimated from data.
pub const fn gamma_shape(self) -> Option<f64>
pub const fn gamma_shape_is_estimated(self) -> bool
Sourcepub const fn wald_scale_is_estimated(self) -> bool
pub const fn wald_scale_is_estimated(self) -> bool
Whether the dispersion φ that multiplies the coefficient covariance
Vb = φ·H⁻¹ was estimated from THIS fit’s own residuals.
This is the predicate that selects a Wald/parametric reference
distribution: an estimated φ̂ carries its own sampling variability, so
the reference must spend n − edf denominator degrees of freedom on it
(Student-t for a parametric coefficient, F_{ref_df, residual_df} for
the Wood smooth test). A φ the user supplied carries none, and the
reference is the known-scale normal / χ². Getting this backwards is
anti-conservative in one direction and needlessly wide in the other.
It is stated here, on the metadata, and matched EXHAUSTIVELY on purpose.
The two summary surfaces each wrote their own matches! and they had
drifted apart (issue #2470): the in-process CLI summary keyed on this
metadata, while the persisted-model summary the Python summary() reads
keyed on the family name (ResponseFamily::{Gaussian, Gamma}) — so a
Gamma fit with a user-pinned shape got a χ² reference from one surface
and an F reference from the other for the same fitted model. A family
name cannot answer this question, because FixedGammaShape and
EstimatedGammaShape are the same family. Only the scale metadata can.
The exhaustive match (no wildcard arm) is the durable half of the fix:
a new scale variant cannot be added without an author deciding whether
its φ is estimated, which is exactly the decision both call sites were
silently making by omission.
Trait Implementations§
Source§impl Clone for LikelihoodScaleMetadata
impl Clone for LikelihoodScaleMetadata
Source§fn clone(&self) -> LikelihoodScaleMetadata
fn clone(&self) -> LikelihoodScaleMetadata
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more