我无法手动为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。是不是?
答案 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