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 classSpecialisation for the half-normal distribution.private static classRegular implementation of the folded normal distribution.Nested classes/interfaces inherited from interface ContinuousDistribution
ContinuousDistribution.Sampler -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final doubleThe scale.(package private) final doubleThe scale multiplied by sqrt(2).(package private) final doubleThe scale multiplied by sqrt(2 pi). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract doublegetMean()Gets the mean of this distribution.abstract doublegetMu()Gets the location parameter \( \mu \) of this distribution.doublegetSigma()Gets the scale parameter \( \sigma \) of this distribution.doubleGets the lower bound of the support.doubleGets the upper bound of the support.abstract doubleGets the variance of this distribution.static FoldedNormalDistributionof(double mu, double sigma) Creates a folded normal distribution.Methods inherited from class AbstractContinuousDistribution
createSampler, getMedian, inverseCumulativeProbability, inverseSurvivalProbability, isSupportConnected, probabilityMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface 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 locationmuis 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.
-