Description Usage Arguments Details Value Author(s) References See Also Examples
Density function, cumulative distribution function, quantile function
and random number generation for the generalized inverse Gaussian
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.
1 2 3 4 5 6 7 8 9  dgig(x, Theta, KOmega = NULL)
pgig(q, Theta, small = 10^(6), tiny = 10^(10), deriv = 0.3,
subdivisions = 100, accuracy = FALSE, ...)
qgig(p, Theta, small = 10^(6), tiny = 10^(10), deriv = 0.3,
nInterpol = 100, subdivisions = 100, ...)
rgig(n, Theta)
rgig1(n, Theta)
ddgig(x, Theta, KOmega = NULL, ...)
gigBreaks (Theta, small = 10^(6), tiny = 10^(10), deriv = 0.3, ...)

x, q 
Vector of quantiles. 
p 
Vector of probabilities. 
n 
Number of observations to be generated. 
Theta 
Parameter vector taking the form 
KOmega 
Sets the value of the Bessel function in the density or derivative of the density. See Details. 
small 
Size of a small difference between the distribution function and zero or one. See Details. 
tiny 
Size of a tiny difference between the distribution function and zero or one. See Details. 
deriv 
Value between 0 and 1. Determines the point where the derivative becomes substantial, compared to its maximum value. See Details. 
accuracy 
Uses accuracy calculated by 
subdivisions 
The maximum number of subdivisions used to integrate the density returning the distribution function. 
nInterpol 
The number of points used in qhyperb for cubic spline
interpolation (see 
... 
Passes arguments to 
The generalized inverse Gaussian distribution has density
f(x)=(psi/chi)^{lambda/2}/ (2K_lambda(sqrt(psi chi)))x^(lambda1) exp((1/2)(chi x^(1)+psi x))
for x>0, where K_lambda() is the modified Bessel function of the third kind with order lambda.
The generalized inverse Gaussian distribution is investigated in detail in J<f6>rgensen (1982).
Use gigChangePars
to convert from the
(delta,gamma),
(alpha,beta), or
(omega,eta) parameterisations to the
(chi,psi), parameterisation used above.
pgig
breaks the real line into eight regions in order to
determine the integral of dgig
. The break points determining
the regions are found by gigBreaks
, based on the values of
small
, tiny
, and deriv
. In the extreme tails of
the distribution where the probability is tiny
according to
gigCalcRange
, the probability is taken to be zero. For the
generalized inverse Gaussian distribution the leftmost breakpoint is
not affected by the value of tiny
but is always taken as 0. In
the inner part of the distribution, the range is divided in 6 regions,
3 above the mode, and 3 below. On each side of the mode, there are two
break points giving the required three regions. The outer break point
is where the probability in the tail has the value given by the
variable small
. The inner break point 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 6 inner regions
the numerical integration routine safeIntegrate
(which
is a wrapper for integrate
) is used to integrate the
density dgig
.
qgig
use the breakup of the real line into the same 8
regions as pgig
. For quantiles which fall in the 2 extreme
regions, the quantile is returned as Inf
or Inf
as
appropriate. In the 6 inner regions splinefun
is used to fit
values of the distribution function generated by pgig
. The
quantiles are then found using the uniroot
function.
pgig
and qgig
may generally be expected to be accurate
to 5 decimal places. Unfortunately, when lambda
is less than
0.5, the accuracy may be as little as 3 decimal places.
Generalized inverse Gaussian observations are obtained via the algorithm of Dagpunar (1989).
dgig
gives the density, pgig
gives the distribution
function, qgig
gives the quantile function, and rgig
generates random variates. rgig1
generates random variates in
the special case where lambda=1. 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
.
ddgig
gives the derivative of dgig
.
gigBreaks
returns a list with components:
xTiny 
Takes value 0 always. 
xSmall 
Value such that probability to the left is less than

lowBreak 
Point to the left of the mode such that the
derivative of the density is 
highBreak 
Point to the right of the mode such that the
derivative of the density is 
xLarge 
Value such that probability to the right is less than

xHuge 
Value such that probability to the right is less than

modeDist 
The mode of the given generalized inverse Gaussian distribution. 
David Scott d.scott@auckland.ac.nz, Richard Trendall, and Melanie Luen.
Dagpunar, J.S. (1989). An easily implemented generalised inverse Gaussian generator. Commun. Statist. Simula., 18, 703–710.
J<f6>rgensen, B. (1982). Statistical Properties of the Generalized Inverse Gaussian Distribution. Lecture Notes in Statistics, Vol. 9, SpringerVerlag, New York.
safeIntegrate
, integrate
for its
shortfalls, splinefun
, uniroot
and
gigChangePars
for changing parameters to the
(chi,psi) parameterisation, dghyp
for
the generalized hyperbolic distribution.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  Theta < c(1,2,3)
gigRange < gigCalcRange(Theta, tol = 10^(3))
par(mfrow = c(1,2))
curve(dgig(x, Theta), from = gigRange[1], to = gigRange[2],
n = 1000)
title("Density of the\n Generalized Inverse Gaussian")
curve(pgig(x, Theta), from = gigRange[1], to = gigRange[2],
n = 1000)
title("Distribution Function of the\n Generalized Inverse Gaussian")
dataVector < rgig(500, Theta)
curve(dgig(x, Theta), range(dataVector)[1], range(dataVector)[2],
n = 500)
hist(dataVector, freq = FALSE, add =TRUE)
title("Density and Histogram\n of the Generalized Inverse Gaussian")
logHist(dataVector, main =
"LogDensity and LogHistogram\n of the Generalized Inverse Gaussian")
curve(log(dgig(x, Theta)), add = TRUE,
range(dataVector)[1], range(dataVector)[2], n = 500)
par(mfrow = c(2,1))
curve(dgig(x, Theta), from = gigRange[1], to = gigRange[2],
n = 1000)
title("Density of the\n Generalized Inverse Gaussian")
curve(ddgig(x, Theta), from = gigRange[1], to = gigRange[2],
n = 1000)
title("Derivative of the Density\n of the Generalized Inverse Gaussian")
par(mfrow = c(1,1))
gigRange < gigCalcRange(Theta, tol = 10^(6))
curve(dgig(x, Theta), from = gigRange[1], to = gigRange[2],
n = 1000)
bks < gigBreaks(Theta)
abline(v = bks)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.