Class FoldedNormalDistribution

    • Field Detail

      • sigma

        final double sigma
        The scale.
      • sigmaSqrt2

        final double sigmaSqrt2
        The 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 sigmaSqrt2pi
        The scale multiplied by sqrt(2 pi). Computed to high precision.
    • Constructor Detail

      • FoldedNormalDistribution

        FoldedNormalDistribution​(double sigma)
        Parameters:
        sigma - Scale parameter.
    • Method Detail

      • of

        public static FoldedNormalDistribution of​(double mu,
                                                  double sigma)
        Creates a folded normal distribution. If the location mu is zero this is the half-normal distribution.
        Parameters:
        mu - Location parameter.
        sigma - Scale parameter.
        Returns:
        the distribution
        Throws:
        java.lang.IllegalArgumentException - if sigma <= 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 as inverseCumulativeProbability(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 as inverseCumulativeProbability(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.