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_beta (g05sb)

## Purpose

nag_rand_dist_beta (g05sb) generates a vector of pseudorandom numbers taken from a beta distribution with parameters a$a$ and b$b$.

## Syntax

[state, x, ifail] = g05sb(n, a, b, state)
[state, x, ifail] = nag_rand_dist_beta(n, a, b, state)

## Description

The beta distribution has PDF (probability density function)
 f(x) = ( Γ(a + b) )/( Γ(a) Γ(b) ) xa − 1 (1 − x)b − 1 if  0 ≤ x ≤ 1 ; ​ a,b > 0 , f(x) = 0 otherwise.
One of four algorithms is used to generate the variates depending on the values of a$a$ and b$b$. Let α$\alpha$ be the maximum and β$\beta$ be the minimum of a$a$ and b$b$. Then the algorithms are as follows:
(i) if α < 0.5$\alpha <0.5$, Johnk's algorithm is used, see for example Dagpunar (1988). This generates the beta variate as u11 / a /
 ( u11 / a + u21 / b )
${u}_{1}^{1/a}/\left(\begin{array}{c}{u}_{1}^{1/a}+{u}_{2}^{1/b}\end{array}\right)$, where u1${u}_{1}$ and u2${u}_{2}$ are uniformly distributed random variates;
(ii) if β > 1$\beta >1$, the algorithm BB given by Cheng (1978) is used. This involves the generation of an observation from a beta distribution of the second kind by the envelope rejection method using a log-logistic target distribution and then transforming it to a beta variate;
(iii) if α > 1$\alpha >1$ and β < 1$\beta <1$, the switching algorithm given by Atkinson (1979) is used. The two target distributions used are f1(x) = βxβ${f}_{1}\left(x\right)=\beta {x}^{\beta }$ and f2(x) = α(1x)β1${f}_{2}\left(x\right)=\alpha {\left(1-x\right)}^{\beta -1}$, along with the approximation to the switching parameter of t = (1β) / (α + 1β)$t=\left(1-\beta \right)/\left(\alpha +1-\beta \right)$;
(iv) in all other cases, Cheng's BC algorithm (see Cheng (1978)) is used with modifications suggested by Dagpunar (1988). This algorithm is similar to BB, used when β > 1$\beta >1$, but is tuned for small values of a$a$ and b$b$.
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_beta (g05sb).

## References

Atkinson A C (1979) A family of switching algorithms for the computer generation of beta random variates Biometrika 66 141–5
Cheng R C H (1978) Generating beta variates with nonintegral shape parameters Comm. ACM 21 317–322
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:     n – int64int32nag_int scalar
n$n$, the number of pseudorandom numbers to be generated.
Constraint: n0${\mathbf{n}}\ge 0$.
2:     a – double scalar
a$a$, the parameter of the beta distribution.
Constraint: a > 0.0${\mathbf{a}}>0.0$.
3:     b – double scalar
b$b$, the parameter of the beta distribution.
Constraint: b > 0.0${\mathbf{b}}>0.0$.
4:     state( : $:$) – 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.

None.

### Output Parameters

1:     state( : $:$) – 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 updated information on the state of the generator.
2:     x(n) – double array
The n$n$ pseudorandom numbers from the specified beta distribution.
3:     ifail – int64int32nag_int scalar
${\mathrm{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:
ifail = 1${\mathbf{ifail}}=1$
On entry, n < 0${\mathbf{n}}<0$.
ifail = 2${\mathbf{ifail}}=2$
On entry, a0.0${\mathbf{a}}\le 0.0$.
ifail = 3${\mathbf{ifail}}=3$
On entry, b0.0${\mathbf{b}}\le 0.0$.
ifail = 4${\mathbf{ifail}}=4$
 On entry, state vector was not initialized or has been corrupted.

## Accuracy

Not applicable.

To generate an observation, y$y$, from the beta distribution of the second kind from an observation, x$x$, generated by nag_rand_dist_beta (g05sb) the transformation, y = x / (1x)$y=x/\left(1-x\right)$, may be used.

## Example

```function nag_rand_dist_beta_example
% Initialize the seed
seed = [int64(1762543)];
% genid and subid identify the base generator
genid = int64(1);
subid =  int64(1);
n = int64(5);
a = 2;
b = 2;
% Initialize the generator to a repeatable sequence
[state, ifail] = nag_rand_init_repeat(genid, subid, seed);
[state, x, ifail] = nag_rand_dist_beta(n, a, b, state)
```
```

state =

17
1234
1
0
9910
16740
20386
10757
17917
13895
19930
8
0
1234
1
1
1234

x =

0.5977
0.6818
0.1797
0.4174
0.4987

ifail =

0

```
```function g05sb_example
% Initialize the seed
seed = [int64(1762543)];
% genid and subid identify the base generator
genid = int64(1);
subid =  int64(1);
n = int64(5);
a = 2;
b = 2;
% Initialize the generator to a repeatable sequence
[state, ifail] = g05kf(genid, subid, seed);
[state, x, ifail] = g05sb(n, a, b, state)
```
```

state =

17
1234
1
0
9910
16740
20386
10757
17917
13895
19930
8
0
1234
1
1
1234

x =

0.5977
0.6818
0.1797
0.4174
0.4987

ifail =

0

```