[R] Anomalous outputs from rbeta when using two different random number seeds

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Dec 6 18:48:53 CET 2012


On 06/12/2012 11:00, Jonathan Minton wrote:
> Hi, in the code below, I am drawing 1000 samples from two beta
> distributions, each time using the same random number seed.
>
> Using set.seed(80) produces results I expect, in that the differences
> between the distributions are very small.
>
> Using set.seed(20) produces results I can't make sense of. Around half of
> the time, it behaves as with set.seed(80), but around half of the time, it
> behaves very differently, with a much wider distribution of differences
> between the two distributions.

The 'anomaly' is in your expectation.  There is no reason why random 
variate streams for similar but different distributions started at the 
same seed should be similar or dissimilar.  They will be 
deterministically related if inversion is used (for continuous 
distributions), but not if rejection is used.  If you consider the 
sequential order of your examples you will see that over parts of the 
period the two generators are in step, and for parts they are not.

R is Open Source so you can read the algorithm and work out why for 
yourself.


>
>
> # Beta parameters
>
> #distribution 1
> u1.a <- 285.14
> u1.b <- 190.09
>
> # distribution 2
> u2.a <- 223.79
> u2.b <- 189.11
>
> #Good example: output is as expected
>
> set.seed(80); u1.good <- rbeta(1000, u1.a, u1.b)
> set.seed(80); u2.good <- rbeta(1000, u2.a, u2.b)
>
>
> #Bad example: output is different to expected
> set.seed(20); u1.bad <- rbeta(1000, u1.a, u1.b)
> set.seed(20); u2.bad <- rbeta(1000, u2.a, u2.b)
>
>
> # plot of distributions using set.seed(80), which behaves as expected
> plot(u2.good ~ u1.good, ylim=c(0.45, 0.70), xlim=c(0.45, 0.70))
> abline(0,1)
>
> # plot of distributions using set.seed(20), which is different to expected
> plot(u2.bad ~ u1.bad, ylim=c(0.45, 0.70), xlim=c(0.45, 0.70))
> abline(0,1)
>
> # plot of differences when using set.seed(80)
> plot(u1.good - u2.good, ylim=c(-0.2, 0.2))
> abline(h=0)
>
> # plot of differences when using set.seed(20)
> plot(u1.bad - u2.bad, ylim=c(-0.2, 0.2))
> abline(h=0)
>
>
> Could you explain why using set.seed(20) produces this chaotic pattern of
> behaviour?
>
>
> Many thanks,
> Jon
>


-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list