Class UniformDiscreteDistribution
- All Implemented Interfaces:
DiscreteDistribution
The probability mass function of \( X \) is:
\[ f(k; a, b) = \frac{1}{b-a+1} \]
for integer \( a, b \) and \( a \le b \) and \( k \in [a, b] \).
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface DiscreteDistribution
DiscreteDistribution.Sampler -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final doubleCache of the log probability.private final intLower bound (inclusive) of this distribution.private final doubleCache of the probability.private final doubleValue of survival probability for x=0.private final intUpper bound (inclusive) of this distribution.private final double"upper" - "lower" + 1 (as a double to avoid overflow). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncreateSampler(org.apache.commons.rng.UniformRandomProvider rng) Creates a sampler.doublecumulativeProbability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnsP(X <= x).doublegetMean()Gets the mean of this distribution.intGets the lower bound of the support.intGets the upper bound of the support.doubleGets the variance of this distribution.intinverseCumulativeProbability(double p) Computes the quantile function of this distribution.intinverseSurvivalProbability(double p) Computes the inverse survival probability function of this distribution.doublelogProbability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnslog(P(X = x)), wherelogis the natural logarithm.static UniformDiscreteDistributionof(int lower, int upper) Creates a new uniform discrete distribution.doubleprobability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnsP(X = x).doubleprobability(int x0, int x1) For a random variableXwhose values are distributed according to this distribution, this method returnsP(x0 < X <= x1).doublesurvivalProbability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnsP(X > x).Methods inherited from class AbstractDiscreteDistribution
getMedian
-
Field Details
-
lower
private final int lowerLower bound (inclusive) of this distribution. -
upper
private final int upperUpper bound (inclusive) of this distribution. -
upperMinusLowerPlus1
private final double upperMinusLowerPlus1"upper" - "lower" + 1 (as a double to avoid overflow). -
pmf
private final double pmfCache of the probability. -
logPmf
private final double logPmfCache of the log probability. -
sf0
private final double sf0Value of survival probability for x=0. Used in the inverse survival function.
-
-
Constructor Details
-
UniformDiscreteDistribution
private UniformDiscreteDistribution(int lower, int upper) - Parameters:
lower- Lower bound (inclusive) of this distribution.upper- Upper bound (inclusive) of this distribution.
-
-
Method Details
-
of
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:
IllegalArgumentException- iflower > upper.
-
probability
public double probability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnsP(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 variableXwhose values are distributed according to this distribution, this method returnsP(x0 < X <= x1). The default implementation uses the identityP(x0 < X <= x1) = P(X <= x1) - P(X <= x0)Special cases:
- returns
0.0ifx0 == x1; - returns
probability(x1)ifx0 + 1 == x1;
- Specified by:
probabilityin interfaceDiscreteDistribution- Overrides:
probabilityin classAbstractDiscreteDistribution- Parameters:
x0- Lower bound (exclusive).x1- Upper bound (inclusive).- Returns:
- the probability that a random variable with this distribution
takes a value between
x0andx1, excluding the lower and including the upper endpoint.
- returns
-
logProbability
public double logProbability(int x) For a random variableXwhose values are distributed according to this distribution, this method returnslog(P(X = x)), wherelogis 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 variableXwhose values are distributed according to this distribution, this method returnsP(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 variableXwhose values are distributed according to this distribution, this method returnsP(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 variableXdistributed 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, thenInteger.MIN_VALUEorInteger.MAX_VALUEis returned. In this case the result ofcumulativeProbability(x)called using the returnedp-quantile may not compute the originalp.The default implementation returns:
DiscreteDistribution.getSupportLowerBound()forp = 0,DiscreteDistribution.getSupportUpperBound()forp = 1, or- the result of a binary search between the lower and upper bound using
cumulativeProbability(x). The bounds may be bracketed for efficiency.
- Specified by:
inverseCumulativeProbabilityin interfaceDiscreteDistribution- Overrides:
inverseCumulativeProbabilityin classAbstractDiscreteDistribution- Parameters:
p- Cumulative probability.- Returns:
- the smallest
p-quantile of this distribution (largest 0-quantile forp = 0).
-
inverseSurvivalProbability
public int inverseSurvivalProbability(double p) Computes the inverse survival probability function of this distribution. For a random variableXdistributed 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, thenInteger.MIN_VALUEorInteger.MAX_VALUEis returned. In this case the result ofsurvivalProbability(x)called using the returned(1-p)-quantile may not compute the originalp.By default, this is defined as
inverseCumulativeProbability(1 - p), but the specific implementation may be more accurate.The default implementation returns:
DiscreteDistribution.getSupportLowerBound()forp = 1,DiscreteDistribution.getSupportUpperBound()forp = 0, or- the result of a binary search between the lower and upper bound using
survivalProbability(x). The bounds may be bracketed for efficiency.
- Specified by:
inverseSurvivalProbabilityin interfaceDiscreteDistribution- Overrides:
inverseSurvivalProbabilityin classAbstractDiscreteDistribution- Parameters:
p- Cumulative probability.- Returns:
- the smallest
(1-p)-quantile of this distribution (largest 0-quantile forp = 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 asinverseCumulativeProbability(0), i.e. \( \inf \{ x \in \mathbb Z : P(X \le x) \gt 0 \} \). By convention,Integer.MIN_VALUEshould 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 asinverseCumulativeProbability(1), i.e. \( \inf \{ x \in \mathbb Z : P(X \le x) = 1 \} \). By convention,Integer.MAX_VALUEshould 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.
-
createSampler
Creates a sampler.- Specified by:
createSamplerin interfaceDiscreteDistribution- Overrides:
createSamplerin classAbstractDiscreteDistribution- Parameters:
rng- Generator of uniformly distributed numbers.- Returns:
- a sampler that produces random numbers according this distribution.
-