# NAG FL Interfaceg01fff (inv_​cdf_​gamma)

## 1Purpose

g01fff returns the deviate associated with the given lower tail probability of the gamma distribution.

## 2Specification

Fortran Interface
 Function g01fff ( p, a, b, tol,
 Real (Kind=nag_wp) :: g01fff Integer, Intent (Inout) :: ifail Real (Kind=nag_wp), Intent (In) :: p, a, b, tol
#include <nag.h>
 double g01fff_ (const double *p, const double *a, const double *b, const double *tol, Integer *ifail)
The routine may be called by the names g01fff or nagf_stat_inv_cdf_gamma.

## 3Description

The deviate, ${g}_{p}$, associated with the lower tail probability, $p$, of the gamma distribution with shape parameter $\alpha$ and scale parameter $\beta$, is defined as the solution to
 $PG≤gp:α,β=p=1βαΓα ∫0gpe-G/βGα-1dG, 0≤gp<∞;α,β>0.$
The method used is described by Best and Roberts (1975) making use of the relationship between the gamma distribution and the ${\chi }^{2}$-distribution.
Let $y=2\frac{{g}_{p}}{\beta }$. The required $y$ is found from the Taylor series expansion
 $y=y0+∑rCry0 r! Eϕy0 r,$
where ${y}_{0}$ is a starting approximation
• ${C}_{1}\left(u\right)=1$,
• ${C}_{r+1}\left(u\right)=\left(r\Psi +\frac{d}{du}\right){C}_{r}\left(u\right)$,
• $\Psi =\frac{1}{2}-\frac{\alpha -1}{u}$,
• $E=p-\underset{0}{\overset{{y}_{0}}{\int }}\varphi \left(u\right)du$,
• $\varphi \left(u\right)=\frac{1}{{2}^{\alpha }\Gamma \left(\alpha \right)}{e}^{-u/2}{u}^{\alpha -1}$.
For most values of $p$ and $\alpha$ the starting value
 $y01=2α z⁢19α +1-19α 3$
is used, where $z$ is the deviate associated with a lower tail probability of $p$ for the standard Normal distribution.
For $p$ close to zero,
 $y02= pα2αΓ α 1/α$
is used.
For large $p$ values, when ${y}_{01}>4.4\alpha +6.0$,
 $y03=-2ln1-p-α-1ln12y01+lnΓ α$
is found to be a better starting value than ${y}_{01}$.
For small $\alpha$ $\left(\alpha \le 0.16\right)$, $p$ is expressed in terms of an approximation to the exponential integral and ${y}_{04}$ is found by Newton–Raphson iterations.
Seven terms of the Taylor series are used to refine the starting approximation, repeating the process if necessary until the required accuracy is obtained.

## 4References

Best D J and Roberts D E (1975) Algorithm AS 91. The percentage points of the ${\chi }^{2}$ distribution Appl. Statist. 24 385–388

## 5Arguments

1: $\mathbf{p}$Real (Kind=nag_wp) Input
On entry: $p$, the lower tail probability from the required gamma distribution.
Constraint: $0.0\le {\mathbf{p}}<1.0$.
2: $\mathbf{a}$Real (Kind=nag_wp) Input
On entry: $\alpha$, the shape parameter of the gamma distribution.
Constraint: $0.0<{\mathbf{a}}\le {10}^{6}$.
3: $\mathbf{b}$Real (Kind=nag_wp) Input
On entry: $\beta$, the scale parameter of the gamma distribution.
Constraint: ${\mathbf{b}}>0.0$.
4: $\mathbf{tol}$Real (Kind=nag_wp) Input
On entry: the relative accuracy required by you in the results. The smallest recommended value is $50×\delta$, where . If g01fff is entered with tol less than $50×\delta$ or greater or equal to $1.0$, then $50×\delta$ is used instead.
5: $\mathbf{ifail}$Integer Input/Output
On entry: ifail must be set to $0$, $-1$ or $1$ to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of $0$ causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of $-1$ means that an error message is printed while a value of $1$ means that it is not.
If halting is not appropriate, the value $-1$ or $1$ is recommended. If message printing is undesirable, then the value $1$ is recommended. Otherwise, the value $-1$ is recommended since useful values can be provided in some output arguments even when ${\mathbf{ifail}}\ne {\mathbf{0}}$ on exit. When the value $-\mathbf{1}$ or $\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit: ${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).

## 6Error Indicators and Warnings

If on entry ${\mathbf{ifail}}=0$ or $-1$, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
Note: in some cases g01fff may return useful information.
If on exit ${\mathbf{ifail}}={\mathbf{1}}$, ${\mathbf{2}}$, ${\mathbf{3}}$ or ${\mathbf{5}}$, then g01fff returns $0.0$.
${\mathbf{ifail}}=1$
On entry, ${\mathbf{p}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{p}}<1.0$.
On entry, ${\mathbf{p}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{p}}\ge 0.0$.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{a}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{a}}>0.0$.
On entry, ${\mathbf{a}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{a}}\le {10}^{6}$.
On entry, ${\mathbf{b}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{b}}>0.0$.
${\mathbf{ifail}}=3$
The probability is too close to $0.0$ for the given a to enable the result to be calculated.
${\mathbf{ifail}}=4$
The algorithm has failed to converge in $100$ iterations. A larger value of tol should be tried. The result may be a reasonable approximation.
${\mathbf{ifail}}=5$
The series used to calculate the gamma function has failed to converge. This is an unlikely error exit.
${\mathbf{ifail}}=-99$
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

## 7Accuracy

In most cases the relative accuracy of the results should be as specified by tol. However, for very small values of $\alpha$ or very small values of $p$ there may be some loss of accuracy.

## 8Parallelism and Performance

g01fff is not threaded in any implementation.

None.

## 10Example

This example reads lower tail probabilities for several gamma distributions, and calculates and prints the corresponding deviates until the end of data is reached.

### 10.1Program Text

Program Text (g01fffe.f90)

### 10.2Program Data

Program Data (g01fffe.d)

### 10.3Program Results

Program Results (g01fffe.r)