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.
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]
&'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);
Implementors
impl Rv<f32> for ChiSquared
[src]
impl Rv<f32> for ChiSquared
[src]impl Rv<f32> for Exponential
[src]
impl Rv<f32> for Exponential
[src]impl Rv<f32> for InvChiSquared
[src]
impl Rv<f32> for InvChiSquared
[src]impl Rv<f32> for InvGaussian
[src]
impl Rv<f32> for InvGaussian
[src]impl Rv<f32> for KsTwoAsymptotic
[src]
impl Rv<f32> for KsTwoAsymptotic
[src]impl Rv<f32> for Kumaraswamy
[src]
impl Rv<f32> for Kumaraswamy
[src]impl Rv<f32> for ScaledInvChiSquared
[src]
impl Rv<f32> for ScaledInvChiSquared
[src]impl Rv<f64> for ChiSquared
[src]
impl Rv<f64> for ChiSquared
[src]impl Rv<f64> for Exponential
[src]
impl Rv<f64> for Exponential
[src]impl Rv<f64> for InvChiSquared
[src]
impl Rv<f64> for InvChiSquared
[src]impl Rv<f64> for InvGaussian
[src]
impl Rv<f64> for InvGaussian
[src]impl Rv<f64> for KsTwoAsymptotic
[src]
impl Rv<f64> for KsTwoAsymptotic
[src]impl Rv<f64> for Kumaraswamy
[src]
impl Rv<f64> for Kumaraswamy
[src]impl Rv<f64> for ScaledInvChiSquared
[src]
impl Rv<f64> for ScaledInvChiSquared
[src]impl Rv<i8> for BetaBinomial
[src]
impl Rv<i8> for BetaBinomial
[src]impl Rv<i16> for BetaBinomial
[src]
impl Rv<i16> for BetaBinomial
[src]impl Rv<i32> for BetaBinomial
[src]
impl Rv<i32> for BetaBinomial
[src]impl Rv<i64> for BetaBinomial
[src]
impl Rv<i64> for BetaBinomial
[src]impl Rv<u8> for BetaBinomial
[src]
impl Rv<u8> for BetaBinomial
[src]impl Rv<u8> for NegBinomial
[src]
impl Rv<u8> for NegBinomial
[src]impl Rv<u16> for BetaBinomial
[src]
impl Rv<u16> for BetaBinomial
[src]impl Rv<u16> for NegBinomial
[src]
impl Rv<u16> for NegBinomial
[src]impl Rv<u32> for BetaBinomial
[src]
impl Rv<u32> for BetaBinomial
[src]impl Rv<u32> for NegBinomial
[src]
impl Rv<u32> for NegBinomial
[src]impl Rv<u64> for BetaBinomial
[src]
impl Rv<u64> for BetaBinomial
[src]impl Rv<usize> for BetaBinomial
[src]
impl Rv<usize> for BetaBinomial
[src]impl Rv<Categorical> for Dirichlet
[src]
impl Rv<Categorical> for Dirichlet
[src]fn ln_f(&self, x: &Categorical) -> f64
[src]
fn draw<R: Rng>(&self, rng: &mut R) -> Categorical
[src]
impl Rv<Categorical> for SymmetricDirichlet
[src]
impl Rv<Categorical> for SymmetricDirichlet
[src]fn ln_f(&self, x: &Categorical) -> f64
[src]
fn draw<R: Rng>(&self, rng: &mut R) -> Categorical
[src]
impl Rv<Gaussian> for NormalGamma
[src]
impl Rv<Gaussian> for NormalGamma
[src]impl Rv<Gaussian> for NormalInvChiSquared
[src]
impl Rv<Gaussian> for NormalInvChiSquared
[src]impl Rv<Gaussian> for NormalInvGamma
[src]
impl Rv<Gaussian> for NormalInvGamma
[src]impl Rv<MvGaussian> for NormalInvWishart
[src]
impl Rv<MvGaussian> for NormalInvWishart
[src]fn ln_f(&self, x: &MvGaussian) -> f64
[src]
fn draw<R: Rng>(&self, rng: &mut R) -> MvGaussian
[src]
impl Rv<Matrix<f64, Dynamic, Dynamic, <DefaultAllocator as Allocator<f64, Dynamic, Dynamic>>::Buffer>> for InvWishart
[src]
impl Rv<Matrix<f64, Dynamic, Dynamic, <DefaultAllocator as Allocator<f64, Dynamic, Dynamic>>::Buffer>> for InvWishart
[src]impl<X> Rv<X> for Geometric where
X: Unsigned + Integer + FromPrimitive + ToPrimitive + Saturating + Bounded,
[src]
impl<X> Rv<X> for Geometric where
X: Unsigned + Integer + FromPrimitive + ToPrimitive + Saturating + Bounded,
[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, 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, T> Rv<X> for DiscreteUniform<T> where
T: DuParam + SampleUniform + Copy,
X: Integer + From<T>,
[src]