从 R 中的 runjags 对象中删除链
Remove a chain from a runjags object in R
我有一个 runjags 对象,它有两条混合得很好的链(链 1 和 3)和一条混合不好的链(链 2)。我怎样才能修剪 runjags 对象以仅包含链 1 和 3?
这是一个使用 runjags 生成 JAGS 模型的可重现示例(尽管这里的链混合得很好)。
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
,然后使用以下代码删除链:
trim.jags <- as.mcmc.list(jags.out)
trim.jags <- mcmc.list(trim.jags[[1]], trimjags[[3]])
但是,一旦按此方向转换,数据将无法再恢复为 runjags 格式。我非常想要一个将输出保持为 runjags 格式的解决方案,因为我当前的工作流程依赖于 runjags 摘要输出生成的格式。
看看(无可否认,命名不是很明显)divide.jags 函数:
jags_13 <- divide.jags(jags.out, which.chains=c(1,3))
jags_13
extend.jags(jags_13)
# etc
希望这正是您想要的。
马特
我有一个 runjags 对象,它有两条混合得很好的链(链 1 和 3)和一条混合不好的链(链 2)。我怎样才能修剪 runjags 对象以仅包含链 1 和 3?
这是一个使用 runjags 生成 JAGS 模型的可重现示例(尽管这里的链混合得很好)。
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
,然后使用以下代码删除链:
trim.jags <- as.mcmc.list(jags.out)
trim.jags <- mcmc.list(trim.jags[[1]], trimjags[[3]])
但是,一旦按此方向转换,数据将无法再恢复为 runjags 格式。我非常想要一个将输出保持为 runjags 格式的解决方案,因为我当前的工作流程依赖于 runjags 摘要输出生成的格式。
看看(无可否认,命名不是很明显)divide.jags 函数:
jags_13 <- divide.jags(jags.out, which.chains=c(1,3))
jags_13
extend.jags(jags_13)
# etc
希望这正是您想要的。
马特