# Class ExponentialDistribution

java.lang.Object
smile.stat.distribution.ExponentialDistribution
All Implemented Interfaces:
`Serializable`, `Distribution`, `ExponentialFamily`

public class ExponentialDistribution extends Object implements ExponentialFamily
An exponential distribution describes the times between events in a Poisson process, in which events occur continuously and independently at a constant average rate. Exponential variables can also be used to model situations where certain events occur with a constant probability per unit length, such as the distance between mutations on a DNA strand. In real world scenarios, the assumption of a constant rate is rarely satisfied. But if we focus on a time interval during which the rate is roughly constant, the exponential distribution can be used as a good approximate model.

The exponential distribution may be viewed as a continuous counterpart of the geometric distribution, which describes the number of Bernoulli trials necessary for a discrete process to change state. In contrast, the exponential distribution describes the time for a continuous process to change state.

The probability density function of an exponential distribution is f(x; λ) = λe-λx for `x >= 0`. The cumulative distribution function is given by F(x; λ) = 1 - e-λ x for `x >= 0`. An important property of the exponential distribution is that it is memoryless. This means that if a random variable T is exponentially distributed, its conditional probability obeys `Pr(T > s + t | T > s) = Pr(T > t)` for all `s, t >= 0`.

In queuing theory, the service times of agents in a system are often modeled as exponentially distributed variables. Reliability theory and reliability engineering also make extensive use of the exponential distribution. Because of the memoryless property of this distribution, it is well-suited to model the constant hazard rate portion of the bathtub curve used in reliability theory. The exponential distribution is however not appropriate to model the overall lifetime of organisms or technical devices, because the "failure rates" here are not constant: more failures occur for very young and for very old systems.

• ## Field Summary

Fields
Modifier and Type
Field
Description
`final double`
`lambda`
The rate parameter.
• ## Constructor Summary

Constructors
Constructor
Description
`ExponentialDistribution(double lambda)`
Constructor.
• ## Method Summary

Modifier and Type
Method
Description
`double`
`cdf(double x)`
Cumulative distribution function.
`double`
`entropy()`
Returns Shannon entropy of the distribution.
`static ExponentialDistribution`
`fit(double[] data)`
Estimates the distribution parameters by MLE.
`int`
`length()`
Returns the number of parameters of the distribution.
`double`
`logp(double x)`
The density at x in log scale, which may prevents the underflow problem.
`Mixture.Component`
```M(double[] 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(double x)`
The probability density function for continuous distribution or probability mass function for discrete distribution at x.
`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 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

• ### lambda

public final double lambda
The rate parameter.
• ## Constructor Details

• ### ExponentialDistribution

public ExponentialDistribution(double lambda)
Constructor.
Parameters:
`lambda` - rate parameter.
• ## Method Details

• ### fit

public static ExponentialDistribution fit(double[] 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()
Description copied from interface: `Distribution`
Returns Shannon entropy of the distribution.
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(double x)
Description copied from interface: `Distribution`
The probability density function for continuous distribution or probability mass function for discrete distribution at x.
Specified by:
`p` in interface `Distribution`
Parameters:
`x` - a real number.
Returns:
the density.
• ### logp

public double logp(double x)
Description copied from interface: `Distribution`
The density at x in log scale, which may prevents the underflow problem.
Specified by:
`logp` in interface `Distribution`
Parameters:
`x` - a real number.
Returns:
the log density.
• ### cdf

public double cdf(double x)
Description copied from interface: `Distribution`
Cumulative distribution function. That is the probability to the left of x.
Specified by:
`cdf` in interface `Distribution`
Parameters:
`x` - 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 Mixture.Component M(double[] x, double[] posteriori)
Description copied from interface: `ExponentialFamily`
The M step in the EM algorithm, which depends on the specific distribution.
Specified by:
`M` in interface `ExponentialFamily`
Parameters:
`x` - the input data for estimation
`posteriori` - the posteriori probability.
Returns:
the (unnormalized) weight of this distribution in the mixture.