Struct rv::dist::Poisson

source ·
pub struct Poisson { /* private fields */ }
Expand description

Possion distribution over x in {0, 1, … }.

Example

use rv::prelude::*;

// Create Poisson(λ=5.3)
let pois = Poisson::new(5.3).unwrap();

// CDF at 5
assert!((pois.cdf(&5_u16) - 0.56347339228807169).abs() < 1E-12);

// Draw 100 samples
let mut rng = rand::thread_rng();
let xs: Vec<u32> = pois.sample(100, &mut rng);
assert_eq!(xs.len(), 100)

The Poisson can have two modes. The modes are distinct only if the rate is an integer.

{
    let pois = Poisson::new(2.0).unwrap();
    let modes: (u32, u32) = pois.mode().unwrap();

    assert_eq!(modes, (1, 2))
}

{
    let pois = Poisson::new(2.1).unwrap();
    let modes: (u32, u32) = pois.mode().unwrap();

    assert_eq!(modes, (2, 2))
}

If we know that the rate is not an integer, or we only care about one of the modes, we can call mode for an unsigned type, which will return the leftmost (lowest) mode.

let pois = Poisson::new(2.1).unwrap();
let mode: u32 = pois.mode().unwrap();

assert_eq!(mode, 2)

Implementations§

source§

impl Poisson

source

pub fn new(rate: f64) -> Result<Self, PoissonError>

Create a new Poisson distribution with given rate

source

pub fn new_unchecked(rate: f64) -> Self

Creates a new Poisson without checking whether the parameter is valid.

source

pub fn rate(&self) -> f64

Get the rate parameter

Example
let pois = Poisson::new(2.0).unwrap();
assert_eq!(pois.rate(), 2.0);
source

pub fn set_rate(&mut self, rate: f64) -> Result<(), PoissonError>

Set the rate parameter

Example
use rv::dist::Poisson;
let mut pois = Poisson::new(1.0).unwrap();
assert_eq!(pois.rate(), 1.0);

pois.set_rate(1.1).unwrap();
assert_eq!(pois.rate(), 1.1);

Will error for invalid values

assert!(pois.set_rate(1.1).is_ok());
assert!(pois.set_rate(0.0).is_err());
assert!(pois.set_rate(-1.0).is_err());
assert!(pois.set_rate(std::f64::INFINITY).is_err());
assert!(pois.set_rate(std::f64::NEG_INFINITY).is_err());
assert!(pois.set_rate(std::f64::NAN).is_err());
source

pub fn set_rate_unchecked(&mut self, rate: f64)

Set the rate parameter without input validation

Trait Implementations§

source§

impl Cdf<u16> for Poisson

source§

fn cdf(&self, x: &u16) -> f64

The value of the Cumulative Density Function at x Read more
source§

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

Survival function, 1 - CDF(x)
source§

impl Cdf<u32> for Poisson

source§

fn cdf(&self, x: &u32) -> f64

The value of the Cumulative Density Function at x Read more
source§

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

Survival function, 1 - CDF(x)
source§

impl Cdf<u8> for Poisson

source§

fn cdf(&self, x: &u8) -> f64

The value of the Cumulative Density Function at x Read more
source§

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

Survival function, 1 - CDF(x)
source§

impl Cdf<usize> for Poisson

source§

fn cdf(&self, x: &usize) -> f64

The value of the Cumulative Density Function at x Read more
source§

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

Survival function, 1 - CDF(x)
source§

impl Clone for Poisson

source§

fn clone(&self) -> Poisson

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl ConjugatePrior<u16, Poisson> for Gamma

§

type Posterior = Gamma

Type of the posterior distribution
§

type LnMCache = f64

Type of the ln_m cache
§

type LnPpCache = (f64, f64, f64)

Type of the ln_pp cache
source§

fn posterior(&self, x: &DataOrSuffStat<'_, u16, Poisson>) -> Self

Computes the posterior distribution from the data
source§

fn ln_m_cache(&self) -> Self::LnMCache

Compute the cache for the log marginal likelihood.
source§

fn ln_m_with_cache( &self, cache: &Self::LnMCache, x: &DataOrSuffStat<'_, u16, Poisson> ) -> f64

Log marginal likelihood with supplied cache.
source§

fn ln_pp_cache(&self, x: &DataOrSuffStat<'_, u16, Poisson>) -> Self::LnPpCache

Compute the cache for the Log posterior predictive of y given x. Read more
source§

fn ln_pp_with_cache(&self, cache: &Self::LnPpCache, y: &u16) -> f64

Log posterior predictive of y given x with supplied ln(norm)
source§

fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

The log marginal likelihood
source§

fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Log posterior predictive of y given x
source§

fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Marginal likelihood of x
source§

fn pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Posterior Predictive distribution
source§

impl ConjugatePrior<u32, Poisson> for Gamma

§

type Posterior = Gamma

Type of the posterior distribution
§

type LnMCache = f64

Type of the ln_m cache
§

type LnPpCache = (f64, f64, f64)

Type of the ln_pp cache
source§

fn posterior(&self, x: &DataOrSuffStat<'_, u32, Poisson>) -> Self

Computes the posterior distribution from the data
source§

fn ln_m_cache(&self) -> Self::LnMCache

Compute the cache for the log marginal likelihood.
source§

fn ln_m_with_cache( &self, cache: &Self::LnMCache, x: &DataOrSuffStat<'_, u32, Poisson> ) -> f64

Log marginal likelihood with supplied cache.
source§

fn ln_pp_cache(&self, x: &DataOrSuffStat<'_, u32, Poisson>) -> Self::LnPpCache

Compute the cache for the Log posterior predictive of y given x. Read more
source§

fn ln_pp_with_cache(&self, cache: &Self::LnPpCache, y: &u32) -> f64

Log posterior predictive of y given x with supplied ln(norm)
source§

fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

The log marginal likelihood
source§

fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Log posterior predictive of y given x
source§

fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Marginal likelihood of x
source§

fn pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Posterior Predictive distribution
source§

impl ConjugatePrior<u8, Poisson> for Gamma

§

type Posterior = Gamma

Type of the posterior distribution
§

type LnMCache = f64

Type of the ln_m cache
§

type LnPpCache = (f64, f64, f64)

Type of the ln_pp cache
source§

fn posterior(&self, x: &DataOrSuffStat<'_, u8, Poisson>) -> Self

Computes the posterior distribution from the data
source§

fn ln_m_cache(&self) -> Self::LnMCache

Compute the cache for the log marginal likelihood.
source§

fn ln_m_with_cache( &self, cache: &Self::LnMCache, x: &DataOrSuffStat<'_, u8, Poisson> ) -> f64

Log marginal likelihood with supplied cache.
source§

fn ln_pp_cache(&self, x: &DataOrSuffStat<'_, u8, Poisson>) -> Self::LnPpCache

Compute the cache for the Log posterior predictive of y given x. Read more
source§

fn ln_pp_with_cache(&self, cache: &Self::LnPpCache, y: &u8) -> f64

Log posterior predictive of y given x with supplied ln(norm)
source§

fn ln_m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

The log marginal likelihood
source§

fn ln_pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Log posterior predictive of y given x
source§

fn m(&self, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Marginal likelihood of x
source§

fn pp(&self, y: &X, x: &DataOrSuffStat<'_, X, Fx>) -> f64

Posterior Predictive distribution
source§

impl ContinuousDistr<Poisson> for Gamma

source§

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

The value of the Probability Density Function (PDF) at x Read more
source§

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

The value of the log Probability Density Function (PDF) at x Read more
source§

impl Debug for Poisson

source§

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

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

impl<'de> Deserialize<'de> for Poisson

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl DiscreteDistr<u16> for Poisson

source§

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

Probability mass function (PMF) at x Read more
source§

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

Natural logarithm of the probability mass function (PMF) Read more
source§

impl DiscreteDistr<u32> for Poisson

source§

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

Probability mass function (PMF) at x Read more
source§

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

Natural logarithm of the probability mass function (PMF) Read more
source§

impl DiscreteDistr<u8> for Poisson

source§

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

Probability mass function (PMF) at x Read more
source§

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

Natural logarithm of the probability mass function (PMF) Read more
source§

impl DiscreteDistr<usize> for Poisson

source§

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

Probability mass function (PMF) at x Read more
source§

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

Natural logarithm of the probability mass function (PMF) Read more
source§

impl Display for Poisson

source§

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

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

impl Entropy for Poisson

source§

fn entropy(&self) -> f64

The entropy, H(X)
source§

impl From<&Poisson> for String

source§

fn from(pois: &Poisson) -> String

Converts to this type from the input type.
source§

impl HasSuffStat<u16> for Poisson

§

type Stat = PoissonSuffStat

source§

fn empty_suffstat(&self) -> Self::Stat

source§

fn ln_f_stat(&self, stat: &Self::Stat) -> f64

Return the log likelihood for the data represented by the sufficient statistic.
source§

impl HasSuffStat<u32> for Poisson

§

type Stat = PoissonSuffStat

source§

fn empty_suffstat(&self) -> Self::Stat

source§

fn ln_f_stat(&self, stat: &Self::Stat) -> f64

Return the log likelihood for the data represented by the sufficient statistic.
source§

impl HasSuffStat<u8> for Poisson

§

type Stat = PoissonSuffStat

source§

fn empty_suffstat(&self) -> Self::Stat

source§

fn ln_f_stat(&self, stat: &Self::Stat) -> f64

Return the log likelihood for the data represented by the sufficient statistic.
source§

impl HasSuffStat<usize> for Poisson

§

type Stat = PoissonSuffStat

source§

fn empty_suffstat(&self) -> Self::Stat

source§

fn ln_f_stat(&self, stat: &Self::Stat) -> f64

Return the log likelihood for the data represented by the sufficient statistic.
source§

impl KlDivergence for Poisson

source§

fn kl(&self, other: &Poisson) -> f64

The KL divergence, KL(P|Q) between this distribution, P, and another, Q Read more
source§

fn kl_sym(&self, other: &Self) -> f64

Symmetrised divergence, KL(P|Q) + KL(Q|P) Read more
source§

impl Kurtosis for Poisson

source§

impl Mean<f64> for Poisson

source§

fn mean(&self) -> Option<f64>

Returns None if the mean is undefined
source§

impl Mode<(u16, u16)> for Poisson

source§

fn mode(&self) -> Option<(u16, u16)>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<(u32, u32)> for Poisson

source§

fn mode(&self) -> Option<(u32, u32)>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<(u8, u8)> for Poisson

source§

fn mode(&self) -> Option<(u8, u8)>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<(usize, usize)> for Poisson

source§

fn mode(&self) -> Option<(usize, usize)>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<u16> for Poisson

source§

fn mode(&self) -> Option<u16>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<u32> for Poisson

source§

fn mode(&self) -> Option<u32>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<u8> for Poisson

source§

fn mode(&self) -> Option<u8>

Returns None if the mode is undefined or is not a single value
source§

impl Mode<usize> for Poisson

source§

fn mode(&self) -> Option<usize>

Returns None if the mode is undefined or is not a single value
source§

impl PartialEq<Poisson> for Poisson

source§

fn eq(&self, other: &Poisson) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Rv<Poisson> for Gamma

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Probability function Read more
source§

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

Multiple draws of the Rv Read more
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 Read more
source§

impl Rv<u16> for Poisson

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Multiple draws of the Rv Read more
source§

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

Probability function Read more
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 Read more
source§

impl Rv<u32> for Poisson

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Multiple draws of the Rv Read more
source§

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

Probability function Read more
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 Read more
source§

impl Rv<u8> for Poisson

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Multiple draws of the Rv Read more
source§

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

Probability function Read more
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 Read more
source§

impl Rv<usize> for Poisson

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Multiple draws of the Rv Read more
source§

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

Probability function Read more
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 Read more
source§

impl Serialize for Poisson

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Skewness for Poisson

source§

impl Support<Poisson> for Gamma

source§

fn supports(&self, x: &Poisson) -> bool

Returns true if x is in the support of the Rv Read more
source§

impl Support<u16> for Poisson

source§

fn supports(&self, x: &u16) -> bool

Returns true if x is in the support of the Rv Read more
source§

impl Support<u32> for Poisson

source§

fn supports(&self, x: &u32) -> bool

Returns true if x is in the support of the Rv Read more
source§

impl Support<u8> for Poisson

source§

fn supports(&self, x: &u8) -> bool

Returns true if x is in the support of the Rv Read more
source§

impl Support<usize> for Poisson

source§

fn supports(&self, x: &usize) -> bool

Returns true if x is in the support of the Rv Read more
source§

impl Variance<f64> for Poisson

source§

fn variance(&self) -> Option<f64>

Returns None if the variance is undefined

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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<Fx> Rv<Datum> for Fxwhere Fx: RvDatum,

source§

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

Probability function Read more
source§

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

Single draw from the Rv Read more
source§

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

Multiple draws of the Rv Read more
source§

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

Create a never-ending iterator of samples Read more
source§

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

Probability function Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
source§

impl<T> ToOwned for Twhere T: Clone,

§

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 Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
§

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

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,

source§

impl<T> DeserializeOwnedAlias for Twhere T: DeserializeOwned,

source§

impl<T> Scalar for Twhere T: 'static + Clone + PartialEq<T> + Debug,

source§

impl<T> SendAlias for T

§

impl<T> SendSyncUnwindSafe for Twhere T: Send + Sync + UnwindSafe + ?Sized,

source§

impl<T> SerializeAlias for Twhere T: Serialize,

source§

impl<T> SyncAlias for T