Trait Distribution

Source
pub trait Distribution: From<Self::Params> {
    type Support: Space;
    type Params;

    // Required methods
    fn support(&self) -> Self::Support;
    fn params(&self) -> Self::Params;
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Sample<Self>;

    // Provided methods
    fn into_support(self) -> Self::Support { ... }
    fn into_params(self) -> Self::Params { ... }
    fn cdf(&self, x: &Sample<Self>) -> Probability { ... }
    fn ccdf(&self, x: &Sample<Self>) -> Probability { ... }
    fn log_cdf(&self, x: &Sample<Self>) -> f64 { ... }
    fn log_ccdf(&self, x: &Sample<Self>) -> f64 { ... }
    fn sample_n<R: Rng + ?Sized>(
        &self,
        rng: &mut R,
        n: usize,
    ) -> Vec<Sample<Self>>  { ... }
    fn sample_iter<'a, R: Rng + ?Sized>(
        &'a self,
        rng: &'a mut R,
    ) -> Sampler<'a, Self, R>  { ... }
}
Expand description

Trait for probability distributions with a well-defined CDF.

Required Associated Types§

Source

type Support: Space

Support of sample elements.

Source

type Params

Parameter set uniquely defining the instance.

Required Methods§

Source

fn support(&self) -> Self::Support

Returns an instance of the support Space, Self::Support.

§Examples
let dist = univariate::beta::Beta::default();
let support = dist.support();

assert_eq!(support.dim(), Dim::Finite(1));
assert_eq!(support.inf().unwrap(), 0.0);
assert_eq!(support.sup().unwrap(), 1.0);
Source

fn params(&self) -> Self::Params

Returns an instance of the distribution parameters, Self::Params.

§Examples
let dist = univariate::normal::Normal::standard();
let params = dist.params();

assert_eq!(params.mu.value(), &0.0);
assert_eq!(params.Sigma.value(), &1.0);
Source

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Sample<Self>

Draw a random value from the distribution support.

Provided Methods§

Source

fn into_support(self) -> Self::Support

Converts self into an instance of Self::Support.

Source

fn into_params(self) -> Self::Params

Converts self into an instance of Self::Params.

Source

fn cdf(&self, x: &Sample<Self>) -> Probability

Evaluates the cumulative distribution function (CDF) at \(x\).

The CDF is defined as the probability that a random variable \(X\) takes on a value less than or equal to \(x\), i.e. \(F(x) = P(X \leq x)\).

§Examples
let dist = univariate::normal::Normal::standard();

assert_eq!(dist.cdf(&f64::NEG_INFINITY), Probability::zero());
assert_eq!(dist.cdf(&0.0), Probability::half());
assert_eq!(dist.cdf(&f64::INFINITY), Probability::one());
Source

fn ccdf(&self, x: &Sample<Self>) -> Probability

Evaluates the complementary CDF at \(x\).

The complementary CDF (also known as the survival function) is defined as the probability that a random variable \(X\) takes on a value strictly greater than \(x\), i.e. \(\bar{F}(x) = P(X > x) = 1 - F(x)\).

Source

fn log_cdf(&self, x: &Sample<Self>) -> f64

Evaluates the log CDF at \(x\), i.e. \(\ln{F(x)}\).

Source

fn log_ccdf(&self, x: &Sample<Self>) -> f64

Evaluates the log complementary CDF at \(x\), i.e. \(\ln{(1 - F(x))}\).

Source

fn sample_n<R: Rng + ?Sized>(&self, rng: &mut R, n: usize) -> Vec<Sample<Self>>

Draw n random value from the distribution support.

Source

fn sample_iter<'a, R: Rng + ?Sized>( &'a self, rng: &'a mut R, ) -> Sampler<'a, Self, R>

Draw an indefinite number of random values from the distribution support.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl Distribution for Dirichlet

Source§

impl Distribution for Multinomial

Source§

impl Distribution for BvNormal

Source§

impl Distribution for MvNormal

Source§

impl Distribution for PairedNormal

Source§

impl Distribution for UvNormal

Source§

impl Distribution for Arcsine

Source§

impl Distribution for Bernoulli

Source§

impl Distribution for Beta

Source§

impl Distribution for BetaBinomial

Source§

impl Distribution for BetaPrime

Source§

impl Distribution for Binomial

Source§

impl Distribution for Categorical

Source§

impl Distribution for Cauchy

Source§

impl Distribution for Chi

Source§

impl Distribution for ChiSq

Source§

impl Distribution for Cosine

Source§

impl Distribution for Erlang

Source§

impl Distribution for Exponential

Source§

impl Distribution for FDist

Source§

impl Distribution for FoldedNormal

Source§

impl Distribution for Frechet

Source§

impl Distribution for Gamma

Source§

impl Distribution for Geometric

Source§

impl Distribution for GeneralisedExtremeValue

Source§

impl Distribution for GeneralisedPareto

Source§

impl Distribution for Gumbel

Source§

impl Distribution for InvGamma

Source§

impl Distribution for InvNormal

Source§

impl Distribution for Kumaraswamy

Source§

impl Distribution for Laplace

Source§

impl Distribution for Levy

Source§

impl Distribution for Logistic

Source§

impl Distribution for Pareto

Source§

impl Distribution for Poisson

Source§

impl Distribution for Rayleigh

Source§

impl Distribution for StudentT

Source§

impl Distribution for Triangular

Source§

impl Distribution for Uniform<f64>

Source§

impl Distribution for Uniform<i64>

Source§

impl Distribution for Weibull

Source§

impl Distribution for DiagonalNormal

Source§

impl Distribution for IsotropicNormal

Source§

impl<C: Distribution> Distribution for Mixture<C>
where C::Support: Union + Clone,

Source§

impl<S> Distribution for LogNormal<S>
where Normal<Vector<f64>, S>: From<Params<S>> + Distribution<Support = ProductSpace<Reals>, Params = Params<S>>,