smile.stat.distribution

## Class BinomialDistribution

• All Implemented Interfaces:
java.io.Serializable, Distribution

```public class BinomialDistribution
extends DiscreteDistribution```
The binomial distribution is the discrete probability distribution of the number of successes in a sequence of n independent yes/no experiments, each of which yields success with probability p. Such a success/failure experiment is also called a Bernoulli experiment or Bernoulli trial. In fact, when `n = 1`, the binomial distribution is a Bernoulli distribution. The probability of getting exactly k successes in n trials is given by the probability mass function:

```     Pr(K = k) = nCk pk (1-p)n-k
```
where `nCk` is n choose k.

It is frequently used to model number of successes in a sample of size n from a population of size N. Since the samples are not independent (this is sampling without replacement), the resulting distribution is a hypergeometric distribution, not a binomial one. However, for N much larger than n, the binomial distribution is a good approximation, and widely used.

Binomial distribution describes the number of successes for draws with replacement. In contrast, the hypergeometric distribution describes the number of successes for draws without replacement.

Although Binomial distribution belongs to exponential family, we don't implement DiscreteExponentialFamily interface here since it is impossible and meaningless to estimate a mixture of Binomial distributions.

`HyperGeometricDistribution`, Serialized Form
• ### Field Summary

Fields
Modifier and Type Field and Description
`int` `n`
The number of experiments.
`double` `p`
The probability of success.
• ### Constructor Summary

Constructors
Constructor and Description
```BinomialDistribution(int n, double p)```
Constructor.
• ### Method Summary

All Methods
Modifier and Type Method and Description
`double` `cdf(double k)`
Cumulative distribution function.
`double` `entropy()`
Shannon entropy of the distribution.
`int` `length()`
The number of parameters of the distribution.
`double` `logp(int k)`
The probability mass function in log scale.
`double` `mean()`
The mean of distribution.
`double` `p(int k)`
The probability mass function.
`double` `quantile(double p)`
The quantile, the probability to the left of quantile is p.
`double` `rand()`
This function generates a random variate with the binomial distribution.
`double` `sd()`
The standard deviation of distribution.
`java.lang.String` `toString()`
`double` `variance()`
The variance of distribution.
• ### Methods inherited from class smile.stat.distribution.DiscreteDistribution

`likelihood, logLikelihood, logp, p, quantile, randi, randi`
• ### Methods inherited from class smile.stat.distribution.AbstractDistribution

`inverseTransformSampling, quantile, quantile, rejection`
• ### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
• ### Methods inherited from interface smile.stat.distribution.Distribution

`likelihood, logLikelihood, rand`
• ### Field Detail

• #### p

`public final double p`
The probability of success.
• #### n

`public final int n`
The number of experiments.
• ### Constructor Detail

• #### BinomialDistribution

```public BinomialDistribution(int n,
double p)```
Constructor.
Parameters:
`p` - the probability of success.
`n` - the number of experiments.
• ### Method Detail

• #### length

`public int length()`
Description copied from interface: `Distribution`
The number of parameters of the distribution. The "length" is in the sense of the minimum description length principle.
• #### mean

`public double mean()`
Description copied from interface: `Distribution`
The mean of distribution.
• #### variance

`public double variance()`
Description copied from interface: `Distribution`
The variance of distribution.
• #### sd

`public double sd()`
Description copied from interface: `Distribution`
The standard deviation of distribution.
• #### entropy

`public double entropy()`
Description copied from interface: `Distribution`
Shannon entropy of the distribution.
• #### toString

`public java.lang.String toString()`
Overrides:
`toString` in class `java.lang.Object`
• #### p

`public double p(int k)`
Description copied from class: `DiscreteDistribution`
The probability mass function.
Specified by:
`p` in class `DiscreteDistribution`
• #### logp

`public double logp(int k)`
Description copied from class: `DiscreteDistribution`
The probability mass function in log scale.
Specified by:
`logp` in class `DiscreteDistribution`
• #### cdf

`public double cdf(double k)`
Description copied from interface: `Distribution`
Cumulative distribution function. That is the probability to the left of x.
• #### quantile

`public double quantile(double p)`
Description copied from interface: `Distribution`
The quantile, the probability to the left of quantile is p. It is actually the inverse of cdf.
• #### rand

`public double rand()`
This function generates a random variate with the binomial distribution. Uses down/up search from the mode by chop-down technique for n*p < 55, and patchwork rejection method for n*p ≥ 55. For n*p < 1.E-6 numerical inaccuracy is avoided by poisson approximation.