Несколько определений узлов winbugs

У меня есть проблема с этим кодом в winbugs. Модель синтаксически верна, и данные загружаются, но когда я компилирую, программный вывод представляет собой «несколько определений узла Z». Я не знаю, как решить проблему.

Это модель:

#BUGS Model
model {
for (i in 1:n){
  for (j in 1:p){
    Y[i , j] ~ dcat ( prob [i , j , 1: M[j]])
    B <- sum(alpha[j])  
  } 
  theta [i] ~ dnorm (0.0 , 1.0)
}
for (i in 1:n){
  for (j in 1:p){
    for (k in 1:M[j]){
      Z <- sum(delta [k ])
      eta [i , j , k] <- 1.7* alpha [j] * (B * (theta [i] - beta [j] ) + Z)
      exp.eta[i , j , k] <- exp( eta[i , j , k])
      psum[ i , j , k] <- sum(eta[i , j , 1:k])
      prob[i , j , k] <- exp.eta[i , j , k] / psum[i , j , 1:M[j]]
    }
  }
}
for (j in 1:p){
  alpha [j] ~ dnorm (0 , pr.alpha) I(0 , )
  for (k in 2:M[j]){
    delta [k] ~ dnorm (0.0 , 1.0)
  }
  for (k in 1:M[j]){
    beta [j] ~ dnorm (0 , pr.beta )
  }
}
delta [1] <- 0.0
pr.alpha <- pow(1 , -2)
pr.beta <- pow(1, -2)
}

#data
list(n=10, p=8)

M[] M[] M[] M[] M[] M[] M[] M[]
2 2 4 2 2 3 4 2 
2 1 1 2 1 2 2 3
1 2 1 3 1 1 4 4
2 1 1 2 1 1 2 4 
3 4 4 3 3 3 1 1 
4 3 4 4 4 4 4 4 
1 1 2 2 1 2 4 4 
2 1 1 3 1 4 2 4 
3 4 1 1 1 2 2 2 
2 2 2 1 4 4 4 4 
END

Спасибо всем, что ответят.


person mina    schedule 26.05.2014    source источник
comment
@mima Можете ли вы предоставить все данные или образец, чтобы можно было сделать воспроизводимый пример? Когда я пытаюсь скомпилировать, я получаю сообщение о том, что M не определено   -  person guyabel    schedule 27.05.2014
comment
Итак, M — это матрица или вектор? В модели вы используете M как вектор (один длинный столбец чисел), но в вашем комментарии это матрица?   -  person guyabel    schedule 28.05.2014
comment
это модель для GPCM (Обобщенная модель частичного кредита) в теории ответов на вопросы. что i — это номер субъекта, j — это номер элемента, а M[j] — номер j-го элемента категории ответов. поэтому у меня есть матрица i * j.   -  person mina    schedule 28.05.2014
comment
возможный дубликат множественное определение узла - ошибка в Winbugs   -  person David Manheim    schedule 27.05.2015


Ответы (1)


Ваши проблемы заключаются в многократном определении некоторых узлов в циклах BUGS. Например, B определяется np раз в первом цикле i и j. БАГИ не допустят этого. Вы не можете переопределить значение узла. Вам нужно либо

1) Добавьте несколько индексов к B, Z, delta[k] и beta[j], чтобы позволить BUGS сохранять смоделированные значения в элементах узлов во время циклов. например, заменить B на B[i,j] и Z на Z[i,j,k]

or

2) Переместите B, Z, delta[k] и beta[j] в циклы, которые охватывают только те индексы, которые у них уже есть. то есть B, Z не в цикле, так как у них нет индекса, delta[k] только в цикле for(k in 1:...).

Решение зависит от того, что вы имеете в виду для своей модели и какие параметры вы хотите сохранить.

person guyabel    schedule 28.05.2014
comment
B и Z - константа, и я не могу добавить к ним индекс. в приведенной выше модели я помещаю B в цикл for(j in 1:...), и у меня нет с этим проблем. но z должен быть в 2 цикла: for(j в 1:...) и for(k в 1:...). и это создает проблему. - person mina; 28.05.2014
comment
Спасибо за ваш ответ. Если хотите, я могу отправить по электронной почте формулу для этой модели. Я действительно смущен. - person mina; 28.05.2014
comment
B будет проблемой, как и delta и beta, WinBUGS выдает только одно сообщение об ошибке за раз. - person guyabel; 28.05.2014
comment
@mina, так что из вашего комментария звучит так, будто B и Z - это отдельные константы, поэтому они должны быть вне циклов. - person guyabel; 28.05.2014
comment
если они были вне цикла, эта ошибка показывает: ожидаемое имя переменной. это из-за индекса для дельты и бета. - person mina; 28.05.2014
comment
если я изменю модель partof на это: model{ for (i in 1:n){ for (j in 1:p){ Y[i,j] ~ dcat ( prob[i, j , 1: M[j]]) } theta[i] ~ dnorm (0.0 , 1.0) } delta[1] <- 0.0 for (i in 1:n){ for (j in 1:p){ for (k in 1:M[j]){ B[j]<-sum(alpha[1:p]) Z[j]<-sum(delta[1:k]) eta [i,j,k] <- 1.7*alpha[j]*(B[j]*(theta[i]-beta[j])+Z[j]) exp.eta[i,j,k]<- exp(eta[i,j,k]) psum[ i , j , k] <- sum(eta[i , j , 1:k]) prob[i , j , k] <- exp.eta[i , j , k] / psum[i , j , 1:M[j]] } } } эта ошибка показывает: несколько определений узла Z[1] - person mina; 28.05.2014
comment
@mina смотрите мой ответ, Z должны быть все индексы для циклов, в которых он находится, иначе вы перезаписываете (не разрешено ОШИБКАМИ) - person guyabel; 28.05.2014
comment
@мина. Вероятно, вам следует отменить редактирование своего вопроса и создать новый вопрос для обновления .... в противном случае другие, у которых есть такая же (исходная) проблема и найдут этот вопрос в будущем, будут потеряны. - person guyabel; 28.05.2014