1

我将runjagsR 中模型的输出作为mcmc.list. 下面是生成 3 个包含 1,000 个样本的链的代码。我想将所有 12 条链修剪到最后 400 个样本。我可以拉开链并将链输出矩阵保存在列表中,但它不再是一个mcmc.list,我不知道如何将它变成一个 mcmc.list。

以下是一些用于运行runjags模型并将输出转换为 a 的数据mcmc.list

y <- rnorm(100)

jags.model ="
model {
#model
for (i in 1:N){
      y[i] ~ dnorm(y.hat[i], tau) 
  y.hat[i] <- m0
}

#priors
m0 ~ dnorm(0, .0001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}
"

jags.data <- list(y = y, N = length(y))
jags.out <- runjags::run.jags(jags.model,
                              data = jags.data,
                              n.chains = 3,
                              adapt = 100,
                              burnin = 100,
                              sample = 1000,
                              monitor = c('m0'))
z <- coda::as.mcmc.list(jags.out)
4

1 回答 1

2

最简单的方法是使用窗口:

z2 <- window(z, start=601, end=1000, thin=1)
summary(z2)

也可以看看:

?window.mcmc.list

或者,您可以使用 as.mcmc 和 as.mcmc.list 将您的(列表)截断矩阵转换回 mcmc.list 对象:

library('coda')
z3 <- as.mcmc.list(lapply(z, function(x) as.mcmc(x[601:1000,])))
summary(z3)

但如果我是你,我会坚持使用窗口!

马特

于 2018-04-26T11:30:06.940 回答