2016-01-21 29 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