Skip to main content

WorkingModelSurvival

Struct WorkingModelSurvival 

Source
pub struct WorkingModelSurvival { /* private fields */ }

Implementations§

Source§

impl WorkingModelSurvival

Source

pub fn monotonicity_linear_constraints( &self, ) -> Option<LinearInequalityConstraints>

Source

pub fn from_engine_inputs( inputs: SurvivalEngineInputs<'_>, penalties: PenaltyBlocks, monotonicity: SurvivalMonotonicityPenalty, spec: SurvivalSpec, ) -> Result<Self, SurvivalError>

Source

pub fn from_engine_inputswith_offsets( inputs: SurvivalEngineInputs<'_>, offsets: Option<SurvivalBaselineOffsets<'_>>, penalties: PenaltyBlocks, monotonicity: SurvivalMonotonicityPenalty, spec: SurvivalSpec, ) -> Result<Self, SurvivalError>

Source

pub fn from_time_covariate_inputswith_offsets( inputs: SurvivalTimeCovarInputs<'_>, offsets: Option<SurvivalBaselineOffsets<'_>>, penalties: PenaltyBlocks, monotonicity: SurvivalMonotonicityPenalty, spec: SurvivalSpec, ) -> Result<Self, SurvivalError>

Source

pub fn set_penalty_lambdas( &mut self, lambdas: &[f64], ) -> Result<(), EstimationError>

Enable/disable monotonic time-block enforcement metadata.

Monotonicity is enforced through linear inequality constraints on the derivative design; enabling this records how many leading time columns belong to that constrained block. Overwrite the per-block smoothing parameters λ_k in place.

Used by the REML smoothing-parameter selection for transformation survival fits (issue #563): the outer optimizer proposes a ρ = log λ vector, sets the smoothing blocks’ λ_k here, and re-runs the inner constrained PIRLS, so the monotone I-spline baseline can adapt its wiggliness instead of being pinned at a fixed seed. lambdas must have one entry per penalty block. The fixed stabilization ridge keeps its caller-set value (the optimizer never proposes a new one for it).

Source

pub fn set_structural_monotonicity( &mut self, enabled: bool, time_columns: usize, ) -> Result<(), EstimationError>

Source

pub fn update_state( &self, beta: &Array1<f64>, ) -> Result<WorkingState, EstimationError>

Source

pub fn offset_channel_residuals( &self, beta: &Array1<f64>, ) -> Result<OffsetChannelResiduals, EstimationError>

Per-observation gradients of the unpenalized survival NLL with respect to each additive offset channel, at the given β.

Contract (Royston-Parmar, eta = log H(t)):

NLL_i(β; o_E, o_X, o_D) = w_i · [ exp(η1_i) − 1{has_entry}·exp(η0_i) − δ_i · (η1_i + log s_i) ]

with η1_i = a1_iᵀβ + o_X[i], η0_i = a0_iᵀβ + o_E[i], s_i = d_iᵀβ + o_D[i].

The additive offsets enter each of the three η channels linearly, so ∂NLL_i/∂o_X[i] = w_i · (exp(η1_i) − δ_i) ∂NLL_i/∂o_E[i] = −w_i · exp(η0_i) · 1{has_entry_interval} ∂NLL_i/∂o_D[i] = −w_i · δ_i / s_i (event-row only)

These three arrays are the sampleweight-scaled residuals used to chain ∂NLL/∂offset into ∂NLL/∂θ via any closed-form ∂offset/∂θ map (see baseline_offset_theta_partials for parametric baselines). At converged β*, the envelope theorem on the penalized objective gives

d[0.5·(deviance + βᵀS_λβ)] / dθ = Σᵢ r_X_i·∂o_X_i/∂θ + r_E_i·∂o_E_i/∂θ + r_D_i·∂o_D_i/∂θ

exactly (no IFT back-solve required), because β* is a stationary point of the penalized objective wrt β and the penalty has no θ dependence.

Rows with sampleweight[i] ≤ 0 and non-event rows for r_D are returned as exact 0.0 so the output can be dot-producted against a per-obs baseline-partials array without a mask.

Structural-monotonicity stabilization on s_i (see stabilized_structural_derivative) is applied identically to the existing update_state path so the residual agrees with the NLL that update_state evaluates.

Source

pub fn unified_lamlobjective_and_rhogradient( &self, beta: &Array1<f64>, state: &WorkingState, rho: &Array1<f64>, ) -> Result<(f64, Array1<f64>), EstimationError>

Build an InnerSolution from the survival working state, suitable for the unified REML/LAML evaluator.

Evaluate the survival outer objective and gradient via the unified REML/LAML evaluator, using the canonical assembly module.

Source

pub fn evaluate_survival_lamlcost_and_gradient( &self, rho: &[f64], beta0: &Array1<f64>, ) -> Result<(f64, Array1<f64>), EstimationError>

Self-contained ρ → (LAML value, analytic ρ-gradient) surface for the survival LAML objective.

Unlike unified_lamlobjective_and_rhogradient, which takes a pre-converged WorkingState and β̂ at the evaluated ρ, this shim re-converges the inner survival mode internally: it sets the active-block smoothing parameters to λ = exp(ρ), runs the same constrained inner PIRLS that the survival outer loop uses (runworking_model_pirls), then evaluates the unified survival LAML value and analytic ρ-gradient at the re-fitted β̂(ρ). The returned pair is therefore a single-source value+ gradient surface that a caller can finite-difference by varying ρ alone — the survival counterpart of the GLM path’s evaluate_externalgradient / evaluate_externalcost_andridge.

rho enumerates the active penalty blocks (those with λ > 0) in block order, matching the convention of the unified evaluator. beta0 is the inner warm-start. The behaviour is identical to the existing survival LAML path (set-λ → inner PIRLS → update_state → unified LAML); this is a reachability shim, not a new objective.

Trait Implementations§

Source§

impl Clone for WorkingModelSurvival

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WorkingModelSurvival

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl WorkingModel for WorkingModelSurvival

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V