我试图在R中调用以下jags模型:
model{
# Main model level 1
for (i in 1:N){
ficon[i] ~ dnorm(mu[i], tau)
mu[i] <- alpha[country[i]]
}
# Priors level 1
tau ~ dgamma(.1,.1)
# Main model level 2
for (j in 1:J){
alpha[j] ~ dnorm(mu.alpha, tau.alpha)
}
# Priors level 2
mu.alpha ~ dnorm(0,.01)
tau.alpha ~ dgamma(.1,.1)
sigma.1 <- 1/(tau)
sigma.2 <- 1/(tau.alpha)
ICC <- sigma.2 / (sigma.1+sigma.2)
}
这是一个分层模型,其中ficon是连续变量0-60,可能具有不同的平均值或按国家/地区分布。 N =总观测数(2244)和J =国家数(34)。当我运行此模型时,我不断收到以下错误消息:
Compilation error on line 5.
Subset out of range: alpha[35]
此代码较早使用,但现在无效。我认为问题是只有34个国家,这就是为什么它会被困在i = 35,但我不知道如何解决这个问题。欢迎任何建议!
我用来调用模型的R代码:
### input files JAGS ###
data <- list(ficon = X$ficon, country = X$country, J = 34, N = 2244)
inits1 <- list(alpha = rep(0, 34), mu.alpha = 0, tau = 1, tau.alpha = 1)
inits2 <- list(alpha = rep(1, 34), mu.alpha = 1, tau = .5, tau.alpha = .5)
inits <- list(inits1, inits2)
# call empty model
eqlsempty <- jags(data, inits, model.file = "eqls_emptymodel.R",
parameters = c("mu.alpha", "sigma.1", "sigma.2", "ICC"),
n.chains = 2, n.iter = itt, n.burnin = bi, n.thin = 10)
答案 0 :(得分:6)
要解决此问题,您需要重新编号您的国家/地区,以便它们只有1到34的值。如果您只有34个国家/地区,但是您收到了错误消息,那么其中一个国家/地区的值必须为35。要解决这个问题,可以在捆绑数据之前调用以下R代码:
x$country <- factor(x$country)
x$country <- droplevels(x$country)
x$country <- as.integer(x$country)
希望这有帮助