Chapter 18: Random Number Generation

RNNBN

Generates pseudorandom numbers from a negative binomial distribution.

Required Arguments

RK — Negative binomial parameter.   (Input)
RK must be positive.

P — Probability of success on each trial.   (Input)
P must be greater than the machine epsilon, AMACH(4) (Reference Material) and less than 1.0.

IR — Vector of length NR containing the random negative binomial deviates.   (Output)

Optional Arguments

NR — Number of random numbers to generate.   (Input)
Default: NR = size (IR,1).

FORTRAN 90 Interface

Generic:                              CALL RNNBN (RK, P, IR [,…])

Specific:                             The specific interface name is S_RNNBN.

FORTRAN 77 Interface

Single:                                CALL RNNBN (NR, RK, P, IR)

Description

Routine RNNBN generates pseudorandom numbers from a negative binomial distribution with parameters RK and P. RK and P must be positive and P must be less than 1. The probability function (with r = RK and p = P) is

for x = 0, 1, 2, .

If r is an integer, the distribution is often called the Pascal distribution and can be thought of as modeling the length of a sequence of Bernoulli trials until r successes are obtained, where p is the probability of getting a success on any trial. In this form, the random variable takes values r, r + 1, r + 2, and can be obtained from the negative binomial random variable defined above by adding r to the negative binomial variable. This latter form is also equivalent to the sum of r geometric random variables defined as taking values 1, 2, 3, .

If rp/(1 − p) is less than 100 and (1 − p)r is greater than the machine epsilon, RNNBN uses the inverse CDF technique; otherwise, for each negative binomial deviate, RNNBN generates a gamma (r, p/(1 − p)) deviate Y and then generates a Poisson deviate with parameter Y.

Comments

1.         The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator.

2.         If RK is an integer, the deviates in IR can be thought of as the number of failures in a sequence of Bernoulli trials before RK successes occur.

Example

In this example, RNNBN is used to generate five pseudorandom deviates from a negative binomial (Pascal) distribution with parameter r equal to 4 and p equal to 0.3.

 

      USE RNNBN_INT

      USE UMACH_INT

      USE RNSET_INT

 

      IMPLICIT   NONE

      INTEGER    NR

      PARAMETER  (NR=5)

!

      INTEGER    IR(NR), ISEED, NOUT

      REAL       P, RK

!

      CALL UMACH (2, NOUT)

      P     = 0.3

      RK    = 4.0

      ISEED = 123457

      CALL RNSET (ISEED)

      CALL RNNBN (RK, P, IR)

      WRITE (NOUT,99999) IR

99999 FORMAT (' Negative binomial (4.0, 0.3) random deviates: ', 5I4)

      END

Output

 

Negative binomial (4.0, 0.3) random deviates:    5   1   3   2   3



http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260