我正在使用 RJAGS 修改现有模型。我想并行运行链,偶尔检查 Gelman-Rubin 收敛诊断,看看我是否需要继续运行。问题是,如果我需要根据诊断值恢复运行,重新编译的链会从第一个初始化的先前值而不是链停止的参数空间中的位置重新启动。如果我不重新编译模型,RJAGS 就会抱怨。有没有办法在链条停止时存储它们的位置,以便我可以从停止的地方重新初始化?这里我将举一个非常简单的例子。
示例1.bug:
model {
for (i in 1:N) {
x[i] ~ dnorm(mu,tau)
}
mu ~ dnorm(0,0.0001)
tau <- pow(sigma,-2)
sigma ~ dunif(0,100)
}
Run Code Online (Sandbox Code Playgroud)
parallel_test.R:
#Make some fake data
N <- 1000
x <- rnorm(N,0,5)
write.table(x,
file='example1.data',
row.names=FALSE,
col.names=FALSE)
library('rjags')
library('doParallel')
library('random')
nchains <- 4
c1 <- makeCluster(nchains)
registerDoParallel(c1)
jags=list()
for (i in 1:getDoParWorkers()){
jags[[i]] <- jags.model('example1.bug',
data=list('x'=x,'N'=N))
}
# Function to combine multiple mcmc lists into a single one
mcmc.combine <- function( ... ){
return( …Run Code Online (Sandbox Code Playgroud)