Generalized Inverse Gaussian | R Documentation |
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.
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)=\frac{(\psi/\chi)^{\frac{\lambda}{2}}}%
{2K_\lambda(\sqrt{\psi\chi})}x^{\lambda-1}%
e^{-\frac{1}{2}\left(\chi x^{-1}+\psi x\right)}
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ö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örgensen, B. (1982). Statistical Properties of the Generalized Inverse Gaussian Distribution. Lecture Notes in Statistics, Vol. 9, Springer-Verlag, 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.
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 =
"Log-Density and Log-Histogram\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.