我在rjags
中运行贝叶斯模型,我希望能够输出MCMC轨迹的曲线图,参数的后验分布(我已经可以从尾部获得),以及后验分布与先验分布的比较。
有没有办法将您在jags model
part中指定的先验保存为一个列表或某种东西,这样就不会强迫我复制并粘贴(然后以指数方式增加出错的可能性)所有具有它们自己的参数的分布?
我有下面这段代码
cat(
'model{
for(i in 1:n){
P.hat[i] ~ dnorm(pi, df/sigma2)
SS[i] ~ dgamma((df-1)/2, sigma2/2 )
R[i] ~ dbin(theta, N)
}
# relations
gam <- m*vs+(1-m)*va
theta <- (pi*beta*gam)/(gam*dt+(1-gam)*du)
# numerical values
df <- 15
# priors
pi ~ dnorm(0.05, 2)I(0,1)
sigma2 ~ dgamma(2, 0.1*df)
beta ~ dunif(0, 0.4)
m ~ dbeta(1, 4)
vs ~ dbeta(2, 9)
va ~ dbeta(2, 5)
dt ~ dnorm(0.3, 2)I(0,10)
du ~ dnorm(1.25, 2)I(0,10)
}',
file='model1.bug')
我想“保存”“前科”部分。
提前感谢你的回答!EM
发布于 2016-04-25 03:30:11
简短的答案是no - JAGS (和BUGS)没有明确区分您定义为先验的内容和模型中的其他分布,因此没有办法要求JAGS提供关于模型的特定部分的信息。查看先前分布的通常方法是在R中分别绘制(或总结)它们。
但是,有一个技巧可以与您的模型一起工作,以获得您想要的:将循环的上限索引(n)设置为0(在数据中)。这将导致JAGS完全忽略该for循环中的所有内容,有效地删除模型的可能性成分,只留下先验。如果您监视pi、sigma2等,您应该会看到这些参数的先验分布。由于没有计算的可能性,您还应该看到模型运行得更快!不过,您确实需要运行该模型两次(一次用于先验数据,一次用于后验数据)。
https://stackoverflow.com/questions/36749571
复制相似问题