2014-06-15 60 views
1

對於每個「j」,我嘗試估計條件sum(delta [j,1:5])= 0上的delta [j,k]。但是當我編譯代碼時,軟件輸出是「節點W [1]的多重定義」。有人能幫助我嗎?節點W的多重定義[1]

model { 
for (j in 1:p){ 
for (k in 1:5){ 
Z[j, k]<- sum(delta[j,1:k]) 
} 
for (i in 1:n){ 
Y[i , j] ~ dcat (prob [i , j , 1: 5]) 
}} 
for (i in 1:n){ 
theta [i] ~ dnorm (0.0 , 1.0) 
} 
for (i in 1:n){ 
for (j in 1:p){ 
for (k in 1:5){ 
eta[i , j , k] <- alpha [j] * (k*theta [i] - k*beta [j]+Z[j, k]) 
psum [i , j , k] <- sum(eta[i , j , 1: k]) 
exp.psum[i , j , k]<- exp(psum [i , j , k]) 
prob [i , j , k] <- exp.psum[i , j , k]/sum(exp.psum [i , j , 1:5]) 
} } } 
for (j in 1:p){ 
W[j] <- sum(delta [j, 1:5]) 
W[j]<- 0 
alpha [j] ~ dlnorm (0.83 , pr.alpha) 
beta [j] ~ dnorm (-1.73 , pr.beta) 
delta[j,1] <- 0.0 
for (k in 2:5){ 
delta [j , k] ~ dnorm (0.02 , pr.delta) 
} } 
pr.alpha <- pow(1.2 , -2) 
pr.beta <- pow(0.7, -2) 
pr.delta <- pow(1.3, -2) 
} 

感謝

回答

2

BUGS不允許您覆蓋確定性節點,​​......你在最後for循環有W[j] <-兩次。

我想有很多方法可以編寫代碼來滿足您的條件。例如,你可以使用不同的分佈delta或設置delta[1]是獲得模擬delta[2]delta[5]

+0

感謝畢竟delta總和爲0所需的剩餘部分。在'delta [j,1] < - 0.0'之後嘗試'delta [j,2] < - -sum(delta [j,3:5])'並且還有'delta [j,1] < - 在[W] [j] < - sum(delta [j,1:5])''W [j] < - 0'的模型中求和(delta [j,2:5])'但BUGS會出錯。 – mina

+0

我在我的模型中通過該chande解決了我的問題:對於(3:5中的k),delta [j,2] < - -sum(delta [j,3:5]) delta [j,k] 〜dnorm(0.02,pr.delta) 並刪除'W [j]'。但BUGS只能生成1個鏈而不是更多。如何解決這個問題? – mina

+0

這兩個BUGS都可以爲你生成它們(點擊gen inits按鈕)或者使用'list'類型的對象加載你自己的。 – gjabel