文档有点混乱;在 ?jags.model 下,我们看到 .RNG.seed 应该是长度为 1 的向量,但 parallel.seeds() 返回通常 > 1 的 .RNG.state。Mersenne Twister 算法的状态空间有 624 个整数,并且那是你做的向量的长度
parallel.seeds("base::BaseRNG",4)
确保您看到所有 4 种类型的 RNG。 同样,Wichmann-Hill 生成器的状态空间有 3 个整数,我相信类似的研究会揭示其他两个的状态空间长于 1。
为了我自己的启发,我使用 rjags 中的 LINE 数据模拟了一个示例:
data(LINE)
LINE$model() ## edit and save to line.r
data = LINE$data()
line = jags.model("line.r",data=data)
line.samples <- jags.samples(LINE, c("alpha","beta","sigma"),n.iter=1000)
line.samples
inits = parallel.seeds("base::BaseRNG", 3) # a list of lists
inits[[1]]$tau = 1
inits[[1]]$alpha = 3
inits[[1]]$beta = 1
inits[[2]]$tau = .1
inits[[2]]$alpha = .3
inits[[2]]$beta = .1
inits[[3]]$tau = 10
inits[[3]]$alpha = 10
inits[[3]]$beta = 5
line = jags.model("line.r",data=data,inits=inits,n.chains=3)
line.samples <- jags.samples(line, c("alpha","beta","sigma"),n.iter=1000)
line2 = jags.model("line.r",data=data,inits=inits,n.chains=3)
line.samples2 <- jags.samples(line2, c("alpha","beta","sigma"),n.iter=1000)
all(line.samples$alpha-line.samples2$alpha < 0.00000001) ## TRUE
所以结果是完全可重复的,这很酷。
要了解 R 崩溃的条件,我需要知道您计算机上 sessionInfo() 的结果,以及有关情况的更多详细信息(例如,您正在运行什么 JAGS 模型?)。我已经做了:
for (i in 1:100){parallel.seeds("base::BaseRNG",4)}
我的电脑没有崩溃。以供参考:
sessionInfo()
# R version 3.1.3 (2015-03-09)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 7 x64 (build 7601) Service Pack 1
#
# locale:
# [1] LC_COLLATE=English_United States.1252
# [2] LC_CTYPE=English_United States.1252
# [3] LC_MONETARY=English_United States.1252
# [4] LC_NUMERIC=C
# [5] LC_TIME=English_United States.1252
#
# attached base packages:
# [1] stats graphics grDevices utils datasets
# [6] methods base
#
# other attached packages:
# [1] rjags_3-14 coda_0.17-1 mlogit_0.2-4
# [4] maxLik_1.2-4 miscTools_0.6-16 Formula_1.2-1
#
# loaded via a namespace (and not attached):
# [1] grid_3.1.3 lattice_0.20-30 lmtest_0.9-33
# [4] MASS_7.3-39 sandwich_2.3-3 statmod_1.4.21
# [7] tools_3.1.3 zoo_1.7-12
这显示了我正在使用的 R 和 rjags 的版本。