Re: simulating random variables
- To: mathgroup at smc.vnet.net
- Subject: [mg32851] Re: [mg32831] simulating random variables
- From: "Johannes Ludsteck" <johannes.ludsteck at wiwi.uni-regensburg.de>
- Date: Fri, 15 Feb 2002 02:49:55 -0500 (EST)
- Organization: Universitaet Regensburg
- Sender: owner-wri-mathgroup at wolfram.com
Dear Aaron, unfortunately I have no simple idea how to speed up generation of binomial random deviates, but I can give you two standard references on pseudorandom variable generation: [1] Luc Devroye (I have forgotten the title) [2] Johnson: Multivariate Statistical Simulation, 1987. However, the Mathematica implementation is likely to be efficient. As for the normal random variables, if you need large lists or arrays of r.v., a *simple* method to speed up things considerably ist to use RandomArray[]. On my computer, RandomArray is about 10 times faster for 100000 draws: In[1]:= Timing[Table[Random[NormalDistribution[0,1]],{100000}];] Out[1]= {3.62 Second,Null} In[2]:= Timing[RandomArray[NormalDistribution[0,1],100000];] Out[2]= {0.33 Second,Null} I guess that is impossible to speed up RandomArray, since the implementation is considerably efficient. Have a look at the Package Statistics`NormalDistribution` if you don't believe this. Best regards, Johannes On 14 Feb 2002, at 1:44, Aaron E. Hirsh wrote: > Dear All, > > I need to simulate a large number of binomial random variables. > Unfortunately, when the parameter n (number of trials) is large, the > simulation of binomial random variables is relatively time consuming. > For example, if I would like to simulate a binomial random variable > with parameters n = 10000 and p =0.01: > > In[134]:= > Timing[Random[BinomialDistribution[100000,0.01]]] > > Out[134]= > {0.283333 Second,1007} > > One possibility for saving time would be to use an approximation. For > small p, an appropriate approximation is the Poisson. While this is > definitely better: > > In[135]:= > Timing[Random[PoissonDistribution[(.01)(100000)]]] > > Out[135]= > {0.0333333 Second,1002} > > , it is still much slower than using a normal: > > In[136]:= > \!\(Timing[ > Random[NormalDistribution[(.01)(100000),((.01)(100000)(.99))^0.5]]]\) > > Out[136]= > {0. Second,1025.3} > > Does anyone know how I could speed up my simulation of binomial or > poisson-distributed random variables? I would also be interested in > ways of speeding up the simulation of the Normal, though it seems > extraordinarily efficient already. > > Thank you very much, > > Aaron Hirsh > -- > > Aaron E. Hirsh > Center for Computational Genetics and Biological Modeling > Stanford University > tel. (650) 723-4952 > fax. (650) 725-0180 > <><><><><><><><><><><><><><><><><><> Johannes Ludsteck Institut fuer Volkswirtschaftslehre Lehrstuhl Prof. Dr. Moeller Universitaet Regensburg Universitaetsstrasse 31 93053 Regensburg Tel +49/0941/943-2741