Class FoldedNormalDistribution
- All Implemented Interfaces:
ContinuousDistribution
- Direct Known Subclasses:
FoldedNormalDistribution.HalfNormalDistribution
,FoldedNormalDistribution.RegularFoldedNormalDistribution
Given a normally distributed random variable \( X \) with mean \( \mu \) and variance \( \sigma^2 \), the random variable \( Y = |X| \) has a folded normal distribution. This is equivalent to not recording the sign from a normally distributed random variable.
The probability density function of \( X \) is:
\[ f(x; \mu, \sigma) = \frac 1 {\sigma\sqrt{2\pi}} e^{-{\frac 1 2}\left( \frac{x-\mu}{\sigma} \right)^2 } + \frac 1 {\sigma\sqrt{2\pi}} e^{-{\frac 1 2}\left( \frac{x+\mu}{\sigma} \right)^2 }\]
for \( \mu \) the location, \( \sigma > 0 \) the scale, and \( x \in [0, \infty) \).
If the location \( \mu \) is 0 this reduces to the half-normal distribution.
- Since:
- 1.1
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
Specialisation for the half-normal distribution.private static class
Regular implementation of the folded normal distribution.Nested classes/interfaces inherited from interface org.apache.commons.statistics.distribution.ContinuousDistribution
ContinuousDistribution.Sampler
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) final double
The scale.(package private) final double
The scale multiplied by sqrt(2).(package private) final double
The scale multiplied by sqrt(2 pi). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract double
getMean()
Gets the mean of this distribution.abstract double
getMu()
Gets the location parameter \( \mu \) of this distribution.double
getSigma()
Gets the scale parameter \( \sigma \) of this distribution.double
Gets the lower bound of the support.double
Gets the upper bound of the support.abstract double
Gets the variance of this distribution.static FoldedNormalDistribution
of
(double mu, double sigma) Creates a folded normal distribution.Methods inherited from class org.apache.commons.statistics.distribution.AbstractContinuousDistribution
createSampler, getMedian, inverseCumulativeProbability, inverseSurvivalProbability, isSupportConnected, probability
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.commons.statistics.distribution.ContinuousDistribution
cumulativeProbability, density, logDensity, survivalProbability
-
Field Details
-
sigma
final double sigmaThe scale. -
sigmaSqrt2
final double sigmaSqrt2The scale multiplied by sqrt(2). This is used to avoid a double division when computing the value passed to the error function:((x - u) / sd) / sqrt(2) == (x - u) / (sd * sqrt(2)).
Note: Implementations may first normalise x and then divide by sqrt(2) resulting in differences due to rounding error that show increasingly large relative differences as the error function computes close to 0 in the extreme tail.
-
sigmaSqrt2pi
final double sigmaSqrt2piThe scale multiplied by sqrt(2 pi). Computed to high precision.
-
-
Constructor Details
-
FoldedNormalDistribution
FoldedNormalDistribution(double sigma) - Parameters:
sigma
- Scale parameter.
-
-
Method Details
-
of
Creates a folded normal distribution. If the locationmu
is zero this is the half-normal distribution.- Parameters:
mu
- Location parameter.sigma
- Scale parameter.- Returns:
- the distribution
- Throws:
IllegalArgumentException
- ifsigma <= 0
.
-
getMu
public abstract double getMu()Gets the location parameter \( \mu \) of this distribution.- Returns:
- the mu parameter.
-
getSigma
public double getSigma()Gets the scale parameter \( \sigma \) of this distribution.- Returns:
- the sigma parameter.
-
getMean
public abstract double getMean()Gets the mean of this distribution.For location parameter \( \mu \) and scale parameter \( \sigma \), the mean is:
\[ \sigma \sqrt{ \frac 2 \pi } \exp \left( \frac{-\mu^2}{2\sigma^2} \right) + \mu \operatorname{erf} \left( \frac \mu {\sqrt{2\sigma^2}} \right) \]
where \( \operatorname{erf} \) is the error function.
- Returns:
- the mean.
-
getVariance
public abstract double getVariance()Gets the variance of this distribution.For location parameter \( \mu \), scale parameter \( \sigma \) and a distribution mean \( \mu_Y \), the variance is:
\[ \mu^2 + \sigma^2 - \mu_{Y}^2 \]
- Returns:
- the variance.
-
getSupportLowerBound
public double getSupportLowerBound()Gets the lower bound of the support. It must return the same value asinverseCumulativeProbability(0)
, i.e. \( \inf \{ x \in \mathbb R : P(X \le x) \gt 0 \} \).The lower bound of the support is always 0.
- Returns:
- 0.
-
getSupportUpperBound
public double getSupportUpperBound()Gets the upper bound of the support. It must return the same value asinverseCumulativeProbability(1)
, i.e. \( \inf \{ x \in \mathbb R : P(X \le x) = 1 \} \).The upper bound of the support is always positive infinity.
- Returns:
- positive infinity.
-