我正在rjags
中运行贝叶斯模型,我希望能够输出MCMC轨迹的图,我的参数的后验分布(我已经可以从coda获得) ,以及后验与先前分布的比较。
有没有办法将您在jags model
部分中指定的先验保存为列表或不会强迫我复制和粘贴(然后以指数方式增加错误的可能性)的所有发行版自己的参数?
我有以下代码
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
答案 0 :(得分:4)
简短的回答是否定的 - JAGS(和BUGS)没有明确区分你定义为priors的内容和模型中的其他发行版,所以没有办法让JAGS为你提供有关特定子部分的信息。该模型。查看先前分布的常用方法是在R中单独绘制(或以其他方式概括)它们。
但是,有一个技巧可以与您的模型一起使用以获得您想要的东西:将循环的上部索引(n)设置为0(在数据中)。这将导致JAGS完全忽略for循环中的所有内容,有效地删除模型的似然成分,只留下先验。如果您监视pi,sigma2等,您应该看到这些参数的先验分布。由于没有可能进行计算,您还应该看到模型运行得更快!你确实需要运行两次模型(一次用于先验,一次用数据作为后验的正常)。