R中的DIC实现

时间:2017-04-23 02:20:34

标签: r mcmc jags

我无法手动为JAGS模型实施偏差信息标准

model = "
data{ 
  for(i in 1:n){
    zeros[i]<- 0
  }
}
model{
  C <- 10000
  for (i in 1:n) {
    zeros[i] ~ dpois(lambda[i])
    lambda[i] <- -l[i] + C
    l[i] <- 
      -0.5*log(sigma[i]*(y[i]*(1-y[i]))^3) + 
      -0.5*(1/sigma[i])*((y[i]-mu[i])^2)/(y[i]*(1-y[i])*mu[i]^2*(1-mu[i])^2)
    logit(mu[i]) <- beta0 + beta1*income[i] + beta2*person[i]
    log(sigma[i]) <- -delta0
  }
  Deviance <- -2*sum(l[])
  beta0 ~ dnorm(0,.001)
  beta1 ~ dnorm(0,.001)
  beta2 ~ dnorm(0,.001)
  delta0 ~ dnorm(0,.001)
}"

rjags包中有一个名为dic.samples()的函数返回DIC值,但问题是对于具有Poisson技巧的模型,它不起作用。

以下是我要实施的DIC code,但我不知道该怎么做

修改 如果我运行coda.samples并请求监视偏差节点,它将返回后验均值和标准差,然后我可以使用Gelman逼近来计算DIC到pD。是不是?

1 个答案:

答案 0 :(得分:0)

一个相关的问题:我无法从符合&#39; R2jags&#39;的模型中提取DIC。 package - dic.samples()和相关函数不起作用。

另外,因为我的模型同时计算了很多派生参数(我的预测变量的精细梯度上的结果变量),我无法使用记录的print()函数,因为它也有在DIC输出之前它被截断了很多文本。

解决方案在输出数据结构中花了一些时间,但非常简单。如果你符合你的模型:

    model.name <- jags(data=jag.data, inits=inits, parameters.to.save=parameters, model.file="modelfile.txt", n.thin=nt, n.chains=nc, n.burnin=nb, n.iter=ni, DIC=T, working.directory=getwd())

然后您可以通过以下方式调用pD和DIC值:

model.name$BUGSoutput$pD
model.name$BUGSoutput$DIC