Cauchy在JAGS之前

Emi*_*ily 4 r bayesian jags

我正在使用rJAGS构建一个多级贝叶斯模型,我想为几个参数指定一个Cauchy先验.有没有办法在JAGS中执行此操作,还是需要切换到STAN?我的JAGS模型如下.我想dnorm用Cauchy 替换分布,但是JAGS找不到标准的RCauchy分布,例如dcauchy,pcauchy

model_string <- "model{
for (i in 1:n){
    y[i] ~ dbin(mu[i], 1) 
p.bound[i] <- max(0, min(1, mu[i])) #381 gelman
logit(mu[i]) <- a[dc[i]] + b1*x1[i] + b2*x2[i]
}

b1 ~ dnorm(0,.001) 
b2 ~ dnorm(0,.001) 

for (j in 1: n.dc ){
    a[j] ~ dnorm(g0, tau.a)  #not goj, g1j
}

g0 ~ dnorm(0,.001) 
tau.a <- pow(sigma.a , -2)
sigma.a ~ dnorm(0,.001) 
}"
Run Code Online (Sandbox Code Playgroud)

mfi*_*ino 7

Cauchy分布是t分布的一个特例,具有1个自由度(维基百科链接).虽然JAGS没有Cauchy,但它确实有t分布.

dt(mu, tau, k)
Run Code Online (Sandbox Code Playgroud)

只需将k设置为1,就可以得到Cauchy先验

dt(mu, tau, 1)
Run Code Online (Sandbox Code Playgroud)

我不会将你的方差设置为正常或Cauchy先前,考虑到方差总是正的(正常或Cauchy不是).尝试伽玛分布等精确度.

tau.a ~ dgamma(0.001,0.001) # vague precision parameter
sigma.a <- 1/sqrt(tau.a)
Run Code Online (Sandbox Code Playgroud)

  • 在JAGS中,标准差(不是方差)的半高密先验可以通过截断t分布来编码:“ dt(mu,tau,1)T(0,)”。 (3认同)
  • 盖尔曼(Gelman)建议使用非信息性柯西(Cauchy)之前的``dt(0,pow(2.5,-2),1)''https://arxiv.org/pdf/0901.4011.pdf (3认同)