2014-06-15 2 views
1

Я пытаюсь оценить дельта [j, k] на сумме условия (delta [j, 1: 5]) = 0 для каждого «j». но когда я компилирую код, программным выходом является «несколько определений узла 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

ОШИБКИ не позволяют перезаписывать детерминированных узлы, ... у вас есть есть W[j] <- дважды в последнем for цикле.

Я думаю, что существует много способов написать код для удовлетворения вашего состояния. Например, вы могли бы использовать другое распределение для delta или установить delta[1] быть остаток требуется, чтобы получить все delta просуммировать 0 после моделирования delta[2] к delta[5]

+0

Спасибо. перед тем, как я попробую 'delta [j, 2] <- -sum (delta [j, 3: 5])' после 'delta [j, 1] <- 0.0', а также' delta [j, 1] <- 0- sum (delta [j, 2: 5]) 'в модели без' W [j] <- sum (delta [j, 1: 5]) '' W [j] <- 0'. но BUGS получают ошибку. – mina

+0

Я решил проблему с помощью этой chande в моей модели: delta [j, 2] <- -sum (delta [j, 3: 5]) для (k в 3: 5) { delta [j, k] ~ dnorm (0.02, pr.delta) и удалите 'W [j]'. но BUGS генерируют inits только для 1 цепочки не более. Как решить эту проблему? – mina

+0

либо BUGS могут сгенерировать их для вас (нажмите кнопку gen inits), либо загрузите свой собственный, используя объект типа list. – gjabel

Смежные вопросы