Trait rv::traits::Rv

source ·
pub trait Rv<X> {
    // Required methods
    fn ln_f(&self, x: &X) -> f64;
    fn draw<R: Rng>(&self, rng: &mut R) -> X;

    // Provided methods
    fn f(&self, x: &X) -> f64 { ... }
    fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X> { ... }
    fn sample_stream<'r, R: Rng>(
        &'r self,
        rng: &'r mut R
    ) -> Box<dyn Iterator<Item = X> + 'r> { ... }
}
Expand description

Random variable

Contains the minimal functionality that a random object must have to be useful: a function defining the un-normalized density/mass at a point, and functions to draw samples from the distribution.

Required Methods§

source

fn ln_f(&self, x: &X) -> f64

Probability function

§Example
use rv::dist::Gaussian;
use rv::traits::Rv;

let g = Gaussian::standard();
assert!(g.ln_f(&0.0_f64) > g.ln_f(&0.1_f64));
assert!(g.ln_f(&0.0_f64) > g.ln_f(&-0.1_f64));
source

fn draw<R: Rng>(&self, rng: &mut R) -> X

Single draw from the Rv

§Example

Flip a coin

use rv::dist::Bernoulli;
use rv::traits::Rv;

let b = Bernoulli::uniform();
let mut rng = rand::thread_rng();
let x: bool = b.draw(&mut rng); // could be true, could be false.

Provided Methods§

source

fn f(&self, x: &X) -> f64

Probability function

§Example
use rv::dist::Gaussian;
use rv::traits::Rv;

let g = Gaussian::standard();
assert!(g.f(&0.0_f64) > g.f(&0.1_f64));
assert!(g.f(&0.0_f64) > g.f(&-0.1_f64));
source

fn sample<R: Rng>(&self, n: usize, rng: &mut R) -> Vec<X>

Multiple draws of the Rv

§Example

Flip a lot of coins

use rv::dist::Bernoulli;
use rv::traits::Rv;

let b = Bernoulli::uniform();
let mut rng = rand::thread_rng();
let xs: Vec<bool> = b.sample(22, &mut rng);

assert_eq!(xs.len(), 22);

Estimate Gaussian mean

use rv::dist::Gaussian;
use rv::traits::Rv;

let gauss = Gaussian::standard();
let mut rng = rand::thread_rng();
let xs: Vec<f64> = gauss.sample(100_000, &mut rng);

assert::close(xs.iter().sum::<f64>()/100_000.0, 0.0, 1e-2);
source

fn sample_stream<'r, R: Rng>( &'r self, rng: &'r mut R ) -> Box<dyn Iterator<Item = X> + 'r>

Create a never-ending iterator of samples

§Example

Estimate the mean of a Gamma distribution

use rv::traits::Rv;
use rv::dist::Gamma;

let mut rng = rand::thread_rng();

let gamma = Gamma::new(2.0, 1.0).unwrap();

let n = 1_000_000_usize;
let mean = <Gamma as Rv<f64>>::sample_stream(&gamma, &mut rng)
    .take(n)
    .sum::<f64>() / n as f64;;

assert::close(mean, 2.0, 1e-2);

Object Safety§

This trait is not object safe.

Implementors§

source§

impl Rv<Datum> for Distribution

source§

impl Rv<Datum> for Mixture<Vec<Distribution>>

source§

impl Rv<Datum> for ProductDistribution

source§

impl Rv<f32> for Beta

source§

impl Rv<f32> for Cauchy

source§

impl Rv<f32> for ChiSquared

source§

impl Rv<f32> for Exponential

source§

impl Rv<f32> for Gamma

source§

impl Rv<f32> for Gaussian

source§

impl Rv<f32> for Gev

source§

impl Rv<f32> for InvChiSquared

source§

impl Rv<f32> for InvGamma

source§

impl Rv<f32> for InvGaussian

source§

impl Rv<f32> for KsTwoAsymptotic

source§

impl Rv<f32> for Kumaraswamy

source§

impl Rv<f32> for Laplace

source§

impl Rv<f32> for LogNormal

source§

impl Rv<f32> for Pareto

source§

impl Rv<f32> for ScaledInvChiSquared

source§

impl Rv<f32> for StudentsT

source§

impl Rv<f32> for Uniform

