Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在rjags中保存优先级_R_Jags - Fatal编程技术网

在rjags中保存优先级

在rjags中保存优先级,r,jags,R,Jags,我在rjags中运行一个贝叶斯模型,我希望能够输出MCMC轨迹图、参数的后验分布(我已经可以从coda中获得),以及后验分布与先验分布的比较 有没有办法将您在jagsmodel部分中指定的优先级保存为一个列表或某种不会强迫我复制和粘贴(然后以指数方式增加错误的可能性)所有具有其自身参数的分布的东西 我有下面的代码 cat( 'model{ for(i in 1:n){ P.hat[i] ~ dnorm(pi, df/sigma2) SS[i]

我在
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')
cat(
"模式",{
for(1:n中的i){
P.hat[i]~dnorm(pi,df/sigma2)
SS[i]~dgamma((df-1)/2,sigma2/2)
R[i]~dbin(θ,N)
}
#关系

gam简而言之,答案是否定的——JAGS(和bug)没有明确区分您定义为先验分布和模型中的其他分布,因此无法要求JAGS向您提供关于模型特定子部分的信息。查看先前分布的通常方法是绘制(或总结)它们分别在R


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

简单的回答是没有问题(和bug)在你定义的先验分布和模型中的其他分布之间没有明确的区别,因此没有办法要求JAGS向你提供关于模型特定子部分的信息。查看先前分布的通常方法是在R中分别绘制(或总结)它们


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

关于代码的问题属于上。我们将为您迁移此问题。关于代码的问题属于上。我们将为您迁移此问题。