Class StableSampler.WeronStableSampler
- All Implemented Interfaces:
ContinuousSampler,SharedStateContinuousSampler,SharedStateSampler<SharedStateContinuousSampler>
- Direct Known Subclasses:
StableSampler.CMSStableSampler
- Enclosing class:
StableSampler
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:
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.commons.rng.sampling.distribution.StableSampler
StableSampler.Alpha1CMSStableSampler, StableSampler.Beta0CMSStableSampler, StableSampler.Beta0WeronStableSampler, StableSampler.CMSStableSampler, StableSampler.SpecialMath, StableSampler.WeronStableSampler -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final doubleCache of expression value used in generation.protected final doubleEpsilon (1 - alpha).protected final double(1 / alpha) - 1 = eps / (1 - eps).protected final double1 / alpha = 1 / (1 - eps).protected final doubleThe inclusive lower support for the distribution.protected final doubleAlpha (1 - eps).protected final doubleCache of expression value used in generation.protected final doubleThe inclusive upper support for the distribution.protected final doubleCache of expression value used in generation. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected doublecreateSample(double phi, double w) Create the sample.doublesample()Generate a sample from a stable distribution.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 org.apache.commons.rng.sampling.distribution.StableSampler.BaseStableSampler
getOmega, getPhi, getPhiBy2Methods inherited from class org.apache.commons.rng.sampling.distribution.StableSampler
nextLong, of, of, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.commons.rng.sampling.distribution.ContinuousSampler
samples, samples
-
Field Details
-
eps
protected final double epsEpsilon (1 - alpha). -
meps1
protected final double meps1Alpha (1 - eps). -
zeta
protected final double zetaCache of expression value used in generation. -
atanZeta
protected final double atanZetaCache of expression value used in generation. -
scale
protected final double scaleCache of expression value used in generation. -
inv1mEps
protected final double inv1mEps1 / alpha = 1 / (1 - eps). -
epsDiv1mEps
protected final double epsDiv1mEps(1 / alpha) - 1 = eps / (1 - eps). -
lower
protected final double lowerThe inclusive lower support for the distribution. -
upper
protected final double upperThe inclusive upper support for the distribution.
-
-
Constructor Details
-
WeronStableSampler
WeronStableSampler(UniformRandomProvider rng, double alpha, double beta) - Parameters:
rng- Underlying source of randomnessalpha- Stability parameter. Must be in the interval(0, 2].beta- Skewness parameter. Must be in the interval[-1, 1].
-
WeronStableSampler
WeronStableSampler(UniformRandomProvider rng, StableSampler.WeronStableSampler source) - Parameters:
rng- Underlying source of randomnesssource- Source to copy.
-
-
Method Details
-
sample
public double sample()Description copied from class:StableSamplerGenerate a sample from a stable distribution.The distribution uses the 0-parameterization: S(alpha, beta, gamma, delta; 0).
- Specified by:
samplein interfaceContinuousSampler- Specified by:
samplein classStableSampler- 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 handlesalpha -> 0when the sample is increasingly likely to be +/- infinity.- Parameters:
phi- Uniform deviate in(-pi/2, pi/2)w- Exponential deviate- Returns:
- x
-
withUniformRandomProvider
Description copied from class:StableSamplerCreate 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>- Specified by:
withUniformRandomProviderin classStableSampler- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
-