source§

impl Rv<f32> for UnitPowerLaw

source§

impl Rv<f32> for VonMises

source§

impl Rv<f64> for Beta

source§

impl Rv<f64> for Cauchy

source§

impl Rv<f64> for ChiSquared

source§

impl Rv<f64> for Empirical

source§

impl Rv<f64> for Exponential

source§

impl Rv<f64> for Gamma

source§

impl Rv<f64> for Gaussian

source§

impl Rv<f64> for Gev

source§

impl Rv<f64> for InvChiSquared

source§

impl Rv<f64> for InvGamma

source§

impl Rv<f64> for InvGaussian

source§

impl Rv<f64> for KsTwoAsymptotic

source§

impl Rv<f64> for Kumaraswamy

source§

impl Rv<f64> for Laplace

source§

impl Rv<f64> for LogNormal

source§

impl Rv<f64> for Pareto

source§

impl Rv<f64> for ScaledInvChiSquared

source§

impl Rv<f64> for StudentsT

source§

impl Rv<f64> for Uniform

source§

impl Rv<f64> for UnitPowerLaw

source§

impl Rv<f64> for VonMises

source§

impl Rv<i8> for BetaBinomial

source§

impl Rv<i8> for Binomial

source§

impl Rv<i8> for Skellam

source§

impl Rv<i16> for BetaBinomial

source§

impl Rv<i16> for Binomial

source§

impl Rv<i16> for Skellam

source§

impl Rv<i32> for BetaBinomial

source§

impl Rv<i32> for Binomial

source§

impl Rv<i32> for Skellam

source§

impl Rv<i64> for BetaBinomial

source§

impl Rv<i64> for Binomial

source§

impl Rv<u8> for BetaBinomial

source§

impl Rv<u8> for Binomial

source§

impl Rv<u8> for NegBinomial

source§

impl Rv<u8> for Poisson

source§

impl Rv<u16> for BetaBinomial

source§

impl Rv<u16> for Binomial

source§

impl Rv<u16> for NegBinomial

source§

impl Rv<u16> for Poisson

source§

impl Rv<u32> for BetaBinomial

source§

impl Rv<u32> for Binomial

source§

impl Rv<u32> for NegBinomial

source§

impl Rv<u32> for Poisson

source§

impl Rv<u64> for BetaBinomial

source§

impl Rv<u64> for Binomial

source§

impl Rv<usize> for BetaBinomial

source§

impl Rv<usize> for Binomial

source§

impl Rv<usize> for Poisson

source§

impl Rv<Partition> for Crp

source§

impl Rv<Bernoulli> for Beta

source§

impl Rv<Categorical> for Dirichlet

source§

impl Rv<Categorical> for SymmetricDirichlet

source§

impl Rv<Gaussian> for NormalGamma

source§

impl Rv<Gaussian> for NormalInvChiSquared

source§

impl Rv<Gaussian> for NormalInvGamma

source§

impl Rv<MvGaussian> for NormalInvWishart

source§

impl Rv<Poisson> for Gamma

source§

impl Rv<Vec<Datum>> for ProductDistribution

source§

impl Rv<Vec<f64>> for Dirichlet

source§

impl Rv<Vec<f64>> for SymmetricDirichlet

source§

impl Rv<Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>> for MvGaussian

source§

impl Rv<Matrix<f64, Dyn, Dyn, VecStorage<f64, Dyn, Dyn>>> for InvWishart

source§

impl<Fx> Rv<Datum> for Fx
where Fx: RvDatum,

source§

impl<K> Rv<Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>> for GaussianProcessPrediction<K>
where K: Kernel,

source§

impl<X> Rv<X> for Geometric

source§

impl<X, Fx> Rv<X> for Mixture<Fx>
where Fx: Rv<X>,

source§

impl<X, Fx, Pr> Rv<X> for ConjugateModel<X, Fx, Pr>
where Fx: Rv<X> + HasSuffStat<X>, Pr: ConjugatePrior<X, Fx>,

source§

impl<X, T> Rv<X> for DiscreteUniform<T>
where T: DuParam + SampleUniform + Copy, X: Integer + From<T>,

source§

impl<X: Booleable> Rv<X> for Bernoulli

source§

impl<X: CategoricalDatum> Rv<X> for Categorical