Winbugs中具有相关性和复杂性的随机截距和斜率模型

时间:2020-07-20 04:39:24

标签: winbugs

我试图在WinBUGS中实现误差范围内复杂的随机截距和斜率。我得到了“预期的多元节点”。这是带有错误消息的示例代码。任何帮助将非常感激。请让我知道是否需要进一步说明。

model { 
  for (i in 1:N) {
    y[i,1:2] ~ dnorm(mu[i,1:2],prec[i,1:2])
    mu[i,1] <- alpha[1] + beta[1]*(wave[i]-1) + b[id[i],1] + u[id[i],1]*(wave[i]-1)
    mu[i,2] <- alpha[2] + beta[2]*(wave[i]-1) + b[id[i],2] + u[id[i],2]*(wave[i]-1)
    prec[i,1] <- 1 / exp(delta1[1] + delta2[1] * (wave[i]-1) + b[id[i], 3])
    prec[i,2] <- 1 / exp(delta1[2] + delta2[2] * (wave[i]-1) + b[id[i], 4])
 
  }
 
     alpha[1] ~ dnorm(0,0.000001)
     alpha[2] ~ dnorm(0,0.000001)
     beta[1]  ~ dnorm(0,0.000001)
     beta[2]  ~ dnorm(0,0.000001)
     delta1[1]  ~ dnorm(0,0.000001)
     delta1[2]  ~ dnorm(0,0.000001)
     delta2[1]  ~ dnorm(0,0.000001)
     delta2[2]  ~ dnorm(0,0.000001)
 
for (i in 1:Nid) { 
    b[i,1:4] ~ dmnorm(m1[1:4], prec1[1:4,1:4])
    u[i,1:2] ~ dmnorm(m2[1:2], prec2[1:2,1:2])
 }

# Priors for random terms
 prec1[1:4,1:4] ~ dwish(R1[1:4,1:4], 4)
 sigma1[1:4,1:4] <- inverse(prec1[1:4,1:4])
 R1[1,1] <- 0.00001 
 R1[2,2] <- 0.00001
 R1[3,3] <- 0.00001   
 R1[4,4] <- 0.00001    
 R1[1,2] <- 0    
 R1[1,3] <- 0 
 R1[1,4] <- 0   
 R1[2,3] <- 0  
 R1[2,4] <- 0  
 R1[3,4] <- 0  
 S1[1:4,1:4] <- inverse(prec1[1:4,1:4])
 
 prec2[1:2,1:2] ~ dwish(R1[1:2,1:2], 2)
 sigma2[1:2,1:2] <- inverse(prec2[1:2,1:2])
  R2[1,1] <- 0.0001   
  R2[2,2] <- 0.0001   
  R2[1,2] <- 0    
  R2[2,1] <- 0 
  S2[1:2,1:2] <- inverse(prec2[1:2,1:2])
 

}
}}

1 个答案:

答案 0 :(得分:0)

我认为问题实际上出在第一个for()循环的第一行:

    y[i,1:2] ~ dnorm(mu[i,1:2],prec[i,1:2])

您在这里说的是i的第y行的前两列都有分布。分布必须具有与值一样多的维度,因此WinBUGS在这里寻找一个双变量节点(~dmnorm(mu[i,1:2], prec[1:2,1:2]))。或者,您可以将它们分开:

y[i,1] ~ dnorm(mu[i,1], prec[i,1])
y[i,2] ~ dnorm(mu[i,2], prec[i,2])
相关问题