pub struct LogisticFit { /* private fields */ }Expand description
A fitted binary logistic-regression model.
Fit by iteratively reweighted least squares (equivalently, Fisher
scoring / Newton–Raphson on the log-likelihood). At convergence the score
equations Xᵀ(y − p) = 0 hold, and the inverse Fisher information
(XᵀWX)⁻¹ — with W = diag(pᵢ(1−pᵢ)) — gives the coefficient covariance the
Wald statistics are built from.
See the module docs for the response convention and the separation caveat.
Implementations§
Source§impl LogisticFit
impl LogisticFit
Sourcepub fn new(x: Array2<f64>, y: Array1<f64>) -> Result<Self>
pub fn new(x: Array2<f64>, y: Array1<f64>) -> Result<Self>
Fit logistic regression of binary y on X (default: up to 100 IRLS
iterations, tolerance 1e-10 on the coefficient step).
§Errors
RegressionError::EmptyInput/RegressionError::ShapeMismatch.RegressionError::InvalidResponseifyis not0/1or is all one class.RegressionError::RankDeficientif the (weighted) design is singular.RegressionError::NotConvergedif IRLS fails to converge (typically separation).
Sourcepub fn with_options(
x: Array2<f64>,
y: Array1<f64>,
max_iter: usize,
tol: f64,
) -> Result<Self>
pub fn with_options( x: Array2<f64>, y: Array1<f64>, max_iter: usize, tol: f64, ) -> Result<Self>
Like LogisticFit::new with an explicit iteration cap and tolerance.
Sourcepub fn n_observations(&self) -> usize
pub fn n_observations(&self) -> usize
Number of observations.
Sourcepub fn n_parameters(&self) -> usize
pub fn n_parameters(&self) -> usize
Number of coefficients (design columns, intercept included).
Sourcepub fn has_intercept(&self) -> bool
pub fn has_intercept(&self) -> bool
Whether an intercept (constant) column is present.
Sourcepub fn iterations(&self) -> usize
pub fn iterations(&self) -> usize
IRLS iterations taken to converge.
Sourcepub fn design_matrix(&self) -> ArrayView2<'_, f64>
pub fn design_matrix(&self) -> ArrayView2<'_, f64>
The design matrix as fitted.
Sourcepub fn response(&self) -> ArrayView1<'_, f64>
pub fn response(&self) -> ArrayView1<'_, f64>
The binary response.
Sourcepub fn coefficients(&self) -> ArrayView1<'_, f64>
pub fn coefficients(&self) -> ArrayView1<'_, f64>
Estimated coefficients (log-odds scale), aligned to the design columns.
Sourcepub fn fitted_probabilities(&self) -> ArrayView1<'_, f64>
pub fn fitted_probabilities(&self) -> ArrayView1<'_, f64>
Fitted probabilities pᵢ = P(yᵢ = 1).
Sourcepub fn weights(&self) -> ArrayView1<'_, f64>
pub fn weights(&self) -> ArrayView1<'_, f64>
IRLS weights wᵢ = pᵢ(1 − pᵢ) at the MLE.
Sourcepub fn covariance(&self) -> ArrayView2<'_, f64>
pub fn covariance(&self) -> ArrayView2<'_, f64>
Coefficient covariance matrix (XᵀWX)⁻¹.
Sourcepub fn log_likelihood(&self) -> f64
pub fn log_likelihood(&self) -> f64
Maximized log-likelihood.
Sourcepub fn coefficient_standard_errors(&self) -> Array1<f64>
pub fn coefficient_standard_errors(&self) -> Array1<f64>
Coefficient standard errors √diag((XᵀWX)⁻¹).
Sourcepub fn predict_proba(&self, x: ArrayView2<'_, f64>) -> Array1<f64>
pub fn predict_proba(&self, x: ArrayView2<'_, f64>) -> Array1<f64>
Predicted probabilities for a new design matrix x (same column layout
as the training design).
Source§impl LogisticFit
impl LogisticFit
Sourcepub fn goodness_of_fit(&self) -> GoodnessOfFit
pub fn goodness_of_fit(&self) -> GoodnessOfFit
Overall goodness-of-fit summary: null/residual deviance, McFadden’s pseudo-R², and AIC/BIC.
The residual deviance is −2ℓ (the saturated-model log-likelihood is
zero for ungrouped binary data), and equals the sum of squared deviance
residuals. McFadden’s pseudo-R² compares the fitted log-likelihood to
the intercept-only model; it is bounded in [0, 1) but runs lower than an
OLS R² for comparable fits, so judge it on that scale.
Sourcepub fn hosmer_lemeshow(&self, groups: usize) -> HosmerLemeshow
pub fn hosmer_lemeshow(&self, groups: usize) -> HosmerLemeshow
Hosmer–Lemeshow goodness-of-fit test with groups risk deciles
(groups = 10 is the customary choice).
Observations are ordered by fitted probability and split into groups
near-equal bins; the statistic compares observed and expected event counts
per bin,
Ĥ = Σ_g (O_g − E_g)² / (n_g · π̄_g · (1 − π̄_g)),
which is asymptotically χ²(groups − 2). Unlike most tests here, a small p-value means the model fits poorly. Bins whose mean probability is exactly 0 or 1 contribute nothing (their variance term is undefined).
The test is only meaningful when groups ≥ 3 and there are enough
observations to populate the bins; with fewer than groups + 1
observations the statistic is returned as NaN.
Trait Implementations§
Source§impl Clone for LogisticFit
impl Clone for LogisticFit
Source§fn clone(&self) -> LogisticFit
fn clone(&self) -> LogisticFit
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for LogisticFit
impl RefUnwindSafe for LogisticFit
impl Send for LogisticFit
impl Sync for LogisticFit
impl Unpin for LogisticFit
impl UnsafeUnpin for LogisticFit
impl UnwindSafe for LogisticFit
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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.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.