嗨,我有一个关于在 JAGS 和 BUGS 中运行模型的详细信息的快速问题。
假设我运行 n.burnin=5000、n.iter=5000 和 Thin=2 的模型。这是否意味着该程序将
- 运行 5,000 次迭代,并丢弃结果,
接着
- 再运行 10,000 次迭代,只保留每秒的结果?
如果我将这些模拟保存为 CODA 对象,是全部保存了 10,000 个,还是只保存了稀疏的 5,000 个?我只是想了解使用哪组迭代来制作 ACF 图?
谢谢
嗨,我有一个关于在 JAGS 和 BUGS 中运行模型的详细信息的快速问题。
假设我运行 n.burnin=5000、n.iter=5000 和 Thin=2 的模型。这是否意味着该程序将
接着
如果我将这些模拟保存为 CODA 对象,是全部保存了 10,000 个,还是只保存了稀疏的 5,000 个?我只是想了解使用哪组迭代来制作 ACF 图?
谢谢
其他关于 BUGS 的回答是正确的,但他的回答不适用于 JAGS(至少,不适用于 rjags,R2jags 可能不同)。我没有直接使用 JAGS,但 rjags 的作者是 JAGS 的创建者,所以我猜他们使用相同的约定。
在 rjags 中,jags.model 对象跟踪链已运行的迭代次数。
这是文件“tmpJags”中的一个小模型:
model {
X ~ dnorm(Y, 1)
Y ~ dt(0, 1, 1)
}
然后我跑
X <- 1
jm <- jags.model(file = "tmpJags", data = list(X = X),
n.chains = 4, n.adapt = 1000)
jm 由 4 个链组成,每个链都运行了 1000 次总迭代。然后我做
samps <- coda.samples(jm, "Y", n.iter = 1000, thin = 10)
现在我的所有 4 个链都运行了总共 2000 次迭代,我从每个链中收集了 100 个样本,因此总共保存了 400 个样本。
对我来说,这样做是有意义的,因为为了监控链收敛的目的,你宁愿考虑总迭代而不是细化后的迭代。
简短回答:迭代次数包含老化,不包含细化。
简短的回答:如果您要通过 R2WinBUGS 或 R2OpenBUGS(或查看 WinBUGS 输出摘要)运行 BUGS 模型,并使用您声明的参数:
n.iter=5000, n.burnin=5000, n.thin=2
您会收到一条错误消息/无输出。n.iter是指包括老化在内的迭代总数,因此所有迭代都被老化并被丢弃(或不包括在 CODA 输出和 WinBUGS 中的任何 ACF 图中)。
细化的处理方式不同(相对于n.iter)。例如,如果您使用以下任何参数设置 MCMC:
n.iter=6000, n.burnin=5000, n.thin=1
n.iter=6000, n.burnin=5000, n.thin=5
n.iter=6000, n.burnin=5000, n.thin=10
仅保存 1000 次迭代,即丢弃所有非细化模拟(在 CODA 输出或 WinBUGS 中的任何 ACF 图中)。
不知道这对于 jags 是否一样?