将R2jags对象转换为Stanreg(rstanarm)对象
我用将R2jags对象转换为Stanreg(rstanarm)对象,r,r2jags,rstanarm,R,R2jags,Rstanarm,我用R2jags制作了一个模型。我喜欢jags语法,但我发现R2jags生成的输出不容易使用。我最近读到了关于rstanarm软件包的文章。它有许多有用的功能,并且得到了tidybayes和bayesplot软件包的良好支持,以便于模型诊断和可视化。但是,我不喜欢在rstanarm中编写模型时使用的语法。理想情况下,我希望充分利用这两个方面,即在R2jags中编写模型,并将输出转换为Stanreg对象以使用rstanarm函数 可能吗?若有,怎么做?我想那个么问题不一定是它是否可能——我怀疑它可
R2jags
制作了一个模型。我喜欢jags
语法,但我发现R2jags
生成的输出不容易使用。我最近读到了关于rstanarm
软件包的文章。它有许多有用的功能,并且得到了tidybayes
和bayesplot
软件包的良好支持,以便于模型诊断和可视化。但是,我不喜欢在rstanarm
中编写模型时使用的语法。理想情况下,我希望充分利用这两个方面,即在R2jags
中编写模型,并将输出转换为Stanreg
对象以使用rstanarm
函数
可能吗?若有,怎么做?我想那个么问题不一定是它是否可能——我怀疑它可能是。问题是你准备花多少时间去做。您所要做的就是尝试在结构中复制由
rstanarm
创建的对象,以使R2jags
输出能够实现。这将使得一些后处理任务可能会起作用
如果我可以这么大胆的话,我想更好地利用您的时间是将R2jags
对象转换为您想要使用的后处理函数。例如,只需对JAGS输出进行少量修改,即可使bayesplot
中的所有mcmc*()
绘图功能正常工作。这里有一个例子。下面是jags()
函数帮助中的示例模型
# An example model file is given in:
model.file <- system.file(package="R2jags", "model", "schools.txt")
# data
J <- 8.0
y <- c(28.4,7.9,-2.8,6.8,-0.6,0.6,18.0,12.2)
sd <- c(14.9,10.2,16.3,11.0,9.4,11.4,10.4,17.6)
jags.data <- list("y","sd","J")
jags.params <- c("mu","sigma","theta")
jags.inits <- function(){
list("mu"=rnorm(1),"sigma"=runif(1),"theta"=rnorm(J))
}
jagsfit <- jags(data=jags.data, inits=jags.inits, jags.params,
n.iter=5000, model.file=model.file, n.chains = 2)
现在,您只需调用一些绘图函数:
mcmc_trace(jflist, regex_pars="theta")
或
因此,与其尝试复制rstanarm
生成的所有输出,不如尝试将jags
输出转换为适合您想要使用的后处理函数的格式,这样可能会更好地利用您的时间
编辑-添加了从
bayesplot
进行pp_check()
的可能性
在这种情况下,y
的后向绘制在theta
参数中。因此,我们创建了一个包含元素y
和yrep
的对象,并将其设置为类foo
x <- list(y = y, yrep = jagsfit$BUGSoutput$sims.list$theta)
class(x) <- "foo"
然后,只需调用函数:
pp_check(x, type="overlaid")
谢谢您的意见。“[…]尝试将
jags
输出转换为适合您想要使用的后处理函数的格式”:我的问题可能不够清楚,但这正是我要做的。在使用as.mcmc()
转换jags
输出后,我实际上已经可以使用mcmc_跟踪()
和mcmcmc_区域()
函数了。但是,我还想使用其他需要rstanarm
对象的函数。例如,rstanarm
包中的pp\u check()
函数或tidybayes
包中的add\u fitted\u draws()
函数。对于add\u fitted\u draws()
我认为这将非常困难。它依赖于rstanarm
模型的所有底层基础设施。看来要复制这一点需要很多时间。您最好尝试在自己的代码中始终如一地使用相同的编码约定(例如,mu[i]和pp_check()
,bayesplot
中的文档建议它应该是通用的-允许其他包作者为自己的目的生成pp\u check
的方法。回答上面的编辑以显示一种可能的方式。感谢您提供的附加信息和编辑。这很有用,即使它只解决了一半的问题相对长度单位。
x <- list(y = y, yrep = jagsfit$BUGSoutput$sims.list$theta)
class(x) <- "foo"
pp_check.foo <- function(object, ..., type = c("multiple", "overlaid")) {
y <- object[["y"]]
yrep <- object[["yrep"]]
switch(match.arg(type),
multiple = ppc_hist(y, yrep[1:min(8, nrow(yrep)),, drop = FALSE]),
overlaid = ppc_dens_overlay(y, yrep[1:min(8, nrow(yrep)),, drop = FALSE]))
}
pp_check(x, type="overlaid")