Density function, distribution function, quantiles and
random number generation for the hyperbolic distribution
with parameter vector Theta. Utility routines are included for
the derivative of the density function and to find suitable break
points for use in determining the distribution function.
where K_1() is the modified Bessel function of the
third kind with order 1.
A succinct description of the hyperbolic distribution is given in
Barndorff-Nielsen and Bl<c3><a6>sild (1983). Three different
possibleparameterisations are described in that paper. A fourth
parameterization is given in Prause (1999). All use location and scale
parameters mu and delta. There are two other
parameters in each case.
Use hyperbChangePars to convert from the
(alpha,beta)(phi,gamma) or
xi,chi) parameterisations to the
(pi,zeta) parameterisation used above.
phyperb breaks the real line into eight regions in order to
determine the integral of dhyperb. The break points determining
the regions are found by hyperbBreaks, based on the values of
small, tiny, and deriv. In the extreme tails of
the distribution where the probability is tiny according to
hyperbCalcRange, the probability is taken to be zero. In the
range between where the probability is tiny and small
according to hyperbCalcRange, an exponential approximation to
the hyperbolic distribution is used. In the inner part of the
distribution, the range is divided in 4 regions, 2 above the mode, and
2 below. On each side of the mode, the break point which forms the 2
regions is where the derivative of the density function is
deriv times the maximum value of the derivative on that side of
the mode. In each of the 4 inner regions the numerical integration routine
safeIntegrate (which is a wrapper for
integrate) is used to integrate the density dhyperb.
qhyperb uses the breakup of the real line into the same 8
regions as phyperb. For quantiles which fall in the 2 extreme
regions, the quantile is returned as -Inf or Inf as
appropriate. In the range between where the probability is tiny
and small according to hyperbCalcRange, an exponential
approximation to the hyperbolic distribution is used from which the
quantile may be found in closed form. In the 4 inner regions
splinefun is used to fit values of the distribution function
generated by phyperb. The quantiles are then found
using the uniroot function.
phyperb and qhyperb may generally be expected to be
accurate to 5 decimal places.
The hyperbolic distribution is a special case of the generalized
hyperbolic distribution (Barndorff-Nielsen and Bl<c3><a6>sild
(1983)). The generalized hyperbolic distribution can be represented as
a particular mixture of the normal distribution where the mixing
distribution is the generalized inverse Gaussian. rhyperb uses
this representation to generate observations from the hyperbolic
distribution. Generalized inverse Gaussian observations are obtained
via the algorithm of Dagpunar (1989).
Value
dhyperb gives the density, phyperb gives the distribution
function, qhyperb gives the quantile function and rhyperb
generates random variates. An estimate of the accuracy of the
approximation to the distribution function may be found by setting
accuracy = TRUE in the call to phyperb which then returns
a list with components value and error.
ddhyperb gives the derivative of dhyperb.
hyperbBreaks returns a list with components:
xTiny
Value such that probability to the left is less than
tiny.
xSmall
Value such that probability to the left is less than
small.
lowBreak
Point to the left of the mode such that the
derivative of the density is deriv times its maximum value
on that side of the mode
highBreak
Point to the right of the mode such that the
derivative of the density is deriv times its maximum value
on that side of the mode
xLarge
Value such that probability to the right is less than
small.
xHuge
Value such that probability to the right is less than
tiny.
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.
Prause, K. (1999) The generalized hyperbolic models: Estimation,
financial derivatives and risk measurement. PhD Thesis, Mathematics
Faculty, University of Freiburg.
See Also
safeIntegrate, integrate for its
shortfalls, splinefun, uniroot and
hyperbChangePars for changing parameters to the
(pi,zeta) parameterisation, dghyp for
the generalized hyperbolic distribution.
Examples
Theta <- c(2,1,1,0)
hyperbRange <- hyperbCalcRange(Theta, tol = 10^(-3))
par(mfrow = c(1,2))
curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
n = 1000)
title("Density of the\n Hyperbolic Distribution")
curve(phyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
n = 1000)
title("Distribution Function of the\n Hyperbolic Distribution")
dataVector <- rhyperb(500, Theta)
curve(dhyperb(x, Theta), range(dataVector)[1], range(dataVector)[2],
n = 500)
hist(dataVector, freq = FALSE, add =TRUE)
title("Density and Histogram\n of the Hyperbolic Distribution")
logHist(dataVector, main =
"Log-Density and Log-Histogram\n of the Hyperbolic Distribution")
curve(log(dhyperb(x, Theta)), add = TRUE,
range(dataVector)[1], range(dataVector)[2], n = 500)
par(mfrow = c(2,1))
curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
n = 1000)
title("Density of the\n Hyperbolic Distribution")
curve(ddhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
n = 1000)
title("Derivative of the Density\n of the Hyperbolic Distribution")
par(mfrow = c(1,1))
hyperbRange <- hyperbCalcRange(Theta, tol = 10^(-6))
curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
n = 1000)
bks <- hyperbBreaks(Theta)
abline(v = bks)
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(HyperbolicDist)
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/HyperbolicDist/dhyperb.Rd_%03d_medium.png", width=480, height=480)
> ### Name: Hyperbolic
> ### Title: Hyperbolic Distribution
> ### Aliases: dhyperb phyperb qhyperb rhyperb ddhyperb hyperbBreaks
> ### Keywords: distribution
>
> ### ** Examples
>
> Theta <- c(2,1,1,0)
> hyperbRange <- hyperbCalcRange(Theta, tol = 10^(-3))
> par(mfrow = c(1,2))
> curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
+ n = 1000)
> title("Density of the\n Hyperbolic Distribution")
> curve(phyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
+ n = 1000)
> title("Distribution Function of the\n Hyperbolic Distribution")
> dataVector <- rhyperb(500, Theta)
> curve(dhyperb(x, Theta), range(dataVector)[1], range(dataVector)[2],
+ n = 500)
> hist(dataVector, freq = FALSE, add =TRUE)
> title("Density and Histogram\n of the Hyperbolic Distribution")
> logHist(dataVector, main =
+ "Log-Density and Log-Histogram\n of the Hyperbolic Distribution")
> curve(log(dhyperb(x, Theta)), add = TRUE,
+ range(dataVector)[1], range(dataVector)[2], n = 500)
> par(mfrow = c(2,1))
> curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
+ n = 1000)
> title("Density of the\n Hyperbolic Distribution")
> curve(ddhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
+ n = 1000)
> title("Derivative of the Density\n of the Hyperbolic Distribution")
> par(mfrow = c(1,1))
> hyperbRange <- hyperbCalcRange(Theta, tol = 10^(-6))
> curve(dhyperb(x, Theta), from = hyperbRange[1], to = hyperbRange[2],
+ n = 1000)
> bks <- hyperbBreaks(Theta)
> abline(v = bks)
>
>
>
>
>
> dev.off()
null device
1
>