Saya mencoba memahami bagaimana dinterval () bekerja di JAGS untuk data yang disensor. Saya memodelkan data kasar di mana saya hanya memiliki batas atas dan bawah untuk setiap titik data (bukan nilai sebenarnya). Berikut adalah contoh sederhana tentang bagaimana saya pikir itu harus berfungsi:
Beberapa batas atas dan bawah untuk setiap titik:
> 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
Fungsi untuk menulis model (dengan asumsi data berasal dari normal dengan mean dan varian umum):
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)
Beberapa fungsi dan tugas untuk panggilan 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")
Dan jalankan model:
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")
Apa yang terjadi ketika saya menjalankan ini?
1) perkiraan mu melayang tepat di sekitar 0 padahal seharusnya 15
2) itu tidak akan berjalan jika DIC = BENAR:
kesalahan: "Kesalahan dalam jags.samples (model, variable.names, n.iter, thin, type =" trace ",: Gagal menyetel monitor jejak untuk penyimpangan simpul
Catatan: Saya dapat menjalankan model serupa di OpenBUGS dengan menghilangkan garis dinterval () dan menambahkan I (Bawah, Atas) ke dnorm.
sumber