2015-04-04 4 views
0

Это сообщение связано с моим предыдущим сообщением (How to code a matrix in WinBUGS?). Извиниться за новую, поскольку это новая проблема. Я получаю ошибку multiple definitions of node ell[1,2]. Я не знаю, как это исправить. Вот код и набор данных для воспроизводимости.Несколько определений ошибки узла ell [1,2] в Winbugs

model { 
    #likelihood 
    for(j in 1 : Nf){ 
    p1[j, 1:2 ] ~ dmnorm(gamma[1:2], T[1:2 ,1:2]) 
    for (i in 1:2){ 
     logit(p[j,i]) <- p1[j,i] 
     Y[j,i] ~ dbin(p[j,i],n) 
    } 

    X_mu[j,1]<-p[j,1]-mean(p[,1]) 
    X_mu[j,2]<-p[j,2]-mean(p[,2]) 

    v1<-sd(p[,1])*sd(p[,1]) 
    v2<-sd(p[,2])*sd(p[,2]) 
    v12<-(inprod(X_mu[j,1],X_mu[j,2]))/(sd(p[,1])*sd(p[,2])) 

    sigma[1,1]<-v1 
    sigma[1,2]<-v12 
    sigma[2,1]<-v12 
    sigma[2,2]<-v2 
    sigmaInv[1:2, 1:2] <- inverse(sigma[,]) 

    T1[j,1]<-inprod(sigmaInv[1,],X_mu[j,1]) 

    T1[j,2]<-inprod(sigmaInv[2,],X_mu[j,2]) 

    ell[j,1]<-inprod(X_mu[j,1],T1[j,1]) 
    ell[j,2]<-inprod(X_mu[j,2],T1[j,2]) 

    } 

    #priors 
    gamma[1:2] ~ dmnorm(mn[1:2],prec[1:2 ,1:2]) 
    expit[1] <- exp(gamma[1])/(1+exp(gamma[1])) 
    expit[2] <- exp(gamma[2])/(1+exp(gamma[2])) 
    T[1:2 ,1:2] ~ dwish(R[1:2 ,1:2], 2) 
    sigma2[1:2, 1:2] <- inverse(T[,]) 
    rho <- sigma2[1,2]/sqrt(sigma2[1,1]*sigma2[2,2]) 
} 

# Data 
list(Nf =20, mn=c(-0.69, -1.06), n=60, 
    prec = structure(.Data = c(.001, 0, 0, .001),.Dim = c(2, 2)), 
    R = structure(.Data = c(.001, 0, 0, .001),.Dim = c(2, 2)), 
    Y= structure(.Data=c(32,13, 
          32,12, 
          10,4,    
          28,11,     
          10,5,     
          25,10, 
          4,1, 
          16,5, 
          28,10, 
          21,7, 
          19,9, 
          18,12, 
          31,12, 
          13,3, 
          10,4, 
          18,7, 
          3,2, 
          27,5, 
          8,1, 
          8,4),.Dim = c(20, 2))) 

ответ

1

В вашем for(j in 1:Nf) цикле вы определили ряд переменных (v1, v2, v12, сигмы и т.д.), но они не имеют индекс J, то есть вы пытаетесь определить их несколько раз. Помните, что BUGS не является языком программирования - вы не можете иметь такую ​​константу внутри цикла. Это язык спецификации модели, который означает, что каждая переменная может быть указана только один раз. Вам нужно переместить переменные за пределы этого цикла или проиндексировать их.

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