pub enum EstimationError {
Show 36 variants
InvalidStabilization(InvalidStabilization),
BasisError(BasisError),
CustomFamily(CustomFamilyError),
LinearSystemSolveFailed(FaerLinalgError),
EigendecompositionFailed(FaerLinalgError),
PenaltySpectrumNonFinite {
context: String,
index: usize,
value: f64,
},
PenaltySpectrumIndefinite {
context: String,
index: usize,
value: f64,
tolerance: f64,
scale: f64,
},
ParameterConstraintViolation(String),
PirlsDidNotConverge {
max_iterations: usize,
last_change: f64,
},
FixedLambdaNewtonDidNotConverge {
context: String,
reason: FixedLambdaStallReason,
objective_value: f64,
stationarity: FixedLambdaStationarityEvidence,
checkpoint: FixedLambdaCheckpoint,
},
BlockOrthogonalRemlDidNotConverge {
iterations: usize,
max_score_residual: f64,
score_tol: f64,
min_profile_curvature: f64,
profile_curvature_roundoff: f64,
last_scale_step: f64,
cycle_detected: bool,
rho_checkpoint: Vec<f64>,
},
NegativeBinomialAlternationDidNotConverge {
rounds: usize,
theta_checkpoint: f64,
rho_projected_grad_norm: f64,
rho_stationarity_bound: f64,
theta_score_residual: f64,
theta_stationarity_bound: f64,
rho_checkpoint: Vec<f64>,
},
PerfectSeparationDetected {
iteration: usize,
max_abs_eta: f64,
},
PrefitPerfectSeparationDetected {
column_index: usize,
threshold: f64,
positive_above_threshold: bool,
},
PrefitLinearSeparationDetected {
min_signed_margin: f64,
num_unpenalized_columns: usize,
column_indices: Vec<usize>,
},
PrefitRankDeficientDesignDetected {
rank: usize,
num_unpenalized_columns: usize,
min_eigenvalue: f64,
tolerance: f64,
column_indices: Vec<usize>,
},
PrefitNearDegenerateDesignDetected {
num_unpenalized_columns: usize,
condition_number: f64,
min_eigenvalue: f64,
max_eigenvalue: f64,
tolerance: f64,
column_indices: Vec<usize>,
},
MultinomialSeparationDetected {
iteration: usize,
max_abs_eta: f64,
active_class_index: usize,
row_index: usize,
},
HessianNotPositiveDefinite {
min_eigenvalue: f64,
},
RemlOptimizationFailed(String),
OuterObjectiveEvaluationFailed {
context: String,
source: Box<EstimationError>,
},
RemlDidNotConverge {
context: String,
reason: String,
iterations: usize,
final_value: f64,
projected_grad_norm: Option<f64>,
stationarity_bound: f64,
stationarity_bound_rung: Option<StationarityRung>,
rho_checkpoint: Vec<f64>,
},
FitDidNotConverge {
inner_status: String,
outer_status: String,
outer_iterations: usize,
final_value: f64,
stationarity_residual: Option<f64>,
stationarity_bound: Option<f64>,
step_residual: Option<f64>,
step_bound: Option<f64>,
rho_checkpoint: Vec<f64>,
resume_token: Option<String>,
},
GradientUnavailable {
context: &'static str,
mode: &'static str,
},
LayoutError(String),
ModelOverparameterized {
num_coeffs: usize,
num_samples: usize,
intercept_coeffs: usize,
binary_main_coeffs: usize,
primary_smooth_coeffs: usize,
aux_main_coeffs: usize,
binary_primary_interaction_coeffs: usize,
aux_interaction_coeffs: usize,
},
ModelIsIllConditioned {
condition_number: f64,
},
InvalidInput(String),
InverseLinkDomainViolation {
link: &'static str,
eta: f64,
lower: f64,
upper: f64,
},
PirlsRowGeometryUnrepresentable {
row: usize,
quantity: &'static str,
eta: f64,
value: f64,
},
ExactTweedieSeriesWorkLimit {
row: usize,
required_terms_lower_bound: f64,
budget: usize,
},
LogStrengthDomainViolation {
coordinate: usize,
value: f64,
lower: f64,
upper: f64,
},
MonotoneRoot(MonotoneRootError),
CalibratorTrainingFailed(String),
InvalidSpecification(String),
PredictionError,
}Expand description
A comprehensive error type for the model estimation process.
Variants§
InvalidStabilization(InvalidStabilization)
BasisError(BasisError)
CustomFamily(CustomFamilyError)
LinearSystemSolveFailed(FaerLinalgError)
EigendecompositionFailed(FaerLinalgError)
PenaltySpectrumNonFinite
PenaltySpectrumIndefinite
ParameterConstraintViolation(String)
PirlsDidNotConverge
FixedLambdaNewtonDidNotConverge
Fields
context: StringWhich fixed-λ Newton entry stalled (e.g. the multinomial softmax or independent-binomial vector-GLM solve, or the Firth refit lane).
reason: FixedLambdaStallReasonWhy the solver stopped without its convergence certificate.
objective_value: f64Final value of the solver’s minimized criterion. For ordinary vector
GLMs this is -log L + penalty; for the Firth lane it also includes
the negative Jeffreys 0.5 log det(I) contribution.
stationarity: FixedLambdaStationarityEvidenceExact first-order residual and the bound it failed to clear.
checkpoint: FixedLambdaCheckpointLast accepted coefficients and cumulative iteration count. This is work-preservation state, not a fitted model, and carries no covariance or prediction surface.
BlockOrthogonalRemlDidNotConverge
Fields
max_score_residual: f64Largest per-block |dV/drho| at the final iterate, normalized by the
score’s natural magnitude d * max(1, rank).
min_profile_curvature: f64Smallest eigenvalue of the analytic rho Hessian after profiling out the exact conditional scale block.
profile_curvature_roundoff: f64Dimension-scaled eigensolver roundoff allowed below zero when certifying positive semidefiniteness.
last_scale_step: f64Last max |Δ log scale-precision| fixed-point movement (evidence of whether the alternation was still moving or had stalled).
NegativeBinomialAlternationDidNotConverge
Fields
PerfectSeparationDetected
PrefitPerfectSeparationDetected
PrefitLinearSeparationDetected
PrefitRankDeficientDesignDetected
Fields
PrefitNearDegenerateDesignDetected
Fields
MultinomialSeparationDetected
HessianNotPositiveDefinite
RemlOptimizationFailed(String)
OuterObjectiveEvaluationFailed
RemlDidNotConverge
Fields
reason: StringWhich certificate failed: budget exhaustion, line-search collapse, non-stationary cost stall, or a failed post-solve stationarity certificate.
projected_grad_norm: Option<f64>KKT-projected gradient norm at the best iterate, when the solver
measured a gradient there (None for gradient-free exits).
stationarity_bound_rung: Option<StationarityRung>Which rung of the ladder produced stationarity_bound (#2458).
None means the refusing route does not record its rung — which is
itself the finding, not a gap in the message: it marks exactly the
routes whose stationarity standard is still unobservable.
FitDidNotConverge
Fields
inner_status: StringDiagnostic inner-solver terminal status. This is deliberately a string at the neutral problem layer; concrete solver status enums live in downstream fitting crates.
LayoutError(String)
ModelOverparameterized
Fields
ModelIsIllConditioned
InvalidInput(String)
InverseLinkDomainViolation
PirlsRowGeometryUnrepresentable
ExactTweedieSeriesWorkLimit
LogStrengthDomainViolation
MonotoneRoot(MonotoneRootError)
CalibratorTrainingFailed(String)
InvalidSpecification(String)
PredictionError
Implementations§
Source§impl EstimationError
impl EstimationError
Sourcepub fn fatal_outer_evaluation(
context: impl Into<String>,
source: EstimationError,
) -> EstimationError
pub fn fatal_outer_evaluation( context: impl Into<String>, source: EstimationError, ) -> EstimationError
Preserve a thrown outer-objective failure across seed, solver, and
fallback-plan orchestration. Trial-domain refusals must be represented
as a finite API outcome (+inf / OuterEval::infeasible); an Err
means the evaluation artifact itself could not be constructed and must
never be retried as another numerical point.
pub fn is_fatal_outer_evaluation(&self) -> bool
Sourcepub fn is_inner_solve_retreat(&self) -> bool
pub fn is_inner_solve_retreat(&self) -> bool
Classifies inner-solve failures that the outer REML loop should treat as a soft retreat (return +inf cost / infeasible outer-eval) rather than propagate as a hard error.
Why: when the penalised Hessian becomes effectively singular at the current rho, when P-IRLS hits a perfect-separation diagnostic, or when it exhausts its iteration budget, the outer optimiser’s correct response is to back away from this rho — not to terminate the fit. All three variants encode “the inner problem at this rho is too hard to evaluate, try a different rho”.
Trait Implementations§
Source§impl Debug for EstimationError
impl Debug for EstimationError
Source§impl Display for EstimationError
impl Display for EstimationError
Source§impl Error for EstimationError
impl Error for EstimationError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<BasisError> for EstimationError
impl From<BasisError> for EstimationError
Source§fn from(source: BasisError) -> EstimationError
fn from(source: BasisError) -> EstimationError
Source§impl From<CustomFamilyError> for EstimationError
impl From<CustomFamilyError> for EstimationError
Source§fn from(source: CustomFamilyError) -> EstimationError
fn from(source: CustomFamilyError) -> EstimationError
Source§impl From<IndexedLogStrengthDomainError> for EstimationError
impl From<IndexedLogStrengthDomainError> for EstimationError
Source§fn from(error: IndexedLogStrengthDomainError) -> EstimationError
fn from(error: IndexedLogStrengthDomainError) -> EstimationError
Source§impl From<InvalidStabilization> for EstimationError
impl From<InvalidStabilization> for EstimationError
Source§fn from(source: InvalidStabilization) -> EstimationError
fn from(source: InvalidStabilization) -> EstimationError
Source§impl From<LinalgError> for EstimationError
impl From<LinalgError> for EstimationError
Source§fn from(error: LinalgError) -> EstimationError
fn from(error: LinalgError) -> EstimationError
Source§impl From<MonotoneRootError> for EstimationError
impl From<MonotoneRootError> for EstimationError
Source§fn from(source: MonotoneRootError) -> EstimationError
fn from(source: MonotoneRootError) -> EstimationError
Auto Trait Implementations§
impl Freeze for EstimationError
impl RefUnwindSafe for EstimationError
impl Send for EstimationError
impl Sync for EstimationError
impl Unpin for EstimationError
impl UnsafeUnpin for EstimationError
impl UnwindSafe for EstimationError
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.