我是 JAGS 的新手,正在尝试了解 dinterval() 如何在 JAGS 中用于审查数据。我正在对粗略数据进行建模,其中每个数据点只有上限和下限(不是真实值)。这是我认为它应该如何工作的一个简单示例:
每个点的一些上限和下限:
> head(lim)
L U
[1,] 14.98266 15.68029
[2,] 21.21827 21.91590
[3,] 18.34953 19.04716
[4,] 19.00186 19.69949
[5,] 15.39891 16.09654
[6,] 17.81705 18.51468
编写模型的函数(假设数据来自具有共同均值和方差的法线):
playmodel <- function(){
for (i in 1:50){
is.censored[i] ~ dinterval(t[i], lim[i,])
t[i] ~ dnorm(mu,tau)
}
mu ~ dnorm(0,.001)
tau ~ dgamma(.01,.01)
}
filename <- "toymod.bug"
write.model(toymod,filename)
jags 调用的一些函数和分配:
data <- list("lim"=lim)
inits <- list(mu=rnorm(1),tau=rgamma(1,.01,.01),t=as.vector(apply(lim,1,mean)))
#last part is to ensure the starting value is between the upper and lower limit
#each chain will start at the same place for t but this is just for this case
params <- c("mu","tau")
并运行模型:
playmodel.jags <- jags(data,inits, params, model.file="toymod.bug", n.chains=3,
n.iter=50000,n.burnin=30000, n.thin=1, DIC=TRUE,
working.directory=NULL,refresh = 50000/50, progress.bar = "text")
当我运行它时会发生什么?
1) 我对 mu 的估计在 15 左右徘徊在 0 左右
2) 如果 DIC=TRUE,它将不会运行:
错误:“jags.samples 中的错误(模型,variable.names,n.iter,thin,type = “trace”,:无法为节点偏差设置跟踪监视器
我确信我在做一些愚蠢的事情,如果有人能帮助我走上正轨,我将不胜感激。