Stata/Random Number Generation

From testwiki
Revision as of 19:44, 29 July 2012 by imported>Ak5791 (replacing obsolete function (uniform() has been replaced with runiform() as of stata 10.1))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Stata/Navigation


Generate a univariate uniform distribution

  • The function -runiform()- returns uniformly distributed pseudorandom numbers on the interval [0,1)
. set obs 10
obs was 0, now 10
. gen x = runiform()

You have built-in random number generation methods for the main distributions. The keyword is rnd. The list of all available distributions is given in the following help file: -h rnd-

The Inverse CDF method

  • The basic function for generating random numbers is uniform(). Therefore you generally have to use the inverse CDF method to sample from other distributions.

We can draw from a uniform distribution :

. clear
. set obs 500
obs was 0, now 500
. gen unif=runiform()
. hist unif
(bin=22, start=.0043096, width=.04522361)

We can draw from a normal distribution :

. gen norm=invnorm(runiform())
. hist norm
(bin=22, start=-2.8517358, width=.23821211)

We can draw from a χ2 distribution

. gen chi2=invchi2(1,uniform())
. hist chi2
(bin=22, start=.00002381, width=.50381869)
. gen chi210=invchi2(10,uniform())
. hist chi210
(bin=22, start=1.8273849, width=1.3336678)

We can draw from a Fisher Snedecor distribution

. gen fisher=invF(10,10,uniform())
. hist fisher
(bin=22, start=.14025442, width=.39209784)

We can draw from a Student distribution. Remember that invttail() is not the inverse of the CDF (cumulative distribution function) but the inverse of the survival function (1 - the CDF).

 
. gen student=1-invttail(10,uniform())
. hist student
(bin=22, start=-3.9568543, width=.4741968)

Multivariate Normal Distributions

drawnorm draws directly from a multivariate normal distribution. Template:Stata/Navbar