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.
- Since:
- 1.4
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class 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 StableSampler.BaseStableSampler
getOmega, getPhi, getPhiBy2Methods inherited from class StableSampler
nextLong, of, of, toStringMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface 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
-