# Class GeometricDistribution

java.lang.Object
smile.stat.distribution.DiscreteDistribution
smile.stat.distribution.GeometricDistribution
All Implemented Interfaces:
`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 latter 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.

• ## Field Summary

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

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

Modifier and Type
Method
Description
`double`
`cdf(double k)`
Cumulative distribution function.
`double`
`entropy()`
Shannon's entropy.
`static GeometricDistribution`
`fit(int[] data)`
Estimates the distribution parameters by MLE.
`int`
`length()`
Returns 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 on the specific distribution.
`double`
`mean()`
Returns 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()`
Returns the standard deviation of distribution.
`String`
`toString()`

`double`
`variance()`
Returns the variance of distribution.

### Methods inherited from class smile.stat.distribution.DiscreteDistribution

`likelihood, logLikelihood, logp, p, quantile, randi, randi`

### 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

`inverseTransformSampling, likelihood, logLikelihood, quantile, quantile, rand, rejectionSampling`
• ## Field Details

• ### p

public final double p
Probability of success on each trial.
• ## Constructor Details

• ### GeometricDistribution

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

• ### fit

public static GeometricDistribution fit(int[] data)
Estimates the distribution parameters by MLE.
Parameters:
`data` - the training data.
Returns:
the distribution.
• ### length

public int length()
Description copied from interface: `Distribution`
Returns 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`
Returns:
The number of parameters.
• ### mean

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

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

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

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

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

public double rand()
Description copied from interface: `Distribution`
Generates a random number following this distribution.
Specified by:
`rand` in interface `Distribution`
Returns:
a random number.
• ### p

public double p(int k)
Description copied from class: `DiscreteDistribution`
The probability mass function.
Specified by:
`p` in class `DiscreteDistribution`
Parameters:
`k` - a real value.
Returns:
the probability.
• ### logp

public double logp(int k)
Description copied from class: `DiscreteDistribution`
The probability mass function in log scale.
Specified by:
`logp` in class `DiscreteDistribution`
Parameters:
`k` - a real value.
Returns:
the log probability.
• ### 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`
Parameters:
`k` - a real number.
Returns:
the probability.
• ### 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`
Parameters:
`p` - the probability.
Returns:
the quantile.
• ### M

public DiscreteMixture.Component M(int[] x, double[] posteriori)
Description copied from interface: `DiscreteExponentialFamily`
The M step in the EM algorithm, which depends on 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.