我刚接触JAGS并且正在处理一篇文章中提到的模型,文章链接为this paper。看起来作者使用的是JAGS的旧版本,与BUGS更为接近,因为在模型块(第28-29行)中出现了以下内容:
z[i,1:(K-1)] ~ dmnorm(etas[i,], omega)
z[i,K] <- 0
JAGS报错如下:
Error in setParameters(init.values[[i]], i) : Error in node z[1,4]
Cannot overwrite value of observed node
检查JAGS手册,错误是显而易见的。在A.4数据转换部分中,它指出BUGS允许在关系左侧两次放置随机节点。作为解决方法,它建议将数据转换包含在单独的data
块中。但仍然失败。
有人尝试复制此工作并获得成功吗? 有任何提示吗?
下面是完整的JAGS模型。可疑赋值为z[i,K] <- 0
和beta[j,K] <- 0
data {
for (j in 1:(K-1)) {
for (i in 1:N) {
ones[i,j] <- 1
}
for (k in 1:K) {
C[j,k] <- equals(j,k) - equals(k,K)
}
}
R <- (K-1) * C %*% t(C)
lower <- -1e+3
upper <- 1e+3
}
model {
for (i in 1:N) {
for (k in 1:(K-1)) {
bounds[i,k,1] <- equals(y[i,k],K)*lower + inprod(z[i,], equals(y[i,],y[i,k] + 1))
bounds[i,k,2] <- equals(y[i,k],1)*upper + inprod(z[i,], equals(y[i,],y[i,k] - 1))
ones[i,k] ~ dinterval(z[i,k], bounds[i,k,])
etas[i,k] <- inprod(x[i,], beta[,k])
}
z[i,1:(K-1)] ~ dmnorm(etas[i,], omega)
z[i,K] <- 0
}
for (j in 1:(P+1)) {
for (k in 1:(K-1)) {
beta[j,k] ~ dnorm(0,1e-3)
}
beta[j,K] <- 0
for (k in 1:K) {
for (t in 1:K) {
beta.identified[j,k,t] <- (beta[j,k] - beta[j,t])*sqrt(const)
}
}
}
omega ~ dwish(R, K-1)
sigma <- inverse(omega)
const <- pow(K/exp(logdet(sigma)), 1/K)
sigma.identified <- sigma*const
}