2

我正在尝试使用该runjags包运行 JAGS 并生成自定义图 - 更改链的颜色(完整的模型代码在问题https://stats.stackexchange.com/q/62006/5509中):

require("runjags")
out2 <- run.jags("Poisson.OD.t.test.txt", params, win.data, nc, inits,
      nb*4/5, ni, nb*1/5)
plot(out2, layout = c(4, 2))

但似乎不可能更改绘图参数。在 ?runjagsclass他们写道:

plot 方法生成迹线和密度图(请注意,这些是预先绘制的并存储在 runjags 对象中,因此通常的点阵或绘图函数选项不可用)。

这似乎已经在run.jags通话中制作了情节!但这似乎也不允许更改绘图选项。

问题:

  1. 如何更改绘图参数,例如链色?

  2. 他们为什么要在run.jags已经创建情节?通常设计良好的应用程序会将逻辑(模型计算)和输出分开。有什么特别的原因吗?

4

1 回答 1

4

通常,runjags 类对象的最大元素是继续模型所需的数据和 RNG 状态。除非这些存储在类中,否则没有办法在它停止的地方继续它而不需要额外的参数。但是,当您监控了大量变量时,有时预制的地块也非常大 - 在这些情况下,您可以通过将 plots=FALSE 指定为原始运行来摆脱所有地块(以及相关的存储问题)。 jags() 调用。或者,您可以使用(如您所料)as.mcmc.list() 将 runjags 对象分解为一个简单的 MCMC 列表对象。

所以回答你的问题:1)首先使用 as.mcmc.list() 然后在这些链上使用你想要的任何特定图 2)我当时做出的设计决定是预先创建所有这些图(在细化 MCMC 链以最大限度地减少存储问题),从而减少打印它们所需的时间,并且我通常想要快速查看的收敛诊断图很容易获得。这些并不是真的(如帮助文件中所述)用于收敛诊断以外的任何用途。将来我可能会考虑动态生成绘图的替代方法(使用现有的 S3 方法),因为存储绘图的代码非常陈旧并且可能已经过时,但它始终是速度与存储的折衷方案。就我而言,速度几乎总是胜出(我很不耐烦)。

于 2014-02-18T16:35:26.540 回答