|
RandLib 2.0.0
Probability distributions, fitting, and heavy-tail tools for C++20
|
The BinomialDistribution class
Abstract class for Binomial distribution.
More...
#include <binomial.hpp>


Public Member Functions | |
| Support | SupportType () const override |
| IntType | MinValue () const override |
| IntType | MaxValue () const override |
| IntType | GetNumber () const noexcept |
| double | GetProbability () const noexcept |
| double | SufficientStatistic (IntType x) const override |
| double | SourceParameters () const override |
| double | SourceToNatural (double sourceParameters) const override |
| double | NaturalParameters () const override |
| double | LogNormalizer (double theta) const override |
| double | LogNormalizerGradient (double theta) const override |
| double | CarrierMeasure (IntType x) const override |
| double | EntropyAdjusted () const override |
| double | P (const IntType &k) const override |
| double | logP (const IntType &k) const override |
| double | F (const IntType &k) const override |
| double | S (const IntType &k) const override |
| template<std::uniform_random_bit_generator G> | |
| IntType | operator() (G &g) const |
| long double | Mean () const override |
| long double | Variance () const override |
| IntType | Median () const override |
| IntType | Mode () const override |
| Mode is the value, which has the largest probability to happen, or, in the case of continuous distribution, has the largest value of density function. | |
| long double | Skewness () const override |
| long double | ExcessKurtosis () const override |
| double | GetLogFactorialN () const noexcept |
| double | GetLogProbability () const noexcept |
| double | GetLog1mProbability () const noexcept |
| void | FitProbability (std::span< const IntType > sample) |
| Fit probability p with maximum-likelihood estimation. | |
| BetaRand | FitProbabilityBayes (std::span< const IntType > sample, const BetaDistribution<> &priorDistribution, bool MAP=false) |
| Fit probability p with prior assumption p ~ Beta(α, β) | |
| BetaRand | FitProbabilityMinimax (std::span< const IntType > sample) |
| Fit probability p with minimax estimator. | |
Public Member Functions inherited from randlib::DiscreteDistribution< IntType > | |
| virtual | ~DiscreteDistribution () |
| void | ProbabilityMassFunction (std::span< const IntType > x, std::span< double > y) const |
| fill vector y with P(x) | |
| void | LogProbabilityMassFunction (std::span< const IntType > x, std::span< double > y) const |
| fill vector y with logP(x) | |
| IntType | Mode () const override |
| Mode is the value, which has the largest probability to happen, or, in the case of continuous distribution, has the largest value of density function. | |
| double | Hazard (const IntType &x) const override |
| double | LikelihoodFunction (std::span< const IntType > sample) const override |
| double | LogLikelihoodFunction (std::span< const IntType > sample) const override |
| bool | PearsonChiSquaredTest (std::span< const IntType > orderStatistic, double alpha, int lowerBoundary, int upperBoundary, size_t numberOfEstimatedParameters=0) const |
| bool | PearsonChiSquaredTest (std::span< const IntType > orderStatistic, double alpha, size_t numberOfEstimatedParameters=0) const |
Public Member Functions inherited from randlib::UnivariateDistribution< IntType > | |
| virtual | ~UnivariateDistribution () |
| bool | isLeftBounded () const |
| bool | isRightBounded () const |
| IntType | Quantile (double p) const |
| IntType | Quantile1m (double p) const |
| void | QuantileFunction (std::span< const double > p, std::span< IntType > y) const |
| void | QuantileFunction1m (std::span< const double > p, std::span< IntType > y) const |
| std::complex< double > | CF (double t) const |
| void | CharacteristicFunction (std::span< const double > t, std::span< std::complex< double > > y) const |
| void | HazardFunction (std::span< const IntType > x, std::span< double > y) const |
| virtual long double | Kurtosis () const |
| virtual long double | SecondMoment () const |
| virtual long double | ThirdMoment () const |
| virtual long double | FourthMoment () const |
Public Member Functions inherited from randlib::ProbabilityDistribution< T > | |
| virtual | ~ProbabilityDistribution ()=default |
| virtual std::string | Name () const =0 |
| virtual double | F (const T &x) const =0 |
| void | CumulativeDistributionFunction (std::span< const T > x, std::span< double > y) const |
| virtual double | S (const T &x) const |
| void | SurvivalFunction (std::span< const T > x, std::span< double > y) const |
| template<std::uniform_random_bit_generator G> | |
| T | operator() (G &g) const |
| Draws a variate with the given engine through the virtual interface. | |
| T | Variate () const |
| Uses the engine of this object, so it is not thread-safe for one object; use operator() with one engine per thread instead. | |
| void | Sample (std::span< T > outputData) const |
| Fills the output with variates drawn with the engine of this object. | |
| template<std::uniform_random_bit_generator G> | |
| void | Sample (G &g, std::span< T > outputData) const |
| Fills the output with variates drawn with the given engine. | |
| void | Reseed (std::uint64_t seed) |
Public Member Functions inherited from randlib::ExponentialFamily< IntType, double > | |
| ExponentialFamily () | |
| virtual | ~ExponentialFamily () |
| double | ProbabilityMeasure (IntType x) const |
| double | LogProbabilityMeasure (IntType x) const |
| double | KullbackLeiblerDivergence (double parameters) const |
| virtual double | CrossEntropyAdjusted (double parameters) const |
Static Public Member Functions | |
| template<std::uniform_random_bit_generator G> | |
| static IntType | Variate (IntType number, double probability, G &g) |
Static Public Member Functions inherited from randlib::UnivariateDistribution< IntType > | |
| static long double | GetSampleSum (std::span< const IntType > sample) |
| static long double | GetSampleMean (std::span< const IntType > sample) |
| static long double | GetSampleLogMean (std::span< const IntType > sample) |
| static long double | GetSampleVariance (std::span< const IntType > sample, double mean) |
| static long double | GetSampleLogVariance (std::span< const IntType > sample, double logMean) |
| static LongDoublePair | GetSampleMeanAndVariance (std::span< const IntType > sample) |
| static LongDoublePair | GetSampleLogMeanAndVariance (std::span< const IntType > sample) |
| static std::tuple< long double, long double, long double, long double > | GetSampleStatistics (std::span< const IntType > sample) |
Protected Member Functions | |
| BinomialDistribution (IntType number, double probability) | |
| void | SetParameters (IntType number, double probability) |
Protected Member Functions inherited from randlib::DiscreteDistribution< IntType > | |
| DiscreteDistribution () | |
| IntType | quantileImpl (double p, IntType initValue) const override |
| IntType | quantileImpl (double p) const override |
| IntType | quantileImpl1m (double p, IntType initValue) const override |
| IntType | quantileImpl1m (double p) const override |
| long double | ExpectedValue (const std::function< double(IntType)> &funPtr, IntType minPoint, IntType maxPoint) const override |
| std::complex< double > | CFImpl (double t) const override |
Protected Member Functions inherited from randlib::UnivariateDistribution< IntType > | |
| UnivariateDistribution () | |
Protected Member Functions inherited from randlib::ProbabilityDistribution< T > | |
| std::string | toStringWithPrecision (const double a_value, const int n=6) const |
| ProbabilityDistribution ()=default | |
| DefaultEngine & | engine () const |
| virtual void | sample (detail::EngineRef g, std::span< T > outputData) const |
| Fills the output with variate(g); distributions with a faster bulk algorithm override it. | |
| fit_error | fitError (FitErrorCode code, const std::string &explanation) const |
Protected Attributes | |
| double | p = 0.5 |
| probability of success | |
| double | q = 0.5 |
| probability of failure | |
| double | logProb = -randlib::consts::ln2 |
| log(p) | |
| double | log1mProb = -randlib::consts::ln2 |
| log(q) | |
Additional Inherited Members | |
Public Types inherited from randlib::ProbabilityDistribution< T > | |
| using | value_type = T |
Static Protected Member Functions inherited from randlib::UnivariateDistribution< IntType > | |
| static bool | allElementsAreNotGreaterThan (IntType value, std::span< const IntType > sample) |
| static bool | allElementsAreNotSmallerThan (IntType value, std::span< const IntType > sample) |
| static bool | allElementsAreNonNegative (std::span< const IntType > sample) |
| static bool | allElementsArePositive (std::span< const IntType > sample) |
Static Protected Attributes inherited from randlib::ProbabilityDistribution< T > | |
| static constexpr size_t | MAX_ITER_REJECTION = detail::MAX_ITER_REJECTION |
| MAX_ITER_REJECTION upper boundary for maximum amount of iterations in rejection methods one thousand should be enough to be sure there is a bug (or rejection method is too slow to be used) | |
| static constexpr char | POSITIVITY_VIOLATION [] = "All elements should be positive" |
| static constexpr char | NON_NEGATIVITY_VIOLATION [] = "All elements should be non-negative" |
| static constexpr char | UPPER_LIMIT_VIOLATION [] = "No element should be greater than " |
| static constexpr char | LOWER_LIMIT_VIOLATION [] = "No element should be smaller than " |
The BinomialDistribution class
Abstract class for Binomial distribution.
Notation: X ~ Bin(n, p)
Related distributions:
If X ~ Bin(1, p), then X ~ Bernoulli(p)
X ~ Multin(n, 1 - p, p)
|
protected |
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
Reimplemented from randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
var is finite, so is mu
Reimplemented from randlib::UnivariateDistribution< IntType >.
|
override |
log B(n - k, k + 1) without the cancellation between log-factorials of n
| void randlib::BinomialDistribution< IntType >::FitProbability | ( | std::span< const IntType > | sample | ) |
Fit probability p with maximum-likelihood estimation.
| sample |
| BetaRand randlib::BinomialDistribution< IntType >::FitProbabilityBayes | ( | std::span< const IntType > | sample, |
| const BetaDistribution<> & | priorDistribution, | ||
| bool | MAP = false |
||
| ) |
Fit probability p with prior assumption p ~ Beta(α, β)
| sample | |
| priorDistribution | |
| MAP | if true, use MAP estimator |
| BetaRand randlib::BinomialDistribution< IntType >::FitProbabilityMinimax | ( | std::span< const IntType > | sample | ) |
Fit probability p with minimax estimator.
| sample |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
| x |
saddle-point form; the direct sum of logarithms cancels catastrophically for large n
Implements randlib::DiscreteDistribution< IntType >.
|
inlineoverridevirtual |
Implements randlib::ProbabilityDistribution< T >.
|
overridevirtual |
Implements randlib::UnivariateDistribution< IntType >.
|
overridevirtual |
The median is floor(np) or ceil(np)
Reimplemented from randlib::UnivariateDistribution< IntType >.
|
inlineoverridevirtual |
Implements randlib::ProbabilityDistribution< T >.
|
overridevirtual |
Mode is the value, which has the largest probability to happen, or, in the case of continuous distribution, has the largest value of density function.
Implements randlib::UnivariateDistribution< IntType >.
|
overridevirtual |
Reimplemented from randlib::ExponentialFamily< IntType, double >.
| IntType randlib::BinomialDistribution< IntType >::operator() | ( | G & | g | ) | const |
if X ~ Bin(n, p') and Y ~ Bin(n - X, (p - p') / (1 - p')) then Z = X + Y ~ Bin(n, p)
|
overridevirtual |
| k |
Reimplemented from randlib::DiscreteDistribution< IntType >.
|
override |
|
protected |
|
overridevirtual |
var is finite, so is mu
Reimplemented from randlib::UnivariateDistribution< IntType >.
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
overridevirtual |
Implements randlib::ExponentialFamily< IntType, double >.
|
inlineoverridevirtual |
Implements randlib::UnivariateDistribution< IntType >.
|
overridevirtual |
Implements randlib::UnivariateDistribution< IntType >.
|
static |
sanity check
|
protected |
log(q)
|
protected |
log(p)
|
protected |
probability of success
|
protected |
probability of failure