public final class PascalDistribution extends Object
The Pascal distribution is a special case of the negative binomial distribution where the number of successes parameter is an integer.
There are various ways to express the probability mass and distribution functions for the Pascal distribution. The present implementation represents the distribution of the number of failures before \( r \) successes occur. This is the convention adopted in e.g. MathWorld, but not in Wikipedia.
The probability mass function of \( X \) is:
\[ f(k; r, p) = \binom{k+r-1}{r-1} p^r \, (1-p)^k \]
for \( r \in \{1, 2, \dots\} \) the number of successes, \( p \in (0, 1] \) the probability of success, \( k \in \{0, 1, 2, \dots\} \) the total number of failures, and
\[ \binom{k+r-1}{r-1} = \frac{(k+r-1)!}{(r-1)! \, k!} \]
is the binomial coefficient.
The cumulative distribution function of \( X \) is:
\[ P(X \leq k) = I(p, r, k + 1) \]
where \( I \) is the regularized incomplete beta function.
DiscreteDistribution.Sampler
Modifier and Type | Method and Description |
---|---|
DiscreteDistribution.Sampler |
createSampler(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 |
getNumberOfSuccesses()
Gets the number of successes parameter of this distribution.
|
double |
getProbabilityOfSuccess()
Gets the probability of success parameter 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 PascalDistribution |
of(int r,
double p)
Create a Pascal 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) . |
public static PascalDistribution of(int r, double p)
r
- Number of successes.p
- Probability of success.IllegalArgumentException
- if r <= 0
or p <= 0
or
p > 1
.public int getNumberOfSuccesses()
public double getProbabilityOfSuccess()
public double probability(int x)
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.x
- Point at which the PMF is evaluated.x
.public double logProbability(int x)
X
whose values are distributed according
to this distribution, this method returns log(P(X = x))
, where
log
is the natural logarithm.x
- Point at which the PMF is evaluated.x
.public double cumulativeProbability(int x)
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.x
- Point at which the CDF is evaluated.x
.public double survivalProbability(int x)
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.
x
- Point at which the survival function is evaluated.x
.public double getMean()
For number of successes \( r \) and probability of success \( p \), the mean is:
\[ \frac{r (1 - p)}{p} \]
public double getVariance()
For number of successes \( r \) and probability of success \( p \), the variance is:
\[ \frac{r (1 - p)}{p^2} \]
public int getSupportLowerBound()
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 always 0.
public int getSupportUpperBound()
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 positive infinity except for the
probability parameter p = 1.0
.
Integer.MAX_VALUE
or 0.public double probability(int x0, int x1)
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:
0.0
if x0 == x1
;
probability(x1)
if x0 + 1 == x1
;
probability
in interface DiscreteDistribution
x0
- Lower bound (exclusive).x1
- Upper bound (inclusive).x0
and x1
, excluding the lower
and including the upper endpoint.public int inverseCumulativeProbability(double p)
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:
DiscreteDistribution.getSupportLowerBound()
for p = 0
,DiscreteDistribution.getSupportUpperBound()
for p = 1
, orcumulativeProbability(x)
.
The bounds may be bracketed for efficiency.inverseCumulativeProbability
in interface DiscreteDistribution
p
- Cumulative probability.p
-quantile of this distribution
(largest 0-quantile for p = 0
).IllegalArgumentException
- if p < 0
or p > 1
public int inverseSurvivalProbability(double p)
X
distributed according to this distribution,
the returned value is:
\[ x = \begin{cases} \inf \{ x \in \mathbb Z : P(X \ge x) \le p\} & \text{for } 0 \le p \lt 1 \\ \inf \{ x \in \mathbb Z : P(X \ge 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:
DiscreteDistribution.getSupportLowerBound()
for p = 1
,DiscreteDistribution.getSupportUpperBound()
for p = 0
, orsurvivalProbability(x)
.
The bounds may be bracketed for efficiency.inverseSurvivalProbability
in interface DiscreteDistribution
p
- Cumulative probability.(1-p)
-quantile of this distribution
(largest 0-quantile for p = 1
).IllegalArgumentException
- if p < 0
or p > 1
public DiscreteDistribution.Sampler createSampler(UniformRandomProvider rng)
createSampler
in interface DiscreteDistribution
rng
- Generator of uniformly distributed numbers.Copyright © 2018–2022 The Apache Software Foundation. All rights reserved.