0

私は入門ベイジアン分析コースのプロジェクトに取り組んでおり、R を定期的に使用するのもかなり初めてです。見つけた、またはまとめたデータセットを使用して、階層モデルを構築することになっています。私はデータセットをまとめて、ある国の社会的自由とその富がその幸福にどの程度影響するかという問題を分析しました。データセットは次のようになります。

      Country Country.ID Year Happiness.Score   GDP.PPP Status
1 Afghanistan          1 2015           3.575  1766.593      1
2 Afghanistan          1 2016           3.360  1757.023      1
3 Afghanistan          1 2017           3.794  1758.466      1
4     Albania          2 2015           4.959 10971.044      2
5     Albania          2 2016           4.655 11356.717      2
6     Albania          2 2017           4.644 11803.282      2

ステータスはフリーダム ハウスを整数に変換したもので、1自由でない、2部分的に自由、3自由な社会を意味します。私の最初のモデルでは、GDP データを追加したくありません。

クラスで見た例と同じように見えるコードをまとめましたが、問題が発生しました。修正方法がわかりません。

リストの作成からモデリング、事前確率の設定、jagsコマンドの実行まで、すべてを設定する方法は次のとおりです。

#Making lists and assigning loop numbers
Num.Obs <- 460
Country <- impute.set1[,2]
Year <- impute.set1[,3]
Happiness.Score <- impute.set1[,4]
GDP.PPP <- impute.set1[,5]
Status <- unique(impute.set1[,6])
Num.Status <- 3

#Modeling
model1 <- function(){
  #Data Model
  for (i in 1:Num.Obs){
    #Observations at Country Level
    Happiness.Score[i] ~ dnorm(mu[i], tau.Happiness.Score)
    #Random Intercept and slope(alpha is intercetp, beta1 of country and time)
    mu[i] <- alpha[Country[i]] + beta1[Country[i]]*Year[i]
  }
  #Priors
  for (j in 1:Num.Status){
    alpha[j] ~ dnorm(mu.alpha, tau.alpha)
    beta1[j] ~ dnorm(mu.beta1[Status[j]], tau.beta1)
  }
  mu.alpha ~ dnorm(0, 0.01)
  tau.alpha ~ dnorm(0, 0.01)
  sigma.alpha ~ dunif(0, 10)

  mu.beta1[1] ~ dnorm(0, 0.01)
  mu.beta1[2] ~ dnorm(0, 0.01)
  mu.beta1[3] ~ dnorm(0, 0.01)
  tau.beta1 ~ dnorm(0, 0.01)
  sigma.beta1 ~ dunif(0, 10)

  tau.Happiness.Score ~ dnorm(0, 0.01)
  sigma.Happiness.Score ~ dnorm(0, 0.01)
}

#Listing my lists and parameters I want to save for final use
MyVars1data <- list(Country=Country, Year=Year, Status=Status, Happiness.Score=Happiness.Score,
                    Num.Obs=Num.Obs, Num.Status=Num.Status)
params <- c("mu.alpha", "mu.beta1[1]", "mu.beta1[2]", "mu.beta1[3]", "sigma.Happiness.Score")

#Implement Jags
m1 <- jags(MyVars1data,
           model.file = model1,
           parameters.to.save = params,
           n.chains = 3,
           inits = NULL,
           n.iter = 10000,
           n.burnin = 5000,
           progress.bar = "text")

次のようなエラーが発生します。

Error in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains,  : 
  RUNTIME ERROR:
Compilation error on line 5.
Index out of range taking subset of  alpha

私のデータセットには 460 の観測値があります。私は作成したループを調べていますがi、1 から 460 に移動する必要があると思います。エラーはここにあると思います:mu[i] <- alpha[Country[i]] + beta1[Country[i]]*Year[i]間違った場所を見ているのでしょうか?

誰でもこれをデバッグするのを手伝ってもらえますか? どんな助けでも大歓迎です。

4

0 に答える 0