Class UniformDiscreteDistribution

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private double logPmf
      Cache of the log probability.
      private int lower
      Lower bound (inclusive) of this distribution.
      private double pmf
      Cache of the probability.
      private double sf0
      Value of survival probability for x=0.
      private int upper
      Upper bound (inclusive) of this distribution.
      private double upperMinusLowerPlus1
      "upper" - "lower" + 1 (as a double to avoid overflow).
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      DiscreteDistribution.Sampler createSampler​(org.apache.commons.rng.UniformRandomProvider rng)
      Creates a sampler.
      double cumulativeProbability​(int x)
      For a random variable X whose values are distributed according to this distribution, this method returns P(X <= x).
      double getMean()
      Gets the mean of this distribution.
      int getSupportLowerBound()
      Gets the lower bound of the support.
      int getSupportUpperBound()
      Gets the upper bound of the support.
      double getVariance()
      Gets the variance of this distribution.
      int inverseCumulativeProbability​(double p)
      Computes the quantile function of this distribution.
      int inverseSurvivalProbability​(double p)
      Computes the inverse survival probability function of this distribution.
      double logProbability​(int x)
      For a random variable X whose values are distributed according to this distribution, this method returns log(P(X = x)), where log is the natural logarithm.
      static UniformDiscreteDistribution of​(int lower, int upper)
      Creates a new uniform discrete distribution.
      double probability​(int x)
      For a random variable X whose values are distributed according to this distribution, this method returns P(X = x).
      double probability​(int x0, int x1)
      For a random variable X whose values are distributed according to this distribution, this method returns P(x0 < X <= x1).
      double survivalProbability​(int x)
      For a random variable X whose values are distributed according to this distribution, this method returns P(X > x).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • lower

        private final int lower
        Lower bound (inclusive) of this distribution.
      • upper

        private final int upper
        Upper bound (inclusive) of this distribution.
      • upperMinusLowerPlus1

        private final double upperMinusLowerPlus1
        "upper" - "lower" + 1 (as a double to avoid overflow).
      • pmf

        private final double pmf
        Cache of the probability.
      • logPmf

        private final double logPmf
        Cache of the log probability.
      • sf0

        private final double sf0
        Value of survival probability for x=0. Used in the inverse survival function.
    • Constructor Detail

      • UniformDiscreteDistribution

        private UniformDiscreteDistribution​(int lower,
                                            int upper)
        Parameters:
        lower - Lower bound (inclusive) of this distribution.
        upper - Upper bound (inclusive) of this distribution.
    • Method Detail

      • of

        public static UniformDiscreteDistribution of​(int lower,
                                                     int upper)
        Creates a new uniform discrete distribution.
        Parameters:
        lower - Lower bound (inclusive) of this distribution.
        upper - Upper bound (inclusive) of this distribution.
        Returns:
        the distribution
        Throws:
        java.lang.IllegalArgumentException - if lower > upper.
      • probability

        public double probability​(int x)
        For a random variable X whose values are distributed according to this distribution, this method returns P(X = x). In other words, this method represents the probability mass function (PMF) for the distribution.
        Parameters:
        x - Point at which the PMF is evaluated.
        Returns:
        the value of the probability mass function at x.
      • probability

        public double probability​(int x0,
                                  int x1)
        For a random variable X whose values are distributed according to this distribution, this method returns P(x0 < X <= x1). The default implementation uses the identity P(x0 < X <= x1) = P(X <= x1) - P(X <= x0)

        Special cases:

        • returns 0.0 if x0 == x1;
        • returns probability(x1) if x0 + 1 == x1;
        Specified by:
        probability in interface DiscreteDistribution
        Overrides:
        probability in class AbstractDiscreteDistribution
        Parameters:
        x0 - Lower bound (exclusive).
        x1 - Upper bound (inclusive).
        Returns:
        the probability that a random variable with this distribution takes a value between x0 and x1, excluding the lower and including the upper endpoint.
      • logProbability

        public double logProbability​(int x)
        For a random variable X whose values are distributed according to this distribution, this method returns log(P(X = x)), where log is the natural logarithm.
        Parameters:
        x - Point at which the PMF is evaluated.
        Returns:
        the logarithm of the value of the probability mass function at x.
      • cumulativeProbability

        public double cumulativeProbability​(int x)
        For a random variable X whose values are distributed according to this distribution, this method returns P(X <= x). In other, words, this method represents the (cumulative) distribution function (CDF) for this distribution.
        Parameters:
        x - Point at which the CDF is evaluated.
        Returns:
        the probability that a random variable with this distribution takes a value less than or equal to x.
      • survivalProbability

        public double survivalProbability​(int x)
        For a random variable X whose values are distributed according to this distribution, this method returns P(X > x). In other words, this method represents the complementary cumulative distribution function.

        By default, this is defined as 1 - cumulativeProbability(x), but the specific implementation may be more accurate.

        Parameters:
        x - Point at which the survival function is evaluated.
        Returns:
        the probability that a random variable with this distribution takes a value greater than x.
      • inverseCumulativeProbability

        public int inverseCumulativeProbability​(double p)
        Computes the quantile function of this distribution. For a random variable X distributed according to this distribution, the returned value is:

        \[ x = \begin{cases} \inf \{ x \in \mathbb Z : P(X \le x) \ge p\} & \text{for } 0 \lt p \le 1 \\ \inf \{ x \in \mathbb Z : P(X \le x) \gt 0 \} & \text{for } p = 0 \end{cases} \]

        If the result exceeds the range of the data type int, then Integer.MIN_VALUE or Integer.MAX_VALUE is returned. In this case the result of cumulativeProbability(x) called using the returned p-quantile may not compute the original p.

        The default implementation returns:

        Specified by:
        inverseCumulativeProbability in interface DiscreteDistribution
        Overrides:
        inverseCumulativeProbability in class AbstractDiscreteDistribution
        Parameters:
        p - Cumulative probability.
        Returns:
        the smallest p-quantile of this distribution (largest 0-quantile for p = 0).
      • inverseSurvivalProbability

        public int inverseSurvivalProbability​(double p)
        Computes the inverse survival probability function of this distribution. For a random variable X distributed according to this distribution, the returned value is:

        \[ x = \begin{cases} \inf \{ x \in \mathbb Z : P(X \gt x) \le p\} & \text{for } 0 \le p \lt 1 \\ \inf \{ x \in \mathbb Z : P(X \gt x) \lt 1 \} & \text{for } p = 1 \end{cases} \]

        If the result exceeds the range of the data type int, then Integer.MIN_VALUE or Integer.MAX_VALUE is returned. In this case the result of survivalProbability(x) called using the returned (1-p)-quantile may not compute the original p.

        By default, this is defined as inverseCumulativeProbability(1 - p), but the specific implementation may be more accurate.

        The default implementation returns:

        Specified by:
        inverseSurvivalProbability in interface DiscreteDistribution
        Overrides:
        inverseSurvivalProbability in class AbstractDiscreteDistribution
        Parameters:
        p - Cumulative probability.
        Returns:
        the smallest (1-p)-quantile of this distribution (largest 0-quantile for p = 1).
      • getMean

        public double getMean()
        Gets the mean of this distribution.

        For lower bound \( a \) and upper bound \( b \), the mean is \( \frac{1}{2} (a + b) \).

        Returns:
        the mean.
      • getVariance

        public double getVariance()
        Gets the variance of this distribution.

        For lower bound \( a \) and upper bound \( b \), the variance is:

        \[ \frac{1}{12} (n^2 - 1) \]

        where \( n = b - a + 1 \).

        Returns:
        the variance.
      • getSupportLowerBound

        public int getSupportLowerBound()
        Gets the lower bound of the support. This method must return the same value as inverseCumulativeProbability(0), i.e. \( \inf \{ x \in \mathbb Z : P(X \le x) \gt 0 \} \). By convention, Integer.MIN_VALUE should be substituted for negative infinity.

        The lower bound of the support is equal to the lower bound parameter of the distribution.

        Returns:
        the lower bound of the support.
      • getSupportUpperBound

        public int getSupportUpperBound()
        Gets the upper bound of the support. This method must return the same value as inverseCumulativeProbability(1), i.e. \( \inf \{ x \in \mathbb Z : P(X \le x) = 1 \} \). By convention, Integer.MAX_VALUE should be substituted for positive infinity.

        The upper bound of the support is equal to the upper bound parameter of the distribution.

        Returns:
        the upper bound of the support.