Learn R Programming

fBasics (version 240.10067)

HyperbolicDistribution: Generalized Hyperbolic Distribution

Description

A collection and description of functions to compute density, distribution function, quantile function and to generate random variates for three cases of the generalized hyperbolic distribution: the generalized hyperbolic distribution itself, the hperbolic distribution and the normal inverse Gaussian distribution. The functions are: ll{ [dpqr]gh The generalized hyperbolic distribution, [dpqr]hyp The hyperbolic distribution, hypMode the hyperbolic mode, [dpqr]nig The normal inverse Gaussian distribution, hypSlider interactive hyperbolic distribution display, nigSlider interactive NIG distribution display. }

Usage

dgh(x, alpha = 1, beta = 0, delta = 1, mu = 0, lambda = 1)
pgh(q, alpha = 1, beta = 0, delta = 1, mu = 0, lambda = 1)
qgh(p, alpha = 1, beta = 0, delta = 1, mu = 0, lambda = 1)
rgh(n, alpha = 1, beta = 0, delta = 1, mu = 0, lambda = 1)

dhyp(x, alpha = 1, beta = 0, delta = 1, mu = 0, pm = c(1, 2, 3, 4)) phyp(q, alpha = 1, beta = 0, delta = 1, mu = 0, pm = c(1, 2, 3, 4), ...) qhyp(p, alpha = 1, beta = 0, delta = 1, mu = 0, pm = c(1, 2, 3, 4), ...) rhyp(n, alpha = 1, beta = 0, delta = 1, mu = 0, pm = c(1, 2, 3, 4))

hypMode(alpha = 1, beta = 0, delta = 1, mu = 0, pm = c(1, 2, 3, 4))

dnig(x, alpha = 1, beta = 0, delta = 1, mu = 0) pnig(q, alpha = 1, beta = 0, delta = 1, mu = 0) qnig(p, alpha = 1, beta = 0, delta = 1, mu = 0) rnig(n, alpha = 1, beta = 0, delta = 1, mu = 0)

hypSlider() nigSlider()

Arguments

alpha, beta, delta, mu, lambda
shape parameter alpha; skewness parameter beta, abs(beta) is in the range (0, alpha); scale parameter delta, delta must be zero or positive; locati
n
number of observations.
p
a numeric vector of probabilities.
pm
an integer value between 1 and 4 for the selection of the parameterization. The default takes the first parameterization.
x, q
a numeric vector of quantiles.
...
arguments to be passed to the function integrate.

Value

  • All values for the *gh, *hyp, and *nig functions are numeric vectors: d* returns the density, p* returns the distribution function, q* returns the quantile function, and r* generates random deviates. All values have attributes named "param" listing the values of the distributional parameters. The function hyp*Mode returns the mode in the appropriate parameterization. A numeric value. The functions hypSlider and nigSlider display for educational purposes the densities and probabilities of the hyperbolic and normal inverse Gaussian distributions.

Details

Generalized Hyperbolic Distibution: The generator rgh is based on the GH algorithm given by Scott (2004). Hyperbolic Distibution: The generator rhyp is based on the HYP algorithm given by Atkinson (1982). Normal Inverse Gaussian Distribution: The random deviates are calculated with the method described by Raible (2000).

References

Atkinson, A.C. (1982); The simulation of generalized inverse Gaussian and hyperbolic random variables, SIAM J. Sci. Stat. Comput. 3, 502--515.

Barndorff-Nielsen O. (1977); Exponentially decreasing distributions for the logarithm of particle size, Proc. Roy. Soc. Lond., A353, 401--419.

Barndorff-Nielsen O., Blaesild, P. (1983); Hyperbolic distributions. In Encyclopedia of Statistical Sciences, Eds., Johnson N.L., Kotz S. and Read C.B., Vol. 3, pp. 700--707. New York: Wiley.

Raible S. (2000); Levy Processes in Finance: Theory, Numerics and Empirical Facts, PhD Thesis, University of Freiburg, Germany, 161 pages.

Examples

Run this code
## SOURCE("fBasics.2B-HyperbolicDistribution")

## Plot:
   par(ask = FALSE)
    
## nig -
   set.seed(1953)
   r = rnig(5000, alpha = 1, beta = 0.3, delta = 1)
   plot(r, type = "l", col = "steelblue",
     main = "nig: alpha=1 beta=0.3 delta=1")
 
## nig - 
   # Plot empirical density and compare with true density:
   hist(r, n = 25, probability = TRUE, border = "white", col = "steelblue4")
   x = seq(-5, 5, 0.25)
   lines(x, dnig(x, alpha = 1, beta = 0.3, delta = 1))
 
## nig -  
   # Plot df and compare with true df:
   plot(sort(r), (1:5000/5000), main = "Probability", col = "steelblue4")
   lines(x, pnig(x, alpha = 1, beta = 0.3, delta = 1))
   
## nig -
   # Compute Quantiles:
   qnig(pnig(seq(-5, 5, 1), alpha = 1, beta = 0.3, delta = 1), 
     alpha = 1, beta = 0.3, delta = 1)

Run the code above in your browser using DataLab