2015-04-04 61 views
0

這篇文章涉及到我以前的文章(How to code a matrix in WinBUGS?)。爲新的問題道歉,因爲這是一個新問題。我收到錯誤multiple definitions of node ell[1,2]。我不知道如何解決它。以下是代碼和重現性數據集。Winbugs中節點ell [1,2]錯誤的多重定義

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不是一種編程語言 - 你不能在循環中使用這樣的常量。它是一種模型規範語言,它意味着每個變量只能被指定一次。您需要將該變量移出該循環以外,或將它們編入索引。