J'essaie de comprendre comment dinterval () fonctionne dans JAGS pour les données censurées. Je modélise des données grossières où je n'ai que des limites supérieures et inférieures pour chaque point de données (pas la vraie valeur). Voici un exemple simple de la façon dont je pense que cela devrait fonctionner:
Quelques limites supérieures et inférieures pour chaque point:
> 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
Une fonction pour écrire le modèle (en supposant que les données proviennent d'une normale avec une moyenne et une variance communes):
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)
Quelques fonctions et affectations pour l'appel 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")
Et exécutez le modèle:
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")
Que se passe-t-il lorsque je lance ceci?
1) mon estimation de mu oscille autour de 0 alors qu'il devrait être de 15
2) il ne fonctionnera pas si DIC = TRUE:
error: "Erreur dans jags.samples (model, variable.names, n.iter, thin, type =" trace ",: impossible de définir le moniteur de trace pour la déviance du nœud
Remarque: je peux obtenir un modèle similaire en cours d'exécution dans OpenBUGS en omettant la ligne dinterval () et en ajoutant I (Lower, Upper) à dnorm.
la source