我希望在JAGS中使用贝叶斯潜类模型,但我遇到了一个问题,我正在寻求帮助来解决。
我试图拟合的模型如下所述(模型详情可在https://www.jstatsoft.org/article/view/v061i13/v61i13.pdf找到)。 (我知道我可以使用这个软件包,但是,我正试图在JAGS中手动编写代码,因为我要添加与BayesLCA不兼容的额外模型复杂性。)
我的JAGS尝试此模型如下。 $ n $,$ ng $,$ nm $分别表示观察数量,潜在群体数量和调查回复数量。看起来我在这段代码中有一个有向循环(x-> pi_norm-> group-> x),但我无法弄清楚如何避免这种情况。
数据和R脚本:
x = matrix(0, nrow = 40, ncol = 4)
x[1:10,1] <- 1
x[11:20,2] <- 1
x[21:30,3] <- 1
x[31:40,4] <- 1
ng = 4
nm = dim(x)[2]
n = dim(x)[1]
jags.data = list("x" = x, "n" = n, "ng" = ng, "nm" = nm)
jags <- jags.model("model1.bug",
data = jags.data,
n.chains = 1,
n.adapt = 1000)
samples <- coda.samples(model = jags,
variable.names = c("pi_norm", "theta"),
n.iter = 2000,
thin = 1)
Jags模特:
model{
# prior specification
tau[1:ng] ~ ddirch(rep(1,ng))
for (g in 1:ng) {
for (m in 1:nm) {
theta[g, m] ~ dunif(0,1)
}
}
#likelihood specification
for (i in 1:n) {
for (g in 1:ng){
p[i, g, 1:nm] <- (theta[g, 1:nm]^x[i, 1:nm])*(1-theta[g, 1:nm])^(1-x[i, 1:nm]) # p(X_im|theta_gm)
pi[i, g] <- prod(p[i, g, ]*tau[]) # p(X_i|theta_g)
pi_norm[i, g] <- pi[i, g]/sum(pi[i, ]) # normalise
}
group[i] ~ dcat(pi_norm[i, 1:ng]) # equivalent to multinomial
for (m in 1:nm) {
x[i, m] ~ dbern(theta[group[i], m])
}
}
}
我获得的错误如下。
Error in jags.model("model1.bug", data = jags.data, n.chains = 1, n.adapt = 1000) :
RUNTIME ERROR:
Unable to resolve the following parameters:
pi[1,1:4] (line 20)
pi[2,1:4] (line 20)
...
pi[40,1:4] (line 20)
pi_norm[1,1:4] (line 23)
pi_norm[2,1:4] (line 23)
pi_norm[3,1:4] (line 23)
pi_norm[4,1:4] (line 23)
任何帮助都会非常感激。