public final class TruncatedNormalDistribution extends Object
The probability density function of \( X \) is:
\[ f(x;\mu,\sigma,a,b) = \frac{1}{\sigma}\,\frac{\phi(\frac{x - \mu}{\sigma})}{\Phi(\frac{b - \mu}{\sigma}) - \Phi(\frac{a - \mu}{\sigma}) } \]
for \( \mu \) mean of the parent normal distribution, \( \sigma \) standard deviation of the parent normal distribution, \( -\infty \le a \lt b \le \infty \) the truncation interval, and \( x \in [a, b] \), where \( \phi \) is the probability density function of the standard normal distribution and \( \Phi \) is its cumulative distribution function.
ContinuousDistribution.Sampler
Modifier and Type | Method and Description |
---|---|
ContinuousDistribution.Sampler |
createSampler(UniformRandomProvider rng)
Creates a sampler.
|
double |
cumulativeProbability(double x)
For a random variable
X whose values are distributed according
to this distribution, this method returns P(X <= x) . |
double |
density(double x)
Returns the probability density function (PDF) of this distribution
evaluated at the specified point
x . |
double |
getMean()
Gets the mean of this distribution.
|
double |
getSupportLowerBound()
Gets the lower bound of the support.
|
double |
getSupportUpperBound()
Gets the upper bound of the support.
|
double |
getVariance()
Gets the variance of this distribution.
|
double |
inverseCumulativeProbability(double p)
Computes the quantile function of this distribution.
|
double |
inverseSurvivalProbability(double p)
Computes the inverse survival probability function of this distribution.
|
double |
logDensity(double x)
Returns the natural logarithm of the probability density function
(PDF) of this distribution evaluated at the specified point
x . |
static TruncatedNormalDistribution |
of(double mean,
double sd,
double lower,
double upper)
Creates a truncated normal distribution.
|
double |
probability(double x0,
double x1)
For a random variable
X whose values are distributed according
to this distribution, this method returns P(x0 < X <= x1) . |
double |
survivalProbability(double x)
For a random variable
X whose values are distributed according
to this distribution, this method returns P(X > x) . |
public static TruncatedNormalDistribution of(double mean, double sd, double lower, double upper)
Note that the mean
and sd
is of the parent normal distribution,
and not the true mean and standard deviation of the truncated normal distribution.
The lower
and upper
bounds define the truncation of the parent
normal distribution.
mean
- Mean for the parent distribution.sd
- Standard deviation for the parent distribution.lower
- Lower bound (inclusive) of the distribution, can be Double.NEGATIVE_INFINITY
.upper
- Upper bound (inclusive) of the distribution, can be Double.POSITIVE_INFINITY
.IllegalArgumentException
- if sd <= 0
; if lower >= upper
; or if
the truncation covers no probability range in the parent distribution.public double density(double x)
x
.
In general, the PDF is the derivative of the CDF
.
If the derivative does not exist at x
, then an appropriate
replacement should be returned, e.g. Double.POSITIVE_INFINITY
,
Double.NaN
, or the limit inferior or limit superior of the
difference quotient.x
- Point at which the PDF is evaluated.x
.public double probability(double x0, double 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)
probability
in interface ContinuousDistribution
x0
- Lower bound (exclusive).x1
- Upper bound (inclusive).x0
and x1
, excluding the lower
and including the upper endpoint.public double logDensity(double x)
x
.x
- Point at which the PDF is evaluated.x
.public double cumulativeProbability(double 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(double 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 inverseCumulativeProbability(double p)
X
distributed according to this distribution, the
returned value is:
\[ x = \begin{cases} \inf \{ x \in \mathbb R : P(X \le x) \ge p\} & \text{for } 0 \lt p \le 1 \\ \inf \{ x \in \mathbb R : P(X \le x) \gt 0 \} & \text{for } p = 0 \end{cases} \]
The default implementation returns:
ContinuousDistribution.getSupportLowerBound()
for p = 0
,ContinuousDistribution.getSupportUpperBound()
for p = 1
, orcumulativeProbability(x) - p
.
The bounds may be bracketed for efficiency.inverseCumulativeProbability
in interface ContinuousDistribution
p
- Cumulative probability.p
-quantile of this distribution
(largest 0-quantile for p = 0
).public double inverseSurvivalProbability(double p)
X
distributed according to this distribution, the
returned value is:
\[ x = \begin{cases} \inf \{ x \in \mathbb R : P(X \ge x) \le p\} & \text{for } 0 \le p \lt 1 \\ \inf \{ x \in \mathbb R : P(X \ge x) \lt 1 \} & \text{for } p = 1 \end{cases} \]
By default, this is defined as inverseCumulativeProbability(1 - p)
, but
the specific implementation may be more accurate.
The default implementation returns:
ContinuousDistribution.getSupportLowerBound()
for p = 1
,ContinuousDistribution.getSupportUpperBound()
for p = 0
, orsurvivalProbability(x) - p
.
The bounds may be bracketed for efficiency.inverseSurvivalProbability
in interface ContinuousDistribution
p
- Survival probability.(1-p)
-quantile of this distribution
(largest 0-quantile for p = 1
).public ContinuousDistribution.Sampler createSampler(UniformRandomProvider rng)
createSampler
in interface ContinuousDistribution
rng
- Generator of uniformly distributed numbers.public double getMean()
Represents the true mean of the truncated normal distribution rather than the parent normal distribution mean.
For \( \mu \) mean of the parent normal distribution, \( \sigma \) standard deviation of the parent normal distribution, and \( a \lt b \) the truncation interval of the parent normal distribution, the mean is:
\[ \mu + \frac{\phi(a)-\phi(b)}{\Phi(b) - \Phi(a)}\sigma \]
where \( \phi \) is the probability density function of the standard normal distribution and \( \Phi \) is its cumulative distribution function.
public double getVariance()
Represents the true variance of the truncated normal distribution rather than the parent normal distribution variance.
For \( \mu \) mean of the parent normal distribution, \( \sigma \) standard deviation of the parent normal distribution, and \( a \lt b \) the truncation interval of the parent normal distribution, the variance is:
\[ \sigma^2 \left[1 + \frac{a\phi(a)-b\phi(b)}{\Phi(b) - \Phi(a)} - \left( \frac{\phi(a)-\phi(b)}{\Phi(b) - \Phi(a)} \right)^2 \right] \]
where \( \phi \) is the probability density function of the standard normal distribution and \( \Phi \) is its cumulative distribution function.
public double getSupportLowerBound()
inverseCumulativeProbability(0)
, i.e.
\( \inf \{ x \in \mathbb R : P(X \le x) \gt 0 \} \).
The lower bound of the support is equal to the lower bound parameter of the distribution.
public double getSupportUpperBound()
inverseCumulativeProbability(1)
, i.e.
\( \inf \{ x \in \mathbb R : P(X \le x) = 1 \} \).
The upper bound of the support is equal to the upper bound parameter of the distribution.
Copyright © 2018–2022 The Apache Software Foundation. All rights reserved.