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.

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    final double
    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
    Returns Shannon entropy of the distribution.
    fit(double[] data)
    Estimates the distribution parameters by MLE.
    int
    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.
    M(double[] x, double[] posteriori)
    The M step in the EM algorithm, which depends on the specific distribution.
    double
    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
    Generates a random number following this distribution.
    double
    sd()
    Returns the standard deviation of distribution.
     
    double
    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.