用rjags保存先辈

时间:2016-04-20 14:26:30

标签: r jags

我正在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

1 个答案:

答案 0 :(得分:4)

简短的回答是否定的 - JAGS(和BUGS)没有明确区分你定义为priors的内容和模型中的其他发行版,所以没有办法让JAGS为你提供有关特定子部分的信息。该模型。查看先前分布的常用方法是在R中单独绘制(或以其他方式概括)它们。

但是,有一个技巧可以与您的模型一起使用以获得您想要的东西:将循环的上部索引(n)设置为0(在数据中)。这将导致JAGS完全忽略for循环中的所有内容,有效地删除模型的似然成分,只留下先验。如果您监视pi,sigma2等,您应该看到这些参数的先验分布。由于没有可能进行计算,您还应该看到模型运行得更快!你确实需要运行两次模型(一次用于先验,一次用数据作为后验的正常)。