2016-07-18 21 views
0

JAGS/OpenBUGSの新機能ですので、モデルを指定する際に正しい方向に押していただきたいと思います。私は、この場合、12年が選ばれた15年以上の103カ国でまとめられた不均衡な縦断データを使用しています。 DVはGini係数ですが、これはモデルをlog-Normalにするのではなく、むしろBetaにするべきですが、今はJAGSでモデルをコンパイルする方法を理解するだけです。私は当面固定効果モデルを使用しています。私が実行しているJAGSを使用した階層的な階層的ベイジアン回帰

データやコード:

> head(x) 
      Year  II2  II3  II4  ..... II24 
1   1  2.956233 40.90458 4.475183  16.443553 
8   1  1.257794 85.47378 2.395186  19.333433 
19   1  4.139706 141.07899 2.544640  25.555404 
37   1  2.233664 98.51313 3.902835  42.533333 
49   1  2.879734 61.39000 1.471334  18.884444 
71   1  3.381762 60.23783 3.432614  16.334222 


> head(y) 
     Year  II1 
1   1  0.3240000 
8   1  0.2576667 
19  1  0.3132500 
37  1  0.2700000 
49  1  0.2744286 
71  1  0.3250000 

dim(x) 
1224 23 

length(y) 
1224 

Time <- 12, N <- length(y$II1)#No. of Obs. 

dat <- list(x=x, y=y, N=N, Time=Time, p=dim(x)[2]), 
inits <- funtion(){list(tau.1=1, tau.2=1, eta=1, alpha=0, beta1=0, beta2=0, beta3=0)} 

model6 <- "model{ 
for(i in 1:N){for(t in 1:Time){ 
y[i,t]~dlnorm(mu[i,t],tau.1) 
mu[i,t] <- inprod(x[i,t],beta[])+alpha[i]} 
alpha[i]~dnorm(eta, tau.2)} 

for (j in 1:p) { 
b[j]~dnorm(0,0.001) 
} 

eta~dnorm(0, 0.0001) 
tau.2~dgamma(0.01,0.01) 
tau.1~dgamma(0.01,0.01) 


}" 

reg.jags <- jags.model(textConnection(model), data=dat, inits=inits, n.chains=1, n.adapt=1000) 

をそして私は、このランタイムエラーを取得しておいてください。私は違った何をすべきかについて

Error in jags.model(textConnection(model), data = dat, inits = inits, : 
RUNTIME ERROR: 
Compilation error on line 3. 
Index out of range taking subset of y 

任意の提案は非常に高く評価されるだろう!私は不均衡なデータに適用できる3つの "トリック"があることを知っていますが、私はまだこのすべてがどのように働いているのか、少し混乱しています。 JAGSがデータ入力をどのように読み込むか。

乾杯

J

+0

モデルのどこにでも「yy」が表示されません。これが正しいコードとエラーメッセージだと確信していますか? また、あなたのモデルに 'xx'がありますが、' xx'という名前の変数をデータブロックのジャグに渡さないで、 'x'という名前の変数を渡します。 –

+0

@JacobSocolar:私はsomの変更を加えたので、コードを少し編集しました。変更が賢明だったかどうかはわかりませんが、少なくともコードはきれいにカットされていて、タイプミスがないと思います。私はまだ同じコンパイルエラーを取得します。 – Nesvold

答えて

0

あなたのデータフレームyのみ2列があります。しかし、あなたは、ループ内

y[i,t]~dlnorm(mu[i,t],tau.1) 

を有する場合Timeが12である

for(t in 1:Time){ 

tは(= 12 Timeへ向かう途中で)3に上がるときに何が起こるかを考えます。

あなたは存在しないy [i、3]を見るようにJAGSに依頼しています。したがって、「範囲外のインデックス」。

+0

コメントありがとう@Jacob。私はそれを持っていなければならないと考えましたが、どのフォーマットでデータを取り込むべきか正確にはわかりません。どうすればいいですか? – Nesvold

+0

私は、あなたのdata.frameの 'y'に' y $ Year'が1から12までの整数値をとっていると仮定しています。 1) '; mu [i] < - inprod(x [i、y [1、i]]、beta [])+ alpha [i]} ' なお、あなたが望むものである「観察」「私」です。 –

+0

あなたのコメント@Jacobに感謝します。私はあなたのロジックを使用し、それを最後に実行させた。しかし、それが正しく指定されているかどうかわからない、私はそれを行ったときに、ベータ回帰のスクリプトを投稿してください。 – Nesvold