4

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)
4

1 に答える 1

9

この問題を解決するには、国の番号を付け直して、値が 1 から 34 だけになるようにする必要があります。34 か国しかないのに、指定したエラー メッセージが表示される場合は、いずれかの国の値が 35 である必要があります。これを解決するにはデータをバンドルする前に、次の R コードを呼び出すことができます。

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

お役に立てれば

于 2014-04-30T14:55:28.693 に答える