首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的runjags对象中删除链

从R中的runjags对象中删除链
EN

Stack Overflow用户
提问于 2017-08-22 01:24:09
回答 1查看 163关注 0票数 1

我有一个runjags对象,它有两个混合非常好的链(链1和链3),而另一个链没有混合(链2)。如何将runjags对象修剪为只包含链1和链3?

这是一个使用runjags生成JAGS模型的可重复示例(尽管这里的链混合得很好)。

代码语言:javascript
复制
library(runjags)

#generate the data
x <- seq(1,10, by = 0.1)
y <- x + rnorm(length(x))

#write a jags model
j.model = "
model{
#this is the model loop.
for(i in 1:N){
y[i] ~dnorm(y.hat[i], tau)
y.hat[i] <- m*x[i]
}

#priors
m ~ dnorm(0, .0001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}
"

#put data in a list.
data = list(y=y, x=x, N=length(y))

#run the jags model.
jags.out <- run.jags(j.model,
                     data = data,
                     n.chains=3,
                     monitor=c('m'))

实现此目的的一种方法是将runjags对象转换为mcmc.list,然后使用以下代码删除链:

代码语言:javascript
复制
trim.jags <- as.mcmc.list(jags.out)
trim.jags <- mcmc.list(trim.jags[[1]], trimjags[[3]])

但是,一旦在此方向上转换,数据就不能再放回runjags格式。我真的很想要一个保持runjags格式输出的解决方案,因为我当前的工作流程依赖于runjags摘要输出生成的格式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 05:53:29

看一下divide.jags函数(诚然,命名不是很明显):

代码语言:javascript
复制
jags_13 <- divide.jags(jags.out, which.chains=c(1,3))                     
jags_13
extend.jags(jags_13)
# etc

希望这能做你想要的。

哑光

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45802631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档