Trait rv::traits::Rv[][src]

pub trait Rv<X> {
    fn ln_f(&self, x: &X) -> f64;
fn draw<R: Rng>(&self, rng: &mut R) -> X; 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> { ... } }

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

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

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));

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

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.
Loading content...

Provided methods

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

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));

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

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);

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

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);
Loading content...

Implementors

impl Rv<f32> for Beta[src]

impl Rv<f32> for Cauchy[src]

impl Rv<f32> for ChiSquared[src]

impl Rv<f32> for Exponential[src]

impl Rv<f32> for Gamma[src]

impl Rv<f32> for Gaussian[src]

impl Rv<f32> for Gev[src]

impl Rv<f32> for InvChiSquared[src]

impl Rv<f32> for InvGamma[src]

impl Rv<f32> for InvGaussian[src]

impl Rv<f32> for KsTwoAsymptotic[src]

impl Rv<f32> for Kumaraswamy[src]

impl Rv<f32> for Laplace[src]

impl Rv<f32> for LogNormal[src]

impl Rv<f32> for Pareto[src]

impl Rv<f32> for ScaledInvChiSquared[src]

impl Rv<f32> for StudentsT[src]

impl Rv<f32> for Uniform[src]

impl Rv<f32> for VonMises[src]

impl Rv<f64> for Beta[src]

impl Rv<f64> for Cauchy[src]

impl Rv<f64> for ChiSquared[src]

impl Rv<f64> for Empirical[src]

impl Rv<f64> for Exponential[src]

impl Rv<f64> for Gamma[src]

impl Rv<f64> for Gaussian[src]

impl Rv<f64> for Gev[src]

impl Rv<f64> for InvChiSquared[src]

impl Rv<f64> for InvGamma[src]

impl Rv<f64> for InvGaussian[src]

impl Rv<f64> for KsTwoAsymptotic[src]

impl Rv<f64> for Kumaraswamy[src]

impl Rv<f64> for Laplace[src]

impl Rv<f64> for LogNormal[src]

impl Rv<f64> for Pareto[src]

impl Rv<f64> for ScaledInvChiSquared[src]

impl Rv<f64> for StudentsT[src]

impl Rv<f64> for Uniform[src]

impl Rv<f64> for VonMises[src]

impl Rv<i8> for BetaBinomial[src]

impl Rv<i8> for Binomial[src]

impl Rv<i8> for Skellam[src]

impl Rv<i16> for BetaBinomial[src]

impl Rv<i16> for Binomial[src]

impl Rv<i16> for Skellam[src]

impl Rv<i32> for BetaBinomial[src]

impl Rv<i32> for Binomial[src]

impl Rv<i32> for Skellam[src]

impl Rv<i64> for BetaBinomial[src]

impl Rv<i64> for Binomial[src]

impl Rv<u8> for BetaBinomial[src]

impl Rv<u8> for Binomial[src]

impl Rv<u8> for NegBinomial[src]

impl Rv<u8> for Poisson[src]

impl Rv<u16> for BetaBinomial[src]

impl Rv<u16> for Binomial[src]

impl Rv<u16> for NegBinomial[src]

impl Rv<u16> for Poisson[src]

impl Rv<u32> for BetaBinomial[src]

impl Rv<u32> for Binomial[src]

impl Rv<u32> for NegBinomial[src]

impl Rv<u32> for Poisson[src]

impl Rv<u64> for BetaBinomial[src]

impl Rv<u64> for Binomial[src]

impl Rv<usize> for BetaBinomial[src]

impl Rv<usize> for Binomial[src]

impl Rv<Partition> for Crp[src]

impl Rv<Bernoulli> for Beta[src]

impl Rv<Categorical> for Dirichlet[src]

impl Rv<Categorical> for SymmetricDirichlet[src]

impl Rv<Gaussian> for NormalGamma[src]

impl Rv<Gaussian> for NormalInvChiSquared[src]

impl Rv<Gaussian> for NormalInvGamma[src]

impl Rv<MvGaussian> for NormalInvWishart[src]

impl Rv<Poisson> for Gamma[src]

impl Rv<Vec<f64, Global>> for Dirichlet[src]

impl Rv<Vec<f64, Global>> for SymmetricDirichlet[src]

impl Rv<Matrix<f64, Dynamic, Dynamic, <DefaultAllocator as Allocator<f64, Dynamic, Dynamic>>::Buffer>> for InvWishart[src]

impl Rv<Matrix<f64, Dynamic, U1, VecStorage<f64, Dynamic, U1>>> for MvGaussian[src]

impl<Fx, X> Rv<X> for Fx where
    Fx: Deref,
    Fx::Target: Rv<X>, 
[src]

impl<X> Rv<X> for Geometric where
    X: Unsigned + Integer + FromPrimitive + ToPrimitive + Saturating + Bounded
[src]

impl<X, Fx> Rv<X> for Mixture<Fx> where
    Fx: Rv<X>, 
[src]

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

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

impl<X: Booleable> Rv<X> for Bernoulli[src]

impl<X: CategoricalDatum> Rv<X> for Categorical[src]

Loading content...