FW: [R] Random seed problem in MCMC coupling of chains

From: Gorjanc Gregor <Gregor.Gorjanc_at_bfro.uni-lj.si>
Date: Thu 09 Jun 2005 - 05:58:32 EST

And a last post from Paul Gilbert. Thanks to all! This disscusion was really beneficial for me!

-----Original Message-----
From: Paul Gilbert [mailto:pgilbert@bank-banque-canada.ca] Sent: sre 2005-06-08 21:01
To: Gorjanc Gregor
Subject: Re: [R] Random seed problem in MCMC coupling of chains

Gorjanc Gregor wrote:
> Thanks to Paul and Gabor for additional tips/examples. Actually, I find
> Pauls suggestion with setRNG also nice and is exactly what I wanted.
> Paul, if I understand this correctly, your suggestion with setRNG does not
> alter "RNG flow", it just takes care that chains really have equal seeds.
> I remember that I have read somewhere that destroying "RNG flow over and
> over to get real randomness" is not a good idea. Can someone confirm this?

In general it is a bad idea to make up your own scheme for setting or resetting the RNG. People put a lot of work into studying the properties of a RNG. When you mess with it then it is unclear what the result will be. It certainly won't be tested unless you test it yourself. If your intention is to do research on RNGs then you may want to do that, but if your intention is to do other research and just use the RNG, then don't mess with it by resetting it with your own scheme.

One additional thing you may want to do is record the initial setting of the RNG information so that you can reproduce the experiment if you want to (see modification below). The idea in setRNG is to not interfere with the flow, only add a few utilities to help record and reset everything when that is what is required.

In your example it is important that you generate the same number of random numbers in each pass through the chain. If that is not the case then even with the setRNG utilities there is a subtle change that you are introducing.

> niter <- 3
> nchain <- 2

   startingRNG <- setRNG()
> for (i in 1:niter) { # iterations
> tmpSeed <- setRNG()
> for (j in 1:nchain) { # chains
> setRNG(tmpSeed)
> a <- runif(1)
> cat("iter:", i, "chain:", j, "runif:", a, "\n")
> }
> }
> iter: 1 chain: 1 runif: 0.8160078
> iter: 1 chain: 2 runif: 0.8160078
> iter: 2 chain: 1 runif: 0.4909793
> iter: 2 chain: 2 runif: 0.4909793
> iter: 3 chain: 1 runif: 0.4425924
> iter: 3 chain: 2 runif: 0.4425924
> [... removed other stuff ...]
> Lep pozdrav / With regards,
> Gregor Gorjanc
> ----------------------------------------------------------------------
> University of Ljubljana
> Biotechnical Faculty URI: http://www.bfro.uni-lj.si/MR/ggorjan
> Zootechnical Department mail: gregor.gorjanc <at> bfro.uni-lj.si
> Groblje 3 tel: +386 (0)1 72 17 861
> SI-1230 Domzale fax: +386 (0)1 72 17 888
> Slovenia, Europe
> ----------------------------------------------------------------------
> "One must learn by doing the thing; for though you think you know it,
> you have no certainty until you try." Sophocles ~ 450 B.C.
> ----------------------------------------------------------------------

R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Thu Jun 09 06:09:36 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:32:27 EST