2017-10-19 6 views
0

R2WinBUGSを使用していくつかのシミュレーションスタディを実行する方法を理解する上で問題があります。目的は、n個のデータセットをシミュレートすることです(1000を目標としますが、10から始まります)。それらをすべてR2WinBUGSコードに入れて、WinBUGSに移植すると、n個のデータセットの見積もりを実行します。R2WinBUGSでn個のデータセットのシミュレーションを実行

モデル::ここに私は現在持っているものです

model{ 
     alpha0 ~ dnorm(66.6, 0.01) 
     alpha1 ~ dnorm(0.3, 0.01) 
     alpha2 ~ dnorm(100, 0.01) 
     alpha3 ~ dnorm(0.2, 0.01) 
     beta0 ~ dnorm(35, 0.01) 
     beta1 ~ dnorm(80, 0.01) 
     tau ~ dgamma(0.3,1) 

    for(k in 1:Ndat) { 
     y[k] ~ dnorm(mu[k], tau) 
     mu[k] <- ((alpha0/(1 + exp(-alpha1*(28-beta0)))) + (alpha2/(1 + exp(-alpha3*(28-beta1))))) 
    } 
} 

私が使用してバグのコードは次のとおりです。

Ndatは、データセットの数、p.y.ある
grapedat.sim = bugs(data = list('Ndat' = Ndat, 'y' = p.y[,1]),inits, 
       model.file="H:/R coding/R2WinBUGS/multsimt1.bug", 
      parameters=c("alpha0","alpha1","alpha2","alpha3","beta0","beta1","tau"), 
       n.chains=1,n.iter=8000,n.sim = 6000, 
n.burnin=2000,n.thin=1, 
       bugs.directory="H:/WinBUGS14", 
       codaPkg=FALSE, 
       debug = T) 

は13×n行列であり、以下のようになります。

inits <- function(){ 
    list(alpha0=70, alpha1=0.4, tau=0.15, alpha2=105, alpha3=0.25,beta0 = 
    40, beta1 = 85) 
    } 

助けが必要ですか?

答えて

0

理論的には、2番目の(外側の)ループを作成し、次にyとmuを行列としてインデックス付けし、ベクトルとして係数を1つのBUGSモデルで行うことができます。 (未テスト):

model{ 
    for(d in 1:n){ 
     alpha0[d] ~ dnorm(66.6, 0.01) 
     alpha1[d] ~ dnorm(0.3, 0.01) 
     alpha2[d] ~ dnorm(100, 0.01) 
     alpha3[d] ~ dnorm(0.2, 0.01) 
     beta0[d] ~ dnorm(35, 0.01) 
     beta1[d] ~ dnorm(80, 0.01) 
     tau[d] ~ dgamma(0.3,1) 

     for(k in 1:Ndat) { 
     y[k,d] ~ dnorm(mu[k,d], tau[d]) 
     mu[k,d] <- ((alpha0[d]/(1 + exp(-alpha1[d]*(28-beta0[d])))) + 
        (alpha2[d]/(1 + exp(-alpha3[d]*(28-beta1[d]))))) 
     } 
    } 
} 

これがためになんとかはn = 10しかしので、一般的に、あなたの問題に良い解決策はないのn = 1000のために非常に扱いにくいことがあります。代わりに、R内のループを使用して、独立した各データセット/モデルを実行します。WinBUGSの代わりにJAGSを使用する場合は、runjagsパッケージで半自動化されたソリューションをチェックアウトできます。 :https://www.jstatsoft.org/article/view/v071i09

マット

関連する問題