StableDistribution {fBasics}R Documentation

Stable Distribution Function

Description

A collection and description of functions to compute density, distribution function, quantile function and to generate random variates, the stable distribution, and the stable mode. Two different cases are considered, the first for the symmetric and the second for the skewed distribution.

The functions are:

[dpqr]symstb The symmetric stable distribution,
[dpqr]stable the skewed stable distribution,
symstbSlider interactive symmetric distribution display,
stableSlider interactive stable distribution display.

Usage

dsymstb(x, alpha)
psymstb(q, alpha)
qsymstb(p, alpha)
rsymstb(n, alpha)

stableMode(alpha, beta)

dstable(x, alpha, beta, gamma = 1, delta = 0, pm = c(0, 1, 2))
pstable(q, alpha, beta, gamma = 1, delta = 0, pm = c(0, 1, 2))
qstable(p, alpha, beta, gamma = 1, delta = 0, pm = c(0, 1, 2))
rstable(n, alpha, beta, gamma = 1, delta = 0, pm = c(0, 1, 2))

symstbSlider()
stableSlider()

Arguments

alpha, beta, gamma, delta value of the index parameter alpha with alpha = (0,2]; skewness parameter beta, in the range [-1, 1]; scale parameter gamma; and shift parameter delta.
n number of observations, an integer value.
p a numeric vector of probabilities.
pm parameterization, an integer value by default pm=0, the 'S0' parameterization.
x, q a numeric vector of quantiles.

Details

Symmetric Stable Distribution:

For the density and probability the approach of McCulloch is implemented. Note, that McCulloch's approach has a density precision of 0.000066 and a distribution precision of 0.000022 for alpha in the range [0.84, 2.00]. Quantiles are evaluated from a root finding process via the probability function. Thus, this leads to nonnegligible errors for small quantiles, since the quantile evaluation depends on the quality of the probability function.To achieve higher precisions use the function stable with argument beta=0.
For generation of random deviates the results of Chambers, Mallows, and Stuck are used.

Skew Stable Distribution:

The function uses the approach of J.P. Nolan for general stable distributions. Nolan derived expressions in form of integrals based on the charcteristic function for standardized stable random variables. These integrals are numerically evaluated using R's function integrate.
"S0" parameterization [pm=0]: based on the (M) representation of Zolotarev for an alpha stable distribution with skewness beta. Unlike the Zolotarev (M) parameterization, gamma and delta are straightforward scale and shift parameters. This representation is continuous in all 4 parameters, and gives an intuitive meaning to gamma and delta that is lacking in other parameterizations.
"S" or "S1" parameterization [pm=1]: the parameterization used by Samorodnitsky and Taqqu in the book Stable Non-Gaussian Random Processes. It is a slight modification of Zolotarev's (A) parameterization.
"S*" or "S2" parameterization [pm=2]: a modification of the S0 parameterization which is defined so that (i) the scale gamma agrees with the Gaussian scale (standard dev.) when alpha=2 and the Cauchy scale when alpha=1, (ii) the mode is exactly at delta.
"S3" parameterization [pm=3]: an internal parameterization. The scale is the same as the S2 parameterization, the shift is -beta*g(alpha), where g(alpha) is defined in Nolan [1999].

Value

All values for the *symstb and *stable functions are numeric vectors: d* returns the density, p* returns the distribution function, q* returns the quantile function, and r* generates random deviates.
The function stableMode returns a numeric value, the location of the stable mode.
The functions symstbSlider and stableSlider display for educational purposes the densities and probabilities of the symmetric and skew stable distributions.

Author(s)

McCulloch for the 'symstb' Fortran program, and
Diethelm Wuertz for the Rmetrics R-port.

References

Chambers J.M., Mallows, C.L. and Stuck, B.W. (1976); A Method for Simulating Stable Random Variables, J. Amer. Statist. Assoc. 71, 340–344.

Nolan J.P. (1999); Stable Distributions, Preprint, University Washington DC, 30 pages.

Nolan J.P. (1999); Numerical Calculation of Stable Densities and Distribution Functions, Preprint, University Washington DC, 16 pages.

Samoridnitsky G., Taqqu M.S. (1994); Stable Non-Gaussian Random Processes, Stochastic Models with Infinite Variance, Chapman and Hall, New York, 632 pages.

Weron, A., Weron R. (1999); Computer Simulation of Levy alpha-Stable Variables and Processes, Preprint Technical Univeristy of Wroclaw, 13 pages.

Examples

  
## SOURCE("fBasics.13A-StableDistribution")

## rsymstb -
   xmpBasics("\nStart: Symmetric Stable Distribuion:  > ")
   par(mfcol = c(3, 2), cex = 0.7)
   set.seed(1953)
   r = rsymstb(n = 1000, alpha = 1.9)
   plot(r, type = "l", main = "symstb: alpha = 1.9")
   # Plot empirical density and compare with true density:
   hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
   x = seq(-5, 5, 0.1)
   lines(x, dsymstb(x = x, alpha = 1.9))
   # Plot df and compare with true df:
   plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
   lines(x, psymstb(x, alpha = 1.9))
   # Compute quantiles:
   qsymstb(psymstb(q = seq(-10, 10, 1), alpha = 1.9), alpha = 1.9)
  
## stable - 
   xmpBasics("\nNext: Skew Stable Distribuion:  > ")
   # Compared to R, this might be quite slow under S-Plus ...
   set.seed(1953)
   r = rstable(n = 1000, alpha = 1.9, beta = 0.3)
   plot(r, type = "l", main = "stable: alpha=1.9 beta=0.3")
   # Plot empirical density and compare with true density:
   hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
   x = seq(-5, 5, 0.4)
   lines(x, dstable(x = x, alpha = 1.9, beta = 0.3))
   # Plot df and compare with true df:
   plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
   lines(x, pstable(q = x, alpha = 1.9, beta = 0.3))
   # Compute quantiles:
   qstable(pstable(seq(-4, 4, 1), alpha = 1.9, beta = 0.3), 
     alpha = 1.9, beta = 0.3)
     
## stable -
   xmpBasics("\nNext: Paramterization S1:  > ")
   set.seed(1953)
   r = rstable(n = 1000, alpha = 1.9, beta = 0.3, pm = 1)
   plot(r, type = "l", main = "S1 stable: alpha=1.9 beta=0.3")
   # Plot empirical density and compare with true density:
   hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
   x = seq(-5, 5, 0.4)
   lines(x, dstable(x = x, alpha = 1.9, beta = 0.3))
   # Plot df and compare with true df:
   plot(sort(r), (1:1000/1000), main = "Probability", col = "steelblue4")
   lines(x, pstable(q = x, alpha = 1.9, beta = 0.3, pm = 1))
   # Compute quantiles:
   qstable(pstable(seq(-4, 4, 1), alpha = 1.9, beta = 0.3, pm = 1), 
     alpha = 1.9, beta = 0.3, pm = 1)  

[Package fBasics version 221.10065 Index]