R语言 如何更正错误:运行时间错误:第4行出现编译错误,索引超出了y的子集范围

iqjalb3h  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(131)

我已经使用rjags构建了一个线性回归模型,但是我收到一个运行时错误,说索引超出范围。我已经在网上寻找建议,但是找不到任何我理解或解决这个确切问题的东西。
下面是我的代码:

modelstring1= "
model{
  for (i in 1:n) {
    y[i] ~ dnorm(mu[i], prec)
    mu[i] = b[1] + b[2]*lnimi[i]
  }
  
  for (j in 1:2) {
    b[j] ~ dnorm(0.0, 1.0/1.0E6)
  }
  
  prec ~ dgamma(20.0/2, 20.0*10.0/2)
  sig2 = 1.0 / prec
  sig = sqrt(sig2)
}"

jags_data1 = list(y=Reisby["hd"], n=nrow(Reisby))

params1 = c("b", "sig")

inits1 = function() {
  inits = list("b"=rnorm(2.0, 0.0, 100.0), "prec"=rgamma(1, 1.0, 1.0))
}

model1 = jags.model(textConnection(modelstring1), data=jags_data1, inits = inits1)

错误是:
正在编译模型图
解析未声明的变量
删除模型
jags.模型中出错(文本连接(模型字符串1),数据= jags_data1,初始化=初始化1):
运行时间错误:
第4行编译错误。
索引超出范围,占用y的子集
我看到的最接近的建议是mu范围太小,但我真的不明白这是为什么这里的问题。不确定Reisby数据中的"lnimi"字段是否需要在任何地方指定,因为它包含在mu [I]语句中?

bq3bfh9z

bq3bfh9z1#

感谢所有评论的人,我现在有了一个工作模型!最后的代码是:

modelstring1= "
model{
  for (i in 1:n) {
    y[i] ~ dnorm(mu[i], prec)
    mu[i] = b[1] + b[2]*lnimi[i]
  }
  
  for (j in 1:2) {
    b[j] ~ dnorm(0.0, 1.0/1.0E6)
  }
  
  prec ~ dgamma(20.0/2, 20.0*10.0/2)
  sig2 = 1.0 / prec
  sig = sqrt(sig2)
}"

jags_data1 = list(y=Reisby_df$hd, lnimi=Reisby_df$lnimi, n=nrow(Reisby))

model1 = jags.model(textConnection(modelstring1), data=jags_data1, inits = inits1, n.chains = 2)

相关问题