RNSTT
Generates pseudorandom numbers from a Student’s t distribution.
Required Arguments
DF — Degrees of freedom. (Input)
DF must be positive.
R — Vector of length NR containing the random Student’s t deviates. (Output)
Optional Arguments
NR — Number of random numbers to generate. (Input)
Default: NR = size (R,1).
FORTRAN 90 Interface
Generic: CALL RNSTT (DF, R [])
Specific: The specific interface names are S_RNSTT and D_RNSTT.
FORTRAN 77 Interface
Single: CALL RNSTT (NR, DF, R)
Double: The double precision name is DRNSTT.
Description
Routine RNSTT generates pseudo‑random numbers from a Student’s t distribution with DF degrees of freedom, using a method suggested by Kinderman, Monahan, and Ramage (1977). The method (“TMX” in the reference) involves a representation of the t density as the sum of a triangular density over (–2, 2) and the difference of this and the t density. The mixing probabilities depend on the degrees of freedom of the t distribution. If the triangular density is chosen, the variate is generated as the sum of two uniforms; otherwise, an acceptance/rejection method is used to generate a variate from the difference density.
For degrees of freedom less than 100, RNSTT requires approximately twice the execution time as routine RNNOA which generates pseudorandom normal deviates. The execution time of RNSTT increases very slowly as the degrees of freedom increase. Since for very large degrees of freedom the normal distribution and the t distribution are very similar, the user may find that the difference in the normal and the t does not warrant the additional generation time required to use RNSTT instead of RNNOA.
Comments
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.
Example
In this example, RNSTT is used to generate 5 pseudo‑random t variates with 10 degrees of freedom.
 
USE RNSTT_INT
USE UMACH_INT
USE RNSET_INT
 
IMPLICIT NONE
INTEGER NR
PARAMETER (NR=5)
!
INTEGER ISEED, NOUT
REAL DF, R(NR)
!
CALL UMACH(2, NOUT)
DF = 10.0
ISEED = 123457
CALL RNSET(ISEED)
CALL RNSTT(DF, R)
WRITE(NOUT, 99999) R
99999 FORMAT (' t (10) random deviates: ', 5F8.4)
END
Output
 
t (10) random deviates: 0.6152 1.1528 0.0881 1.3382 -0.9893