r - 错误消息 JAGS 子集超出范围

标签 r bayesian jags

我试图在 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)

最佳答案

要解决这个问题,您需要对您的国家/地区重新编号,以便它们只有 1 到 34 的值。如果您只有 34 个国家/地区,但您收到了您指出的错误消息,那么其中一个国家/地区的值必须为 35。要解决这个问题可以在捆绑数据之前调用以下 R 代码:

x$country <- factor(x$country)
x$country <- droplevels(x$country)
x$country <- as.integer(x$country)

希望这可以帮助

关于r - 错误消息 JAGS 子集超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393402/

相关文章:

r - 线性回归中的残差是否遵循原始数据框行的相同顺序?

r - 在 R 中取消列出并保留完整的列表名称

java - 查找哈希集中每个单词在文本文档中出现的次数

c# - 集成学习,多分类器系统

r - JAGS,rjags : "Error in file(modfile, "rt") : cannot open the connection"

r - 在word文档中制作横向表格

r - MuMin 与具有 3 级响应变量的 multinom (nnet) 对象的兼容性不好?

python - PyMC:利用 Adaptive Metropolis MCMC 中的稀疏模型结构

r - 将 WinBUGS 模型转换为 JAGS(使用 R)

r - 无法提取 DIC