Class StableSampler.WeronStableSampler

  • All Implemented Interfaces:
    ContinuousSampler, SharedStateContinuousSampler, SharedStateSampler<SharedStateContinuousSampler>
    Direct Known Subclasses:
    StableSampler.CMSStableSampler
    Enclosing class:
    StableSampler

    static class StableSampler.WeronStableSampler
    extends StableSampler.BaseStableSampler
    Implement the generic stable distribution case: alpha < 2 and beta != 0. This routine assumes alpha != 1.

    Implements the Chambers-Mallows-Stuck (CMS) method using the formula provided in Weron (1996) "On the Chambers-Mallows-Stuck method for simulating skewed stable random variables" Statistics & Probability Letters. 28 (2): 165–171. This method is easier to correct from infinite and NaN results by boxing intermediate infinite values.

    The formula produces a stable deviate from the 1-parameterization that is discontinuous at alpha=1. A shift is used to create the 0-parameterization. This shift is very large as alpha -> 1 and the output loses bits of precision in the deviate due to cancellation. It is not recommended to use this sampler when alpha -> 1 except for edge case correction.

    This produces non-NaN output for all parameters alpha, beta, u and w with the correct orientation for extremes of the distribution support. The formulas used are symmetric with regard to beta and u.

    See Also:
    Weron, R (1996). Statistics & Probability Letters. 28 (2): 165–171.
    • Field Detail

      • eps

        protected final double eps
        Epsilon (1 - alpha).
      • meps1

        protected final double meps1
        Alpha (1 - eps).
      • zeta

        protected final double zeta
        Cache of expression value used in generation.
      • atanZeta

        protected final double atanZeta
        Cache of expression value used in generation.
      • scale

        protected final double scale
        Cache of expression value used in generation.
      • inv1mEps

        protected final double inv1mEps
        1 / alpha = 1 / (1 - eps).
      • epsDiv1mEps

        protected final double epsDiv1mEps
        (1 / alpha) - 1 = eps / (1 - eps).
      • lower

        protected final double lower
        The inclusive lower support for the distribution.
      • upper

        protected final double upper
        The inclusive upper support for the distribution.
    • Constructor Detail

      • WeronStableSampler

        WeronStableSampler​(UniformRandomProvider rng,
                           double alpha,
                           double beta)
        Parameters:
        rng - Underlying source of randomness
        alpha - Stability parameter. Must be in the interval (0, 2].
        beta - Skewness parameter. Must be in the interval [-1, 1].
    • Method Detail

      • sample

        public double sample()
        Description copied from class: StableSampler
        Generate a sample from a stable distribution.

        The distribution uses the 0-parameterization: S(alpha, beta, gamma, delta; 0).

        Specified by:
        sample in interface ContinuousSampler
        Specified by:
        sample in class StableSampler
        Returns:
        a sample.
      • createSample

        protected double createSample​(double phi,
                                      double w)
        Create the sample. This routine is robust to edge cases and returns a deviate at the extremes of the support. It correctly handles alpha -> 0 when the sample is increasingly likely to be +/- infinity.
        Parameters:
        phi - Uniform deviate in (-pi/2, pi/2)
        w - Exponential deviate
        Returns:
        x