g05 Chapter Contents
g05 Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_rand_compd_poisson (g05tkc)

## 1  Purpose

nag_rand_compd_poisson (g05tkc) generates a vector of pseudorandom integers, each from a discrete Poisson distribution with differing parameter.

## 2  Specification

 #include #include
 void nag_rand_compd_poisson (Integer m, const double vlamda[], Integer state[], Integer x[], NagError *fail)

## 3  Description

nag_rand_compd_poisson (g05tkc) generates $m$ integers ${x}_{j}$, each from a discrete Poisson distribution with mean ${\lambda }_{j}$, where the probability of ${x}_{j}=I$ is
 $P xj=I = λjI × e -λj I! , I=0,1,… ,$
where
 $λj ≥ 0 , j=1,2,…,m .$
The methods used by this function have low set up times and are designed for efficient use when the value of the parameter $\lambda$ changes during the simulation. For large samples from a distribution with fixed $\lambda$ using nag_rand_poisson (g05tjc) to set up and use a reference vector may be more efficient.
When $\lambda <7.5$ the product of uniforms method is used, see for example Dagpunar (1988). For larger values of $\lambda$ an envelope rejection method is used with a target distribution:
 $fx=13 if ​x≤1, fx=13x-3 otherwise.$
This distribution is generated using a ratio of uniforms method. A similar approach has also been suggested by Ahrens and Dieter (1989). The basic method is combined with quick acceptance and rejection tests given by Maclaren (1990). For values of $\lambda \ge 87$ Stirling's approximation is used in the computation of the Poisson distribution function, otherwise tables of factorials are used as suggested by Maclaren (1990).
One of the initialization functions nag_rand_init_repeatable (g05kfc) (for a repeatable sequence if computed sequentially) or nag_rand_init_nonrepeatable (g05kgc) (for a non-repeatable sequence) must be called prior to the first call to nag_rand_compd_poisson (g05tkc).

## 4  References

Ahrens J H and Dieter U (1989) A convenient sampling method with bounded computation times for Poisson distributions Amer. J. Math. Management Sci. 1–13
Dagpunar J (1988) Principles of Random Variate Generation Oxford University Press
Maclaren N M (1990) A Poisson random number generator Personal Communication

## 5  Arguments

1:     mIntegerInput
On entry: $m$, the number of Poisson distributions for which pseudorandom variates are required.
Constraint: ${\mathbf{m}}\ge 1$.
2:     vlamda[m]const doubleInput
On entry: the means, ${\lambda }_{\mathit{j}}$, for $\mathit{j}=1,2,\dots ,{\mathbf{m}}$, of the Poisson distributions.
Constraint: $0.0\le {\mathbf{vlamda}}\left[\mathit{j}-1\right]\le {\mathbf{nag_max_integer}}/2.0$, for $\mathit{j}=1,2,\dots ,{\mathbf{m}}$.
3:     state[$\mathit{dim}$]IntegerCommunication Array
Note: the actual argument supplied must be the array state supplied to the initialization functions nag_rand_init_repeatable (g05kfc) or nag_rand_init_nonrepeatable (g05kgc).
On entry: contains information on the selected base generator and its current state.
On exit: contains updated information on the state of the generator.
4:     x[m]IntegerOutput
On exit: the $m$ pseudorandom numbers from the specified Poisson distributions.
5:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}\ge 1$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NE_INVALID_STATE
On entry, state vector has been corrupted or not initialized.
NE_REAL_ARRAY
On entry, at least one element of vlamda is less than zero.
On entry, at least one element of vlamda is too large.

Not applicable.

None.

## 9  Example

This example prints ten pseudorandom integers from five Poisson distributions with means ${\lambda }_{1}=0.5$, ${\lambda }_{2}=5$, ${\lambda }_{3}=10$, ${\lambda }_{4}=500$ and ${\lambda }_{5}=1000$. These are generated by ten calls to nag_rand_compd_poisson (g05tkc), after initialization by nag_rand_init_repeatable (g05kfc).

### 9.1  Program Text

Program Text (g05tkce.c)

None.

### 9.3  Program Results

Program Results (g05tkce.r)