public final class ZipfDistribution extends Object
The probability mass function of \( X \) is:
\[ f(k; N, s) = \frac{1/k^s}{H_{N,s}} \]
for \( N \in \{1, 2, 3, \dots\} \) the number of elements, \( s \gt 0 \) the exponent characterizing the distribution, \( k \in \{1, 2, \dots, N\} \) the element rank, and \( H_{N,s} \) is the normalizing constant which corresponds to the generalized harmonic number of order N of s.
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 |
getExponent()
Gets the exponent parameter of this distribution.
|
double |
getMean()
Gets the mean of this distribution.
|
int |
getNumberOfElements()
Gets the number of elements 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 ZipfDistribution |
of(int numberOfElements,
double exponent)
Creates a Zipf 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 ZipfDistribution of(int numberOfElements, double exponent)
numberOfElements
- Number of elements.exponent
- Exponent.IllegalArgumentException
- if numberOfElements <= 0
or exponent <= 0
.public int getNumberOfElements()
public double getExponent()
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 elements \( N \) and exponent \( s \), the mean is:
\[ \frac{H_{N,s-1}}{H_{N,s}} \]
where \( H_{N,k} \) is the generalized harmonic number of order \( N \) of \( k \).
public double getVariance()
For number of elements \( N \) and exponent \( s \), the variance is:
\[ \frac{H_{N,s-2}}{H_{N,s}} - \frac{H_{N,s-1}^2}{H_{N,s}^2} \]
where \( H_{N,k} \) is the generalized harmonic number of order \( N \) of \( k \).
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 1.
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 the number of elements.
public DiscreteDistribution.Sampler createSampler(UniformRandomProvider rng)
createSampler
in interface DiscreteDistribution
rng
- Generator of uniformly distributed numbers.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
Copyright © 2018–2022 The Apache Software Foundation. All rights reserved.