Density function, distribution function, quantiles and random number
generation for the generalized hyperbolic distribution, with
parameters alpha (tail), beta (skewness),
delta (peakness), mu (location) and
lambda (shape).
Specifying the parameters as a vector of the form c(mu,delta,alpha,beta,lambda).
method
Character. If "spline" quantiles are found from a
spline approximation to the distribution function. If
"integrate", the distribution function used is always obtained
by integration.
lower.tail
Logical. If TRUE, probabilities are
P(X<=x), otherwise they are P(X>x).
subdivisions
The maximum number of subdivisions used to
integrate the density and determine the accuracy of the distribution
function calculation.
intTol
Value of rel.tol and hence abs.tol in
calls to integrate. See integrate.
valueOnly
Logical. If valueOnly = TRUE calls to
pghyp only return the value obtained for the integral.
If valueOnly = FALSE an estimate of the
accuracy of the numerical integration is also returned.
nInterpol
Number of points used in qghyp for cubic
spline interpolation of the distribution function.
uniTol
Value of tol in
calls to uniroot. See uniroot.
...
Passes additional arguments to integrate in
pghyp and qghyp, and to uniroot in
qghyp.
Details
Users may either specify the values of the parameters individually or
as a vector. If both forms are specified, then the values specified by
the vector param will overwrite the other ones. In addition the
parameter values are examined by calling the function
ghypCheckPars to see if they are valid.
Use ghypChangePars to convert from the
(rho, zeta),
(xi, chi),
(alpha bar, beta bar), or
(pi, zeta) parameterizations
to the (alpha, beta) parameterization used
above.
pghyp uses the function integrate to
numerically integrate the density function. The integration is from
-Inf to x if x is to the left of the mode, and
from x to Inf if x is to the right of the
mode. The probability calculated this way is subtracted from 1 if
required. Integration in this manner appears to make calculation of
the quantile function more stable in extreme cases.
Calculation of quantiles using qghyp permits the use of two
different methods. Both methods use uniroot to find the value
of x for which a given q is equal F(x) where F
denotes the cumulative distribution function. The difference is in how
the numerical approximation to F is obtained. The obvious
and more accurate method is to calculate the value of F(x)
whenever it is required using a call to pghyp. This is what
is done if the method is specified as "integrate". It is clear
that the time required for this approach is roughly linear in the
number of quantiles being calculated. A Q-Q plot of a large data set
will clearly take some time. The alternative (and default) method is
that for the major part of the distribution a spline approximation to
F(x) is calculated and quantiles found using uniroot with
this approximation. For extreme values (for which the tail probability
is less than 10^(-7)), the integration method is still
used even when the method specifed is "spline".
If accurate probabilities or quantiles are required, tolerances
(intTol and uniTol) should be set to small values, say
10^(-10) or 10^(-12) with method
= "integrate". Generally then accuracy might be expected to be at
least 10^(-9). If the default values of the functions
are used, accuracy can only be expected to be around
10^(-4). Note that on 32-bit systems
.Machine$double.eps^0.25 = 0.0001220703 is a typical value.
Value
dghyp gives the density function, pghyp gives the
distribution function, qghyp gives the quantile function and
rghyp generates random variates.
An estimate of the accuracy of the approximation to the distribution
function can be found by setting valueOnly = FALSE in the call to
pghyp which returns a list with components value and
error.
Barndorff-Nielsen, O., and Bl<c3><a6>sild, 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.
Bibby, B. M., and S<c3><b6>renson,M. (2003).
Hyperbolic processes in finance.
In Handbook of Heavy Tailed Distributions in Finance,ed.,
Rachev, S. T. pp. 212–248. Elsevier Science B.~V.
Prause, K. (1999) The generalized hyperbolic models: Estimation,
financial derivatives and risk measurement. PhD Thesis, Mathematics
Faculty, University of Freiburg.
See Also
dhyperb for the hyperbolic distribution,
dgig for the generalized inverse Gaussian distribution,
safeIntegrate,
integrate for its shortfalls, also
splinefun, uniroot and
ghypChangePars for changing parameters to the
(alpha,beta) parameterization.
Examples
param <- c(0, 1, 3, 1, 1/2)
ghypRange <- ghypCalcRange(param = param, tol = 10^(-3))
par(mfrow = c(1, 2))
### curves of density and distribution
curve(dghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
title("Density of the \n Generalized Hyperbolic Distribution")
curve(pghyp(x, param = param), ghypRange[1], ghypRange[2], n = 500)
title("Distribution Function of the \n Generalized Hyperbolic Distribution")
### curves of density and log density
par(mfrow = c(1, 2))
data <- rghyp(1000, param = param)
curve(dghyp(x, param = param), range(data)[1], range(data)[2],
n = 1000, col = 2)
hist(data, freq = FALSE, add = TRUE)
title("Density and Histogram of the\n Generalized Hyperbolic Distribution")
logHist(data, main = "Log-Density and Log-Histogram of\n the Generalized
Hyperbolic Distribution")
curve(log(dghyp(x, param = param)),
range(data)[1], range(data)[2],
n = 500, add = TRUE, col = 2)
### plots of density and derivative
par(mfrow = c(2, 1))
curve(dghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
title("Density of the\n Generalized Hyperbolic Distribution")
curve(ddghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
title("Derivative of the Density of the\n Generalized Hyperbolic Distribution")
Results
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(GeneralizedHyperbolic)
Loading required package: DistributionUtils
Loading required package: RUnit
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/GeneralizedHyperbolic/dghyp.Rd_%03d_medium.png", width=480, height=480)
> ### Name: GeneralizedHyperbolicDistribution
> ### Title: Generalized Hyperbolic Distribution
> ### Aliases: dghyp pghyp qghyp rghyp ddghyp
> ### Keywords: distribution
>
> ### ** Examples
>
> param <- c(0, 1, 3, 1, 1/2)
> ghypRange <- ghypCalcRange(param = param, tol = 10^(-3))
> par(mfrow = c(1, 2))
>
> ### curves of density and distribution
> curve(dghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
> title("Density of the \n Generalized Hyperbolic Distribution")
> curve(pghyp(x, param = param), ghypRange[1], ghypRange[2], n = 500)
> title("Distribution Function of the \n Generalized Hyperbolic Distribution")
>
> ### curves of density and log density
> par(mfrow = c(1, 2))
> data <- rghyp(1000, param = param)
> curve(dghyp(x, param = param), range(data)[1], range(data)[2],
+ n = 1000, col = 2)
> hist(data, freq = FALSE, add = TRUE)
> title("Density and Histogram of the\n Generalized Hyperbolic Distribution")
> logHist(data, main = "Log-Density and Log-Histogram of\n the Generalized
+ Hyperbolic Distribution")
> curve(log(dghyp(x, param = param)),
+ range(data)[1], range(data)[2],
+ n = 500, add = TRUE, col = 2)
>
> ### plots of density and derivative
> par(mfrow = c(2, 1))
> curve(dghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
> title("Density of the\n Generalized Hyperbolic Distribution")
> curve(ddghyp(x, param = param), ghypRange[1], ghypRange[2], n = 1000)
> title("Derivative of the Density of the\n Generalized Hyperbolic Distribution")
>
>
>
>
>
> dev.off()
null device
1
>