Tôi đang cố gắng hiểu cách dinterval () hoạt động trong JAGS cho dữ liệu bị kiểm duyệt. Tôi đang mô hình hóa dữ liệu thô trong đó tôi chỉ có giới hạn trên và dưới cho mỗi điểm dữ liệu (không phải giá trị thực). Đây là một ví dụ đơn giản về cách tôi nghĩ nó nên hoạt động:
Một số giới hạn trên và dưới cho mỗi điểm:
> 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
Một hàm để viết mô hình (giả sử dữ liệu đến từ bình thường với trung bình và phương sai chung):
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)
Một số chức năng và bài tập cho cuộc gọi 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")
Và chạy mô hình:
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")
Điều gì xảy ra khi tôi chạy này?
1) ước tính của tôi về mu dao động ngay khoảng 0 khi nó phải là 15
2) nó sẽ không chạy nếu DIC = TRUE:
lỗi: "Lỗi trong jags.samples (model, biến.names, n.iter, thin, type =" dấu vết ",: Không thể đặt màn hình theo dõi cho độ lệch nút
Lưu ý: Tôi có thể nhận được một mô hình tương tự đang chạy trong OpenBUGS bằng cách bỏ qua dòng dinterval () và nối thêm I (Lower, Upper) vào dnorm.