在R2WinBUGS中为n个数据集运行模拟研究

时间:2017-10-19 04:03:47

标签: r winbugs r2winbugs

我在解决如何使用R2WinBUGS进行一些模拟研究时遇到了问题。目的是模拟n个数据集(目标为1000,但从10开始),并将它们作为矩阵放入R2WinBUGS代码中,这样当它移植到WinBUGS时,它将生成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)
  }

任何帮助?

1 个答案:

答案 0 :(得分:0)

理论上,你可以在单个BUGS模型中通过第二个(外部)循环,然后将y和mu作为矩阵索引,并将系数作为矢量,例如(另):

<div class="container">
      <p class="triage"><mat-icon>assignment_ind</mat-icon></p>
      <p class="O2"><img src="../../assets/med_O2.png"></p>
  </div>

这对于n = 10是可行的,但是对于n = 1000将是非常笨重的,因此通常不是解决问题的好方法。相反,我会独立运行每个数据集/模型,循环在R中。如果您打开使用JAGS而不是WinBUGS,那么您可以在runjags包中查看半自动解决方案 - 即阅读本文第2.9节:Signed APK generation

马特