[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