Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_rand_dist_gamma (g05sj)

## Purpose

nag_rand_dist_gamma (g05sj) generates a vector of pseudorandom numbers taken from a gamma distribution with parameters $a$ and $b$.

## Syntax

[state, x, ifail] = g05sj(n, a, b, state)
[state, x, ifail] = nag_rand_dist_gamma(n, a, b, state)

## Description

The gamma distribution has PDF (probability density function)
 $fx= 1baΓa xa-1e-x/b if ​x≥0; a,b>0 fx=0 otherwise.$
One of three algorithms is used to generate the variates depending upon the value of $a$:
 (i) if $a<1$, a switching algorithm described by Dagpunar (1988) (called G6) is used. The target distributions are ${f}_{1}\left(x\right)=ca{x}^{a-1}/{t}^{a}$ and ${f}_{2}\left(x\right)=\left(1-c\right){e}^{-\left(x-t\right)}$, where $c=t/\left(t+a{e}^{-t}\right)$, and the switching argument, $t$, is taken as $1-a$. This is similar to Ahrens and Dieter's GS algorithm (see Ahrens and Dieter (1974)) in which $t=1$; (ii) if $a=1$, the gamma distribution reduces to the exponential distribution and the method based on the logarithmic transformation of a uniform random variate is used; (iii) if $a>1$, the algorithm given by Best (1978) is used. This is based on using a Student's $t$-distribution with two degrees of freedom as the target distribution in an envelope rejection method.
One of the initialization functions nag_rand_init_repeat (g05kf) (for a repeatable sequence if computed sequentially) or nag_rand_init_nonrepeat (g05kg) (for a non-repeatable sequence) must be called prior to the first call to nag_rand_dist_gamma (g05sj).

## References

Ahrens J H and Dieter U (1974) Computer methods for sampling from gamma, beta, Poisson and binomial distributions Computing 12 223–46
Best D J (1978) Letter to the Editor Appl. Statist. 27 181
Dagpunar J (1988) Principles of Random Variate Generation Oxford University Press
Hastings N A J and Peacock J B (1975) Statistical Distributions Butterworth

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{n}$int64int32nag_int scalar
$n$, the number of pseudorandom numbers to be generated.
Constraint: ${\mathbf{n}}\ge 0$.
2:     $\mathrm{a}$ – double scalar
$a$, the parameter of the gamma distribution.
Constraint: ${\mathbf{a}}>0.0$.
3:     $\mathrm{b}$ – double scalar
$b$, the parameter of the gamma distribution.
Constraint: ${\mathbf{b}}>0.0$.
4:     $\mathrm{state}\left(:\right)$int64int32nag_int array
Note: the actual argument supplied must be the array state supplied to the initialization routines nag_rand_init_repeat (g05kf) or nag_rand_init_nonrepeat (g05kg).
Contains information on the selected base generator and its current state.

None.

### Output Parameters

1:     $\mathrm{state}\left(:\right)$int64int32nag_int array
Contains updated information on the state of the generator.
2:     $\mathrm{x}\left({\mathbf{n}}\right)$ – double array
The $n$ pseudorandom numbers from the specified gamma distribution.
3:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{ifail}}={\mathbf{0}}$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Errors or warnings detected by the function:
${\mathbf{ifail}}=1$
Constraint: ${\mathbf{n}}\ge 0$.
${\mathbf{ifail}}=2$
Constraint: ${\mathbf{a}}>0.0$.
${\mathbf{ifail}}=3$
Constraint: ${\mathbf{b}}>0.0$.
${\mathbf{ifail}}=4$
On entry, state vector has been corrupted or not initialized.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

Not applicable.

None.

## Example

This example prints a set of five pseudorandom numbers from a gamma distribution with parameters $a=5.0$ and $b=1.0$, generated by a single call to nag_rand_dist_gamma (g05sj), after initialization by nag_rand_init_repeat (g05kf).
```function g05sj_example

fprintf('g05sj example results\n\n');

% Initialize the base generator to a repeatable sequence
seed  = [int64(1762543)];
genid = int64(1);
subid = int64(1);
[state, ifail] = g05kf( ...
genid, subid, seed);

% Number of variates
n = int64(5);

% Parameters
a = 5;
b = 1;

% Generate variates from Gamma distribution
[state, x, ifail] = g05sj( ...
n, a, b, state);

disp('Variates');
disp(x);

```
```g05sj example results

Variates
5.0702
6.1337
3.1018
3.9863
4.9648

```