[R] Random seed problem in MCMC coupling of chains

Gabor Grothendieck ggrothendieck at gmail.com
Wed Jun 8 18:55:07 CEST 2005


That could be addressed like this (where changing the offset
changes the experiment).

offset <- 123

niter <- 3
nchain <- 2
for (i in 1:niter) { # iterations
 for (j in 1:nchain) { # chains
   set.seed(i+offset)
   a <- runif(1)
   cat("iter:", i, "chain:", j, "runif:", a, "\n")
 }
}

On 6/8/05, Paul Gilbert <pgilbert at bank-banque-canada.ca> wrote:
> Beware that your easy trick will give you the same result every time you
> run it. You need a better scheme if you actually intend to get a new
> experiment each time you run it.
> 
> Paul
> 
> Gorjanc Gregor wrote:
> 
> > Thanks to Duncan, Dimitris as well as James for answers. I'll provide
> > here also example from James, which seems to be the easiest of them
> > all and was not posted to the list:
> >
> > niter <- 3
> > nchain <- 2
> > for (i in 1:niter) { # iterations
> >   for (j in 1:nchain) { # chains
> >     set.seed(i)
> >     a <- runif(1)
> >     cat("iter:", i, "chain:", j, "runif:", a, "\n")
> >   }
> > }
> >
> > Note that seed is set with iteration counter. This is really neat and
> > simple. I am just wondering if this is OK from "RNG point of view". Can
> > someone comment on that?
> >
> > 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.
> > ----------------------------------------------------------------------
> >
> > -----Original Message-----
> > From: Duncan Murdoch [mailto:murdoch at stats.uwo.ca]
> > Sent: sre 2005-06-08 15:53
> > To: Gorjanc Gregor
> > Cc: r-help at stat.math.ethz.ch
> > Subject: Re: [R] Random seed problem in MCMC coupling of chains
> >
> > On 6/8/2005 9:27 AM, Gorjanc Gregor wrote:
> >
> >>Hello!
> >>
> >>I am performing coupling of chains in MCMC and I need the same value
> >>of seed for two chains. I will show demo of what I want:
> >>
> >>R code, which might show my example is:
> >>niter <- 3
> >>nchain <- 2
> >>tmpSeed <- 123
> >>for (i in 1:niter) { # iterations
> >>  for (j in 1:nchain) { # chains
> >>    set.seed(tmpSeed)
> >>    a <- runif(1)
> >>    cat("iter:", i, "chain:", j, "runif:", a, "\n")
> >>    tmpSeed <- .Random.seed
> >>  }
> >>}
> >>
> >>I get this:
> >>
> >>iter: 1 chain: 1 runif: 0.43588
> >>iter: 1 chain: 2 runif: 0.43588
> >>iter: 2 chain: 1 runif: 0.43588
> >>iter: 2 chain: 2 runif: 0.43588
> >>iter: 3 chain: 1 runif: 0.43588
> >>iter: 3 chain: 2 runif: 0.43588
> >>
> >>but I would like to get:
> >>
> >>iter: 1 chain: 1 runif: 0.43588
> >>iter: 1 chain: 2 runif: 0.43588
> >>iter: 2 chain: 1 runif: 0.67676
> >>iter: 2 chain: 2 runif: 0.67676
> >>iter: 3 chain: 1 runif: 0.12368
> >>iter: 3 chain: 2 runif: 0.12368
> >>
> >>Note that seed value is of course changing, but it is parallel
> >>between chains.
> >
> >
> > set.seed takes an integer, but .Random.seed is a complicated vector.
> > You need to play with .Random.seed directly, and move your setting of
> > tmpSeed out of the inner loop, i.e.
> >
> >  > niter <- 3
> >  > nchain <- 2
> >  > set.seed(123)
> >  > tmpSeed <- .Random.seed
> >  > for (i in 1:niter) { # iterations
> > +   for (j in 1:nchain) { # chains
> > +     .Random.seed <- tmpSeed
> > +     a <- runif(1)
> > +     cat("iter:", i, "chain:", j, "runif:", a, "\n")
> > +   }
> > +   tmpSeed <- .Random.seed
> > + }
> > iter: 1 chain: 1 runif: 0.2875775
> > iter: 1 chain: 2 runif: 0.2875775
> > iter: 2 chain: 1 runif: 0.7883051
> > iter: 2 chain: 2 runif: 0.7883051
> > iter: 3 chain: 1 runif: 0.4089769
> > iter: 3 chain: 2 runif: 0.4089769
> >
> > However, heed the warnings in ?set.seed:  with some generators
> > .Random.seed *does not* contain the full state of the RNG.  As far as I
> > know there is no way to obtain the full state.
> >
> > Duncan Murdoch
> >
> > ______________________________________________
> > R-help at 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
> 
> ______________________________________________
> R-help at 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
>




More information about the R-help mailing list