Even if you know that the distribution of numbers from your RNG is uniform, that is not sufficient to ensure that there are not pernicious patterns in the numbers.
For example: multiplicative congruence generators produce sequences that pass all sorts of tests, but it turns out that if you use sets of n sequential numbers produced by such an RNG to sample an n-dimensional space, the n-sets fall on hyperplanes of the n-dimensional space, leaving large areas unsampled. I don't know enough to offer any advice about picking an RNG for general use. My one experience with this sort of thing was when I got some surprising results using a multiplicative congruence RNG, and replaced it with Knuth's suggestion, which at the time was to use two such RNGs, shuffling the results from one using the results of the other, and my results became reasonable. Henry Rich On 5/21/2011 11:30 AM, Roger Hui wrote: > Thanks for your reply. To paraphrase Ewart Shaw, > my lack of depth in statistics is only ameliorated by > the narrowness of my understanding. Regarding the > last result: > >> -.14&chisqcdf f i.5 >> 0.262214 0.120479 0.124215 0.292923 0.68203 > > What are the numbers saying? Do they indicate that the > underlying distribution is nearly uniform or far from uniform? > Is it a good or bad thing (or irrelevant) that the 5 numbers > are quite different from each other? > > In "school" I learned that the Kolmogorov-Smirnov test > http://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test > is good for this kind of thing. What do you think of > this test? > > > > ----- Original Message ----- > From: John Randall<[email protected]> > Date: Saturday, May 21, 2011 7:52 > Subject: Re: [Jprogramming] roll > To: Programming forum<[email protected]> > >> The process described should yield uniform random numbers >> between 0 >> and y-1. >> >> Following up on the tests in the original posting, we can put the >> numbers into equal sized bins and then calculate a chi-square >> statistic. If this is not significant, we can be somewhat >> assuredthat the numbers are random. >> >> f=:3 : 0"0 >> y=. 12345 >> t=. ?2e6$20000 >> z=. 1e6 {. (12345>t)#t >> NB. 12345=15*823 >> bin=.<.@%&823 >> observed=.(bin z) #/. z >> expected=.(#z)%15 >> chisquare=.+/(*:observed-expected)%expected >> ) >> >> require '~addons/stats/base/distribution.ijs' >> >> -.14&chisqcdf f i.5 >> 0.262214 0.120479 0.124215 0.292923 0.68203 >> >> Best wishes, >> >> John >> >> >> >> Roger Hui wrote: >>> I have found a bug in ?y where y is an extended >>> precision integer. The result should never be y, >>> but: >>> >>> t=: ? 1e6 $ 12345x >>> +/t=12345 >>> 89 >>> >>> The last result should of course be 0. >>> >>> I know how this can be fixed, but I would like to >>> verify that the algorithm for ?y is correct with the >>> mathematicians in this forum. >>> >>> For y an extended precision number, ?y is computed >>> by t=.?y1 where y1 is a little bigger than y, >>> repeating until t is less than y. (The same y1 >>> is used for a given y.) Assuming that ?m produces >>> uniform random numbers between 0 and m-1, does >>> this process give uniform random numbers between >>> 0 and y-1? >>> >>> For example, suppose we want to compute z=:?1e6$y=:12345. >>> >>> y=: 12345 >>> t=: ?2e6$20000 >>> +/12345>t >>> 1233158 >>> z=: 1e6 {. (12345>t)#t >>> >>> NB. various tests >>> (+/z)%#z >>> 6170.3 >>> 12344%2 >>> 6172 >>> >>> (c%y) , (+/c>:z)%#z [ c=: ? y >>> 0.993277 0.993333 >>> (c%y) , (+/c>:z)%#z [ c=: ? y >>> 0.43872 0.438943 >>> (c%y) , (+/c>:z)%#z [ c=: ? y >>> 0.593925 0.594519 >>> (c%y) , (+/c>:z)%#z [ c=: ? y >>> 0.315674 0.315579 > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
