2017-10-19 83 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))))) 
    } 
} 

我使用的错误代码是:

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) 

其中Ndat是数据集的数量,p.y.是一个13 x n的矩阵,并且内核是:

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

任何帮助?

回答

0

理论上你可以在一个单一的BUGS模型中做第二个(外部)循环,然后将y和mu作为矩阵索引,你的系数作为矢量例如(未经测试):

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中的循环。如果您打算使用JAGS而不是WinBUGS,那么您可以在runjags包中查看半自动解决方案 - 即阅读本文的第2.9节:https://www.jstatsoft.org/article/view/v071i09

马特