strange problems with Random
- To: mathgroup at smc.vnet.net
- Subject: [mg47812] strange problems with Random
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 27 Apr 2004 04:48:05 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Recently Mark Coleman wrote a message with the subject "Differences in
Random Numbers" in which he described his experience of getting
statistically incorrect answers when using
Random[UniformDistribution[0,1]] instead of simple Random[]. Jens Kuska
and Bill Rowe pointed out that the package ContinuousDistributions
contains the code
UniformDistribution/: Random[UniformDistribution[min_:0, max_:1]] :=
Random[Real, {min, max}]
and that seemed to be it. However, I have now encountered a problem
that makes me feel strongly that there is more to this problem than it
seemed to me at first.
I have been doing some Monte Carlo computations of values of of
financial options for the Internet based course on this subject I am
teaching for Warsaw University. In the case of the simplest options,
the so called vanilla european options, an exact formula (due to black
and Scholes) is known. Neverheless, computations with Mathematica using
the function
Random[NormalDistribution[mu,sigma]] (for some fixed mu and sigma) have
been giving answers which are consistently higher than the
Black-Scholes value. On the other hand, when
Random[NormalDistribution[mu,sigma]] is replaced by the following code
using a well known algorithm due to Marsaglia:
RandomNormal=Compile[{mu, sigma}, Module[{va = 1., vb, rad =
2.0, den = 1.}, While[rad ³ 1.00, (va = 2.0*Random[] - 1.0;
vb = 2.0*Random[] - 1.0;
rad = va*va + vb*vb)];
den = Sqrt[-2.0*Log[rad]/rad];
mu + sigma*va*den]];
the answers agree very closely with the Black-Scholes ones.
I am not sure if this problem is related to the one mark mentioned but
it seems quite likely. One could in principle test it by replacing
Random[] by Random[Uniformdistribution[0,1]] (after loading the
Statistics`ContinuousDistributions`) package, but if one does that the
code will no longer compile. That makes the function to slow for tests
that are sufficiently precise, so I have not tested it.
In any case, I am sure that using Random[Normal ] consistently gives
wrong answers. I looked at the Statistics`NormalDistributionPackage`
but everything looks O.K. to me. I now tend to believe that the problem
lies with Random itself, that is that Random called with any
parameters or perhaps some particular parameters may not be behaving
correctly. Random[] called with no parameters does not seem to suffer
from any such problems.
Andrzej Kozlowski
Chiba, Japan
http://www.mimuw.edu.pl/~akoz/