问题标签 [runjags]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - runjags 绘图的设置选项
我正在尝试使用该runjags
包运行 JAGS 并生成自定义图 - 更改链的颜色(完整的模型代码在问题https://stats.stackexchange.com/q/62006/5509中):
但似乎不可能更改绘图参数。在 ?runjagsclass他们写道:
plot 方法生成迹线和密度图(请注意,这些是预先绘制的并存储在 runjags 对象中,因此通常的点阵或绘图函数选项不可用)。
这似乎已经在run.jags
通话中制作了情节!但这似乎也不允许更改绘图选项。
问题:
如何更改绘图参数,例如链色?
他们为什么要在
run.jags
已经创建情节?通常设计良好的应用程序会将逻辑(模型计算)和输出分开。有什么特别的原因吗?
r - runjags 对象太大
我正在尝试使用新包runjags运行 JAGS ,因为R2jags 有一个错误(完整的模型代码在问题https://stats.stackexchange.com/q/62006/5509中):
它作为一个魅力,但这个包的缺点是函数runjags
返回的对象run.jags
已经与准备好的图表和输出捆绑在一起并且太大了。只是为了比较,对应的 .Rdata 文件的大小(2 条链,每条链保存 500 次迭代,总共 1000 次迭代):
runjags
对象 - 1.2 MBR2jags
对象 - 212 KBmcmc.list
对象 - 33 kB
该runjags
对象是巨大的,但我必须存储它以便以后能够runjags
在模型上使用接口。
这个问题的任何解决方法?
r - Runjags - 如何让 JAGS 决定适应阶段?
我正在使用Runjags包run.jags
的功能。问题是即使对于不需要它的模型也会强制适应阶段。我想让 JAGS 自己决定适应阶段的必要性和默认长度(有些模型确实需要适应阶段,有些则不需要)。然而,即使对于显然不需要它的模型,包装器也会强制自适应阶段默认为 1000 次迭代。run.jags
run.jags
可重现的示例来说明此问题:
现在,如果您查看输出 R2jags::jags,这个模型实际上不需要适应并且调用adapt
什么也不做,可能是因为让 JAGS 决定它(更多信息在这里)。而run.jags
强制对此模型进行(不必要的)调整,因此需要更多时间来运行。它为适应进行 1000 次迭代,然后为老化进行 1000 次迭代,然后为样本进行 1000 次迭代:
如何让 JAGS 在运行时决定适应阶段run.jags
?
抛开注意:请不要混淆适应和老化阶段,在 JAGS 中是不同的。适应阶段实际上并不像 MCMC 那样工作,并且对于某些模型来说它是不需要的(这就是为什么这个 bug只是有时出现的原因)。
r - 添加/删除摘要/绘图需要重新编译 runjags 对象
由于带有所有绘图的 runjags 对象太大,我尝试run.jags
使用plot=FALSE
,将结果runjags
对象保存到文件中,在新的 R 会话中恢复它(as out
),然后通过
(有关此技巧,请参见此处的讨论:https ://stackoverflow.com/a/21859618/684229 )
但是,由于未知原因,这会重新编译并再次调整模型!即使我设置了sample = 0, adapt = 0
!
仅绘制图形就需要很长时间,这很烦人。当我用绘图计算 runjags 对象然后尝试摆脱它们以将 runjags 对象存储为小时,也会发生同样的情况:
关于如何解决这个问题的任何提示(除了编写我自己的绘图函数)?
警告:第二次extend.jags
在同一个 runjags 对象上运行该函数已经很快了。但是,如果您保存 runjags 对象并在新会话中再次加载它,则会再次extend.jags
变慢。似乎runjags
JAGS 正在缓存某些东西(但不在原始 runjags 对象中)。
r - runjags 摘要中的 psrf 值太低?
psrf = 1.0047
Runjags对显然存在收敛问题的链的报告非常低:
当我尝试计算psrf
使用尾声时,我得到的结果看起来更合理:
那么为什么psrf
runjags 的报告如此之低呢?这是runjags的问题,还是我做错了什么?
我在 R 3.1.0 中使用当前版本的 runjags (1.2.1-0)。
编辑:在创建摘要期间,我收到了警告 - 很抱歉之前没有提到它们:
r - 有没有办法为调试目的转储 JAGS 节点值?
我从 JAGS 收到以下错误:
仅从这些信息中很难找出那里发生了什么。这是由这部分代码引起的:
Y[107]
打印出节点的父值(即节点)会非常有用pi[107,]
!这会给我非常明确的反馈,在哪里寻找错误!JAGS有这样的方法吗?
在 JAGS 手册的第 3.2 章中,JAGS 谈到了留下一些有用的jags.dumpN.R
文件:
如果模型编译和初始化正确,但在更新过程中发生错误,则模型的当前状态将转储到名为 jags.dumpN.R 的文件中,其中 N 是链号。然后,您应该将转储的数据加载到 R 中,以检查发生错误时每个链的状态。
但是,我不确定这是否适用于我的情况。所以我试图获取转储文件。由于我使用runjags::run.jags()
的是运行 JAGS,因此我尝试在调试模式下运行它:
不幸的是,目录中没有包含任何有用信息的转储或文件 runjagsfiles_3
。
有没有办法从 JAGS 中获取那些“无效的父值”?
我正在使用 JAGS 3.4.0。
PS:我故意不在这里提交我的完整模型代码。我的问题是关于 JAGS 的一般性问题,而不是为什么我的模型不起作用。
r - 如何在 R 中保存 Coda 对象
我不确定如何在 R 中保存 coda (mcmc.list) 对象。其他人也问过类似的问题,但我发现给出的答案并不是特别清楚。理想情况下,我想将 coda 对象保存为 R.data 文件或文本文件(例如 csv),这样我就可以重新导入它并分析 JAGS 链,而无需重新运行模型(大约需要 30 分钟)我的电脑)。现在我的尾声对象“coda.samples”看起来像这样:
如您所见,它是三个矩阵的列表,其中包含 1094 个参数的 3334 个估计值(即 3 个长度为 3334 的链)。我想存储这个 coda 对象,这样我就可以将它调用回 R 中,而不必每次都重新运行模型。我还想保留三个独特链的事实。
r - 我可以用初始值告诉 JAGS 在失败后自动重新启动吗?
我的模型因以下错误而失败:
我做了一些诊断,发现链 3 中的初始值存在问题。但是,这种情况有时会发生。在这种情况下,有没有办法告诉run.jags
JAGS 自己重新尝试并重新运行模型?例如,告诉他再做 N 次尝试正确初始化模型。那将是非常合乎逻辑的事情,而不仅仅是失败。还是我必须手动做一些tryCatch
事情?
PS:请注意,我目前正在使用run.jags
从 R 运行 JAGS。
r - 无法提取 DIC
我正在使用 runjags 并试图为我的模型获取 DIC。
我知道如果我打印 runjags 对象,它将返回包含 DIC 的模型摘要,但我的模型有很多变量,因此计算摘要统计信息需要很长时间。当我使用summarise=FALSE
DIC 时不返回。
我试过使用:extract(runJagsObj, what='dic')
但它返回此错误消息:
"Error: Please supply column name"
有没有办法在摘要信息中查看 DIC 而不必计算每个变量的摘要统计信息?或者为什么提取不起作用?
method=parallel
如果这是有用的信息,我正在使用。
linux - Linux 中的 runjags 摘要
我summarise = TRUE
在函数中设置run.jags
,然后将输出对象保存为save(out, file="out.RData")
.
当我稍后加载此对象时,我可以检索摘要、绘图等。
但是,当我使用完全相同的代码并运行模型,并将输出保存在 Linux 集群上,然后在 Windows 中加载对象以使用它时,摘要和绘图不可用。当我输入summary(out)
、print(out)
、plot(out)
或add.summaries(out)
时,我收到以下错误消息:
错误:提供的 runjags.object 无效;必须提供 runjags 函数的输出(具有类“runjags”)
这即使class(out)
返回"runjags"
。
事实上,names(out)
这表明输出中不包含摘要(以及许多其他内容)。帮助文件确实表明默认情况下包含摘要/绘图等。
在 Linux 中运行模型是否存在以下问题:1)阻止生成摘要,或 2)弄乱输出对象的类?
我当然可以使用 coda 包并做out2 <- as.mcmc.list(out)
,然后我可以使用 coda 函数来处理输出。