Generates pseudorandom numbers from a negative binomial distribution.
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)
NR — Number of
random numbers to generate. (Input)
Default: NR = size (IR,1).
Generic: CALL RNNBN (RK, P, IR [,…])
Specific: The specific interface name is S_RNNBN.
Single: CALL RNNBN (NR, RK, P, IR)
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.
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.
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
Negative binomial (4.0, 0.3) random deviates: 5 1 3 2 3
PHONE: 713.784.3131 FAX:713.781.9260 |