我正在使用该包rjags
在 R 中执行 MCMC,并且我想保存该函数的输出以jags.model
供以后在另一个 R 会话中使用。
下面是一个正态分布均值的简单示例:
library(rjags)
N <- 1000
x <- rnorm(N, 0, 5)
model.str <- 'model {for (i in 1:N) {
x[i] ~ dnorm(mu, 5)}
mu ~ dnorm(0, .0001)}'
jags <- jags.model(textConnection(model.str), data = list(x = x, N = N))
update(jags, 1000)
我可以生成mu
这样的样本:
coda.samples(model=jags,n.iter=1,variable.names="mu")
# [[1]]
# Markov Chain Monte Carlo (MCMC) output:
# Start = 2001
# End = 2001
# Thinning interval = 1
# mu
# [1,] 0.2312028
#
# attr(,"class")
# [1] "mcmc.list"
现在我想保存模型对象jags
以供以后在新的 R 会话中使用,这样我就不必再次初始化和刻录马尔可夫链:
save(file="/tmp/jags.Rdata", list="jags")
quit()
但是,在启动新的 R 会话并重新加载模型后,我收到一条错误消息,指出必须重新编译 JAGS 模型:
load("/tmp/jags.Rdata")
coda.samples(model=jags,n.iter=1,variable.names="mu")
# Error in model$iter() : JAGS model must be recompiled
这是为什么?如何将对象保存jags
在 R 中以备后用?
注意:这个问题之前已经问过,但是OP对这个问题不是很具体。