smile.stat.distribution

## Class GeometricDistribution

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

```public class GeometricDistribution
extends DiscreteDistribution
implements DiscreteExponentialFamily```
The geometric distribution is a discrete probability distribution of the number X of Bernoulli trials needed to get one success, supported on the set `{1, 2, 3, …}`. Sometimes, people define that the probability distribution of the number `Y = X - 1` of failures before the first success, supported on the set `{0, 1, 2, 3, …}`. To reduce the confusion, we denote the later as shifted geometric distribution. If the probability of success on each trial is p, then the probability that the k-th trial (out of k trials) is the first success is

```     Pr(X = k) = (1 - p)k-1 p
```
. Like its continuous analogue (the exponential distribution), the geometric distribution is memoryless. That means that if you intend to repeat an experiment until the first success, then, given that the first success has not yet occurred, the conditional probability distribution of the number of additional trials does not depend on how many failures have been observed. The geometric distribution is in fact the only memoryless discrete distribution.

Among all discrete probability distributions supported on `{1, 2, 3, …}` with given expected value μ, the geometric distribution X with parameter `p = 1/μ` is the one with the largest entropy.

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

Fields
Modifier and Type Field and Description
`double` `p`
Probability of success on each trial.
• ### Constructor Summary

Constructors
Constructor and Description
`GeometricDistribution(double p)`
Constructor.
• ### Method Summary

All Methods
Modifier and Type Method and Description
`double` `cdf(double k)`
Cumulative distribution function.
`double` `entropy()`
Shannon entropy.
`static GeometricDistribution` `fit(int[] data)`
Estimates the distribution parameters by MLE.
`int` `length()`
The number of parameters of the distribution.
`double` `logp(int k)`
The probability mass function in log scale.
`DiscreteMixture.Component` ```M(int[] x, double[] posteriori)```
The M step in the EM algorithm, which depends the specific distribution.
`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()`
Generates a random number following this 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`
Probability of success on each trial.
• ### Constructor Detail

• #### GeometricDistribution

`public GeometricDistribution(double p)`
Constructor.
Parameters:
`p` - the probability of success.
• ### Method Detail

• #### fit

`public static GeometricDistribution fit(int[] data)`
Estimates the distribution parameters by MLE.
• #### 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.
Specified by:
`length` in interface `Distribution`
• #### mean

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

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

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

`public double entropy()`
Shannon entropy. Not supported.
Specified by:
`entropy` in interface `Distribution`
• #### toString

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

`public double rand()`
Description copied from interface: `Distribution`
Generates a random number following this distribution.
Specified by:
`rand` in interface `Distribution`
• #### 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.
Specified by:
`cdf` in interface `Distribution`
• #### 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.
Specified by:
`quantile` in interface `Distribution`
• #### M

```public DiscreteMixture.Component M(int[] x,
double[] posteriori)```
Description copied from interface: `DiscreteExponentialFamily`
The M step in the EM algorithm, which depends the specific distribution.
Specified by:
`M` in interface `DiscreteExponentialFamily`
Parameters:
`x` - the input data for estimation
`posteriori` - the posteriori probability.
Returns:
the (unnormalized) weight of this distribution in the mixture.