Как написать код Jags, когда данные категориальные? - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь запускать зазубрины и не уверен в своем коде зазубрин. Любые советы или отзывы будут оценены. введите описание изображения здесь

        n=number of subjects (N=1000)
        i=number of items(questions) (I=42)
        m= number of attempts (M=5)

Как вы можете видеть на снимке экрана с моими данными, они категориальные (или порядковые).

        1 means : p1[n,i] 
        2 means : (1-p1[n,i])*p2[n,i] 
        3 means :(1-p1[n,i])(1-p2[n,i])*p3[n,i])
        4 means :(1-p1[n,i])(1-p2[n,i])(1-p3[n,i])*p4[n,i]
        5 means : (1-p1[n,1])(1-p2[n,i])(1-p3[n,i])(1-p4[n,i])
  

Я сослался на книгу под названием «Проведение байесовского анализа» и написал код Jags, как показано ниже.

    linear<-function(){   
     for(n in 1:N){ ## number of subjects (N=1000)
      for(i in 1:I){ ## number of items (I=42)
       responses[n,i]~dcat(prob[n,i,1:5]) 
      }
     } 

 for(n in 1:N){ 
    for(i in 1:I){  
     prob[n,i,1]<-p[n,i,1] ## first attempt 
     prob[n,i,2]<-prod(1-p[n,i,1:1])*p[n,i,2]
     prob[n,i,3]<-prod(1-p[n,i,1:2])*p[n,i,3]
     prob[n,i,4]<-prod(1-p[n,i,1:3])*p[n,i,4]
     prob[n,i,5]<-prod(1-p[n,i,1:4]) 
    }
   }

Однако, когда я посмотрел на другие ресурсы, касающиеся порядковых данных, они написали, как показано ниже (и я адаптировал свой код)

 for(n in 1:N){ 
  for(i in 1:I){
   responses[n,i] ~ dcat(prob[n,i,1:M[i]) 
   }
  } 
 }

  for(n in 1:N){
   for (i in 1:I){ 
    prob[n, i, 1] <- p[n, i, 1] 
   }
    for (m in 2:(M[i]-1)){ 
     prob[n,i,m]<-prod(1-p[n,i,1:(m-1)])*p[n,i,m]
     }
     prob[n,i,5]<-prod(1-p[n,i,1:4])
    }

     * for(n in 1:N){
        for(i in 1:9){
          for(m in 1:4){
          logit(p[n,i,m])<-lambda0[i]+lambda1[i]*alpha[n,1,m]*Q[i,1]
          }
         }
        }*

Я не уверен, какой из них правильный. Есть ли другие (правильные ??) способы сделать это?

Другая проблема заключается в том, что когда я запускаю Jags вторым способом, я получаю ошибку «неизвестная переменная i» (которая относится к *) и я не знаю, как решить эту проблему. Я не могу использовать for (i in 1: I), потому что lo git применяется только тогда, когда i равен 1 ~ 9.

Пожалуйста, предоставьте мне любые отзывы или комментарии. Спасибо

...