2016-01-21 79 views
3

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

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) 
}" 
+0

这是一个编码网站,但不是代码编写服务。请修改您的功能以包含代码或删除问题并寻找可以获得统计编程辅导的场所。 –

+0

更新 - 问题不是关于创建代码,而是关于JAGS的容量 – Emily

+0

正如答案中所示,提供代码允许答案识别所请求的设施,但也允许识别您不知道的方法错误。 –

回答

5

柯西分布是t分布的特殊情况下,用1个自由度(Wikipedia link)。虽然JAGS没有Cauchy,但确实有t分布。

dt(mu, tau, k) 

只是令k等于1,你有一个柯西之前

dt(mu, tau, 1) 

我不是你的方差设置为正常或柯西虽然之前,考虑到方差始终为正(和正常或者柯西不是)。尝试像伽玛分布为您的精度。

tau.a ~ dgamma(0.001,0.001) # vague precision parameter 
sigma.a <- 1/sqrt(tau.a) 
+0

Gelman讨论了sd参数在这里使用_half_-cauchy先验:[先前分层模型中差异参数的分布](https://projecteuclid.org/download/pdf_1/euclid.ba/1340371048) – jbaums

+0

有趣。感谢分享! –

+1

在JAGS中,标准偏差(非方差)的半柯西先验可以通过截断t分布来编码:dt(mu,tau,1)T(0,)。 – tflutre