Class StableSampler
- java.lang.Object
-
- org.apache.commons.rng.sampling.distribution.StableSampler
-
- All Implemented Interfaces:
ContinuousSampler,SharedStateContinuousSampler,SharedStateSampler<SharedStateContinuousSampler>
public abstract class StableSampler extends Object implements SharedStateContinuousSampler
Samples from a stable distribution.Several different parameterizations exist for the stable distribution. This sampler uses the 0-parameterization distribution described in Nolan (2020) "Univariate Stable Distributions: Models for Heavy Tailed Data". Springer Series in Operations Research and Financial Engineering. Springer. Sections 1.7 and 3.3.3.
The random variable \( X \) has the stable distribution \( S(\alpha, \beta, \gamma, \delta; 0) \) if its characteristic function is given by:
\[ E(e^{iuX}) = \begin{cases} \exp \left (- \gamma^\alpha |u|^\alpha \left [1 - i \beta (\tan \frac{\pi \alpha}{2})(\text{sgn}(u)) \right ] + i \delta u \right ) & \alpha \neq 1 \\ \exp \left (- \gamma |u| \left [1 + i \beta \frac{2}{\pi} (\text{sgn}(u)) \log |u| \right ] + i \delta u \right ) & \alpha = 1 \end{cases} \]
The function is continuous with respect to all the parameters; the parameters \( \alpha \) and \( \beta \) determine the shape and the parameters \( \gamma \) and \( \delta \) determine the scale and location. The support of the distribution is:
\[ \text{support} f(x|\alpha,\beta,\gamma,\delta; 0) = \begin{cases} [\delta - \gamma \tan \frac{\pi \alpha}{2}, \infty) & \alpha \lt 1\ and\ \beta = 1 \\ (-\infty, \delta + \gamma \tan \frac{\pi \alpha}{2}] & \alpha \lt 1\ and\ \beta = -1 \\ (-\infty, \infty) & otherwise \end{cases} \]
The implementation uses the Chambers-Mallows-Stuck (CMS) method as described in:
- Chambers, Mallows & Stuck (1976) "A Method for Simulating Stable Random Variables". Journal of the American Statistical Association. 71 (354): 340–344.
- Weron (1996) "On the Chambers-Mallows-Stuck method for simulating skewed stable random variables". Statistics & Probability Letters. 28 (2): 165–171.
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static StableSamplerof(UniformRandomProvider rng, double alpha, double beta)Creates a standardized sampler of a stable distribution with zero location and unit scale.static StableSamplerof(UniformRandomProvider rng, double alpha, double beta, double gamma, double delta)Creates a sampler of a stable distribution.abstract doublesample()Generate a sample from a stable distribution.StringtoString()abstract StableSamplerwithUniformRandomProvider(UniformRandomProvider rng)Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.commons.rng.sampling.distribution.ContinuousSampler
samples, samples
-
-
-
-
Method Detail
-
sample
public abstract double sample()
Generate a sample from a stable distribution.The distribution uses the 0-parameterization: S(alpha, beta, gamma, delta; 0).
- Specified by:
samplein interfaceContinuousSampler- Returns:
- a sample.
-
withUniformRandomProvider
public abstract StableSampler withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.- Specified by:
withUniformRandomProviderin interfaceSharedStateSampler<SharedStateContinuousSampler>- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
-
of
public static StableSampler of(UniformRandomProvider rng, double alpha, double beta)
Creates a standardized sampler of a stable distribution with zero location and unit scale.Special cases:
alpha=2returns a Gaussian distribution sampler withmean=0andvariance=2(Note:betahas no effect on the distribution).alpha=1andbeta=0returns a Cauchy distribution sampler withlocation=0andscale=1.alpha=0.5andbeta=1returns a Levy distribution sampler withlocation=-1andscale=1. This location shift is due to the 0-parameterization of the stable distribution.
Note: To allow the computation of the stable distribution the parameter alpha is validated using
1 - alphain the interval[-1, 1).- Parameters:
rng- Generator of uniformly distributed random numbers.alpha- Stability parameter. Must be in the interval(0, 2].beta- Skewness parameter. Must be in the interval[-1, 1].- Returns:
- the sampler
- Throws:
IllegalArgumentException- if1 - alpha < -1; or1 - alpha >= 1; orbeta < -1; orbeta > 1.
-
of
public static StableSampler of(UniformRandomProvider rng, double alpha, double beta, double gamma, double delta)
Creates a sampler of a stable distribution. This applies a transformation to the standardized sampler.The random variable \( X \) has the stable distribution \( S(\alpha, \beta, \gamma, \delta; 0) \) if:
\[ X = \gamma Z_0 + \delta \]
where \( Z_0 = S(\alpha, \beta; 0) \) is a standardized stable distribution.
Note: To allow the computation of the stable distribution the parameter alpha is validated using
1 - alphain the interval[-1, 1).- Parameters:
rng- Generator of uniformly distributed random numbers.alpha- Stability parameter. Must be in the interval(0, 2].beta- Skewness parameter. Must be in the interval[-1, 1].gamma- Scale parameter. Must be strictly positive and finite.delta- Location parameter. Must be finite.- Returns:
- the sampler
- Throws:
IllegalArgumentException- if1 - alpha < -1; or1 - alpha >= 1; orbeta < -1; orbeta > 1; orgamma <= 0; orgammaordeltaare not finite.- See Also:
of(UniformRandomProvider, double, double)
-
-