Generalized Hyperbolic Distribution {ghyp}R Documentation

The Generalized Hyperbolic Distribution

Description

Density, distribution function, quantile function, expected shortfall and random generation for the univariate and multivariate generalized hyperbolic distribution and its special cases.

Usage

dghyp(x, object = ghyp(), logvalue = F)

pghyp(q, object = ghyp(), n.sim = 10000, subdivisions = 200, 
      rel.tol = .Machine$double.eps^0.5, abs.tol = rel.tol)

qghyp(p, object = ghyp(), method = c("integration", "splines"), 
      spline.points = 200, subdivisions = 200, 
      root.tol = .Machine$double.eps^0.5, 
      rel.tol = root.tol^1.5, abs.tol = rel.tol)

rghyp(n, object = ghyp())

ESghyp(p, object = ghyp(), ...)

Arguments

p A vector of probabilities.
x A vector, matrix or data.frame of quantiles.
q A vector, matrix or data.frame of quantiles.
n Number of observations.
object An object inheriting from class ghypbase.
logvalue If TRUE the logarithm of the density will be returned.
n.sim The number of simulations when computing pghyp of a multivariate generalized hyperbolic distribution.
subdivisions The number of subdivisions passed to integrate when computing the distribution function pghyp of a univariate generalized hyperbolic distribution.
rel.tol The relative accuracy requested from integrate.
abs.tol The absolute accuracy requested from integrate.
method The method how quantiles are computed.
spline.points The number of support points when computing the quantiles using splines instead of integration.
root.tol The tolerance of uniroot.
... Arguments passed from ESghyp to qghyp.

Details

qghyp and ESghyp only work for univariate generalized hyperbolic distributions.

pghyp is a crude implementation of the distribution function for multivariate generalized hyperbolic distributions by means of monte carlo calculation.

qghyp computes the quantiles either by using the “integration” method where the root of the distribution function is solved or via “splines” which interpolates the distribution function and solves it with uniroot afterwards. The “integration” method is recommended when few quantiles are required. If more than approximately 20 quantiles are needed to be calculated the “splines” method becomes faster. The accuracy can be controlled with an adequate setting of the parameters rel.tol, abs.tol, root.tol and spline.points.

rghyp uses the random generator for generalized inverse gaussian distributed random variates from the S-Plus library QRMlib (see http://www.math.ethz.ch/~mcneil/book/QRMlib.html).

Value

dghyp gives the density,
pghyp gives the distribution function,
qghyp gives the quantile function,
ESghyp gives the expected shortfall and
rghyp generates random deviates.

Note

Objects generated with hyp, NIG, VG and student.t have to use Xghyp as well. E.g. dNIG(NIG()) does not work.

When the skewness becomes very large the functions using qghyp may fail. The functions using qghyp are ESghyp, qqghyp, pairs and portfolio.optimize.

Author(s)

David Lüthi

References

Quantitative Risk Management: Concepts, Techniques and Tools by Alexander J. McNeil, Rüdiger Frey and Paul Embrechts
Princeton Press, 2005

See Also

ghypuv-class, ghypmv-class, fit.ghypuv, fit.ghypmv, integrate, uniroot.

Examples

  ## Univariate generalized hyperbolic distribution
  univariate.ghyp <- ghyp()
  par(mfrow=c(5,1))
  quantiles <- seq(-4,4,length=500)
  plot(quantiles,dghyp(quantiles,univariate.ghyp))
  plot(quantiles,pghyp(quantiles,univariate.ghyp))
  probabilities <- seq(1e-4,1-1e-4,length=500)
  plot(probabilities,qghyp(probabilities,univariate.ghyp,method="splines"))
  plot(probabilities,ESghyp(probabilities,univariate.ghyp,method="splines"))
  hist(rghyp(n=10000,univariate.ghyp),nclass=100)
  ## Mutivariate generalized hyperbolic distribution
  multivariate.ghyp <- ghyp(sigma=var(matrix(rnorm(10),ncol=2)),mu=1:2,gamma=-(2:1))
  par(mfrow=c(2,1))
  quantiles <- outer(seq(-4,4,length=50),c(1,1))
  plot(quantiles[,1],dghyp(quantiles,multivariate.ghyp))
  plot(quantiles[,1],pghyp(quantiles,multivariate.ghyp,n.sim=1000))
  rghyp(n=10,multivariate.ghyp)

[Package ghyp version 0.9.3 Index]