将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")