Class PoissonDistributionImpl

All Implemented Interfaces:
Serializable, DiscreteDistribution, Distribution, IntegerDistribution, PoissonDistribution

public class PoissonDistributionImpl extends AbstractIntegerDistribution implements PoissonDistribution, Serializable
Implementation for the PoissonDistribution.
See Also:
  • Field Details

    • DEFAULT_MAX_ITERATIONS

      public static final int DEFAULT_MAX_ITERATIONS
      Default maximum number of iterations for cumulative probability calculations.
      Since:
      2.1
      See Also:
    • DEFAULT_EPSILON

      public static final double DEFAULT_EPSILON
      Default convergence criterion.
      Since:
      2.1
      See Also:
  • Constructor Details

    • PoissonDistributionImpl

      public PoissonDistributionImpl(double p)
      Create a new Poisson distribution with the given the mean. The mean value must be positive; otherwise an IllegalArgument is thrown.
      Parameters:
      p - the Poisson mean
      Throws:
      IllegalArgumentException - if p ≤ 0
    • PoissonDistributionImpl

      public PoissonDistributionImpl(double p, double epsilon, int maxIterations)
      Create a new Poisson distribution with the given mean, convergence criterion and maximum number of iterations.
      Parameters:
      p - the Poisson mean
      epsilon - the convergence criteria for cumulative probabilites
      maxIterations - the maximum number of iterations for cumulative probabilites
      Since:
      2.1
    • PoissonDistributionImpl

      public PoissonDistributionImpl(double p, double epsilon)
      Create a new Poisson distribution with the given mean and convergence criterion.
      Parameters:
      p - the Poisson mean
      epsilon - the convergence criteria for cumulative probabilites
      Since:
      2.1
    • PoissonDistributionImpl

      public PoissonDistributionImpl(double p, int maxIterations)
      Create a new Poisson distribution with the given mean and maximum number of iterations.
      Parameters:
      p - the Poisson mean
      maxIterations - the maximum number of iterations for cumulative probabilites
      Since:
      2.1
    • PoissonDistributionImpl

      @Deprecated public PoissonDistributionImpl(double p, NormalDistribution z)
      Deprecated.
      as of 2.1 (to avoid possibly inconsistent state, the "NormalDistribution" will be instantiated internally)
      Create a new Poisson distribution with the given the mean. The mean value must be positive; otherwise an IllegalArgument is thrown.
      Parameters:
      p - the Poisson mean
      z - a normal distribution used to compute normal approximations.
      Throws:
      IllegalArgumentException - if p ≤ 0
      Since:
      1.2
  • Method Details

    • getMean

      public double getMean()
      Get the Poisson mean for the distribution.
      Specified by:
      getMean in interface PoissonDistribution
      Returns:
      the Poisson mean for the distribution.
    • setMean

      @Deprecated public void setMean(double p)
      Deprecated.
      as of 2.1 (class will become immutable in 3.0)
      Set the Poisson mean for the distribution. The mean value must be positive; otherwise an IllegalArgument is thrown.
      Specified by:
      setMean in interface PoissonDistribution
      Parameters:
      p - the Poisson mean value
      Throws:
      IllegalArgumentException - if p ≤ 0
    • probability

      public double probability(int x)
      The probability mass function P(X = x) for a Poisson distribution.
      Specified by:
      probability in interface IntegerDistribution
      Parameters:
      x - the value at which the probability density function is evaluated.
      Returns:
      the value of the probability mass function at x
    • cumulativeProbability

      public double cumulativeProbability(int x) throws MathException
      The probability distribution function P(X invalid input: '<'= x) for a Poisson distribution.
      Specified by:
      cumulativeProbability in interface IntegerDistribution
      Specified by:
      cumulativeProbability in class AbstractIntegerDistribution
      Parameters:
      x - the value at which the PDF is evaluated.
      Returns:
      Poisson distribution function evaluated at x
      Throws:
      MathException - if the cumulative probability can not be computed due to convergence or other numerical errors.
    • normalApproximateProbability

      public double normalApproximateProbability(int x) throws MathException
      Calculates the Poisson distribution function using a normal approximation. The N(mean, sqrt(mean)) distribution is used to approximate the Poisson distribution.

      The computation uses "half-correction" -- evaluating the normal distribution function at x + 0.5

      Specified by:
      normalApproximateProbability in interface PoissonDistribution
      Parameters:
      x - the upper bound, inclusive
      Returns:
      the distribution function value calculated using a normal approximation
      Throws:
      MathException - if an error occurs computing the normal approximation
    • sample

      public int sample() throws MathException
      Generates a random value sampled from this distribution.

      Algorithm Description:

      • For small means, uses simulation of a Poisson process using Uniform deviates, as described here. The Poisson process (and hence value returned) is bounded by 1000 * mean.
      • invalid input: '<'
      • For large means, uses the rejection algorithm described in
        Devroye, Luc. (1981).The Computer Generation of Poisson Random Variables Computing vol. 26 pp. 197-207.

      Overrides:
      sample in class AbstractIntegerDistribution
      Returns:
      random value
      Throws:
      MathException - if an error occurs generating the random value
      Since:
      2.2
    • setNormal

      @Deprecated public void setNormal(NormalDistribution value)
      Deprecated.
      as of 2.1 (class will become immutable in 3.0)
      Modify the normal distribution used to compute normal approximations. The caller is responsible for insuring the normal distribution has the proper parameter settings.
      Parameters:
      value - the new distribution
      Since:
      1.2
    • getSupportLowerBound

      public int getSupportLowerBound()
      Returns the lower bound of the support for the distribution. The lower bound of the support is always 0 no matter the mean parameter.
      Returns:
      lower bound of the support (always 0)
      Since:
      2.2
    • getSupportUpperBound

      public int getSupportUpperBound()
      Returns the upper bound of the support for the distribution. The upper bound of the support is positive infinity, regardless of the parameter values. There is no integer infinity, so this method returns Integer.MAX_VALUE and AbstractIntegerDistribution.isSupportUpperBoundInclusive() returns true.
      Returns:
      upper bound of the support (always Integer.MAX_VALUE for positive infinity)
      Since:
      2.2
    • getNumericalVariance

      public double getNumericalVariance()
      Returns the variance of the distribution. For mean parameter p, the variance is p
      Returns:
      the variance
      Since:
      2.2