Skip to main content

DirichletRegression

Struct DirichletRegression 

Source
pub struct DirichletRegression {
    pub coefficients: Vec<f64>,
    pub precision: f64,
    pub n_parts: usize,
    pub n_covariates: usize,
    pub log_likelihood: f64,
}
Expand description

A Dirichlet GLM fitted by Iteratively Reweighted Least Squares (IRLS).

The model is: ln(E[yⱼ]) = Xβⱼ + offset, with y ~ Dir(φ · μ) where φ (precision) is estimated jointly.

For simplicity this implementation uses a reduced model:

  • Intercept-only mean model for each part
  • Single precision parameter φ estimated from variance

For a full covariate model, use DirichletRegression which supports design matrices.

Fields§

§coefficients: Vec<f64>

Intercept coefficients for each part (on log-ratio / softmax scale).

§precision: f64

Precision parameter φ = Σ αⱼ > 0.

§n_parts: usize

Number of parts D.

§n_covariates: usize

Number of covariates (including intercept).

§log_likelihood: f64

Log-likelihood at fitted parameters.

Implementations§

Source§

impl DirichletRegression

Source

pub fn fit(responses: &[Vec<f64>], covariates: &[Vec<f64>]) -> StatsResult<Self>

Fit a Dirichlet regression model to compositional response data.

responses: N × D matrix (as Vec<Vec<f64>>) of compositional observations. covariates: N × P matrix of covariates (each row is one observation’s features). Pass an empty inner vec or &[] to fit an intercept-only model.

Uses IRLS to maximise the Dirichlet log-likelihood.

§Errors

Returns an error if:

  • responses is empty or has inconsistent dimensions.
  • Any response row contains non-positive components.
  • The algorithm encounters a numerical degeneracy.
§Examples
use scirs2_stats::compositional::DirichletRegression;
let responses = vec![
    vec![0.3, 0.4, 0.3],
    vec![0.2, 0.5, 0.3],
    vec![0.4, 0.3, 0.3],
    vec![0.25, 0.35, 0.4],
];
let covariates: Vec<Vec<f64>> = vec![vec![]; 4]; // intercept-only
let model = DirichletRegression::fit(&responses, &covariates).unwrap();
assert_eq!(model.n_parts, 3);
assert!(model.precision > 0.0);
Source

pub fn predict(&self, x: &[f64]) -> StatsResult<Vec<f64>>

Predict the expected composition for a new covariate vector x.

Returns a closed composition summing to 1.

§Errors

Returns an error if x has the wrong length.

§Examples
use scirs2_stats::compositional::DirichletRegression;
let responses = vec![
    vec![0.3, 0.4, 0.3],
    vec![0.2, 0.5, 0.3],
    vec![0.4, 0.3, 0.3],
    vec![0.25, 0.35, 0.4],
];
let covariates: Vec<Vec<f64>> = vec![vec![]; 4];
let model = DirichletRegression::fit(&responses, &covariates).unwrap();
let pred = model.predict(&[]).unwrap();
let sum: f64 = pred.iter().sum();
assert!((sum - 1.0).abs() < 1e-12);

Trait Implementations§

Source§

impl Clone for DirichletRegression

Source§

fn clone(&self) -> DirichletRegression

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 DirichletRegression

Source§

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

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

impl Display for DirichletRegression

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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<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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<T> Ungil for T
where T: Send,

Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more