我正在用R写一个使用R2OpenBUGS的程序。代码在底部给出。运行时会出现以下错误-
model is syntactically correct
data loaded
expected multivariate node
model must have been compiled but not updated to be able to change RN generator
BugsCmds:NoCompileInits
BugsCmds:NoCompileInits
BugsCmds:NoCompileInits
model must be compiled before generating initial values
model must be initialized before updating
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before monitors used
model must be initialized before DIC can be monitored
model must be initialized before updating
model must be initialized before monitors used
DIC monitor not set请帮我改正密码-
下面是OpenBUGS代码。
## BUGS Model
model {
# model for joint distribution of nuhat
nuhat[1:m]~dmnorm(mean[], B[,])
for(i in 1:m){
mean[i]<-mu
}
B[1:m,1:m]<-SIGMA[1:m,1:m]+tau2*inverse(C[1:m,1:m])
C[1:m,1:m]<-DW[1:m,1:m]-rho*W[1:m,1:m]
# priors on parameters
mu~dunif(-5,5)
rho~dunif (-1,1)
tau2~dunif (0, 1000)
}
## Data
list(m=5, nuhat=c(-0.228352281,-0.290119586,-0.211553228,-0.252395328,-0.263358489),
SIGMA=structure(.Data=c( 1.451677,0,0,0,0,
0,1.578091,0,0,0,
0,0,1.386538,0,0,
0,0,0,1.484578,0,
0,0,0,0,1.500409), .Dim=c(5,5)),
DW=structure(.Data=c(2,0,0,0,0,
0,2,0,0,0,
0,0,3,0,0,
0,0,0,2,0,
0,0,0,0,1), .Dim=c(5,5)),
W=structure(.Data=c(0,1,1,0,0,
1,0,0,1,0,
1,0,0,1,1,
0,1,1,0,0,
0,0,1,0,0), .Dim=c(5,5)))
## Inits
list(mu=-1,tau2=1,rho=0.5)发布于 2014-06-02 08:25:04
OpenBUGS不允许为确定性节点分配矩阵,就像为随机节点分配矩阵一样。例如(暂时忘了模型中的B、SIGMA和DW实际上是什么),
B[1:m, 1:m] ~ dwish(SIGMA[,], 5)很好,但是
B[1:m, 1:m] <- SIGMA[,] + DW[,]似乎不起作用。相反,您必须创建一个循环来分配矩阵的每个元素。
for(i in 1:m){
for(i in 1:m){
B[i, j] <- SIGMA[i, j] + DW[i, j]
}
}代码中的inverse转换(这是B计算的一部分)不能按元素进行,因此必须超出为确定性矩阵元素赋值的任何循环。
考虑到这两条规则,如果您重新表示为:
model {
# model for joint distribution of nuhat
nuhat[1:m]~dmnorm(mean[], B[,])
for(i in 1:m){
mean[i]<-mu
}
for(i in 1:m){
for(j in 1:m){
B[i,j] <- SIGMA[i,j] + tau2*invC[i,j]
C[i,j] <- DW[i,j] - rho*W[i,j]
}
}
invC[1:m,1:m]<-inverse(C[1:m,1:m])
# priors on parameters
mu~dunif(-5,5)
rho~dunif (-1,1)
tau2~dunif (0, 1000)
} https://stackoverflow.com/questions/23968710
复制相似问题