numra_stats/distributions/
mod.rs1use numra_core::Scalar;
8
9pub mod beta_dist;
10pub mod binomial;
11pub mod chi_squared;
12pub mod exponential;
13pub mod f_dist;
14pub mod gamma_dist;
15pub mod lognormal;
16pub mod normal;
17pub mod poisson;
18pub mod student_t;
19pub mod uniform;
20
21pub trait ContinuousDistribution<S: Scalar> {
23 fn pdf(&self, x: S) -> S;
25
26 fn cdf(&self, x: S) -> S;
28
29 fn quantile(&self, p: S) -> S;
31
32 fn mean(&self) -> S;
34
35 fn variance(&self) -> S;
37
38 fn std_dev(&self) -> S {
40 self.variance().sqrt()
41 }
42
43 fn sample(&self, rng: &mut dyn RngCore) -> S;
45
46 fn sample_n(&self, rng: &mut dyn RngCore, n: usize) -> Vec<S> {
48 (0..n).map(|_| self.sample(rng)).collect()
49 }
50}
51
52pub trait DiscreteDistribution<S: Scalar> {
54 fn pmf(&self, k: usize) -> S;
56
57 fn cdf(&self, k: usize) -> S;
59
60 fn mean(&self) -> S;
62
63 fn variance(&self) -> S;
65
66 fn sample(&self, rng: &mut dyn RngCore) -> usize;
68
69 fn sample_n(&self, rng: &mut dyn RngCore, n: usize) -> Vec<usize> {
71 (0..n).map(|_| self.sample(rng)).collect()
72 }
73}
74
75pub use rand::RngCore;
77
78pub use beta_dist::BetaDist;
79pub use binomial::Binomial;
80pub use chi_squared::ChiSquared;
81pub use exponential::Exponential;
82pub use f_dist::FDist;
83pub use gamma_dist::GammaDist;
84pub use lognormal::LogNormal;
85pub use normal::Normal;
86pub use poisson::Poisson;
87pub use student_t::StudentT;
88pub use uniform::Uniform;