Ich bin neu in JAGS und versuche zu verstehen, wie dinterval() in JAGS für zensierte Daten funktioniert. Ich modelliere grobe Daten, bei denen ich nur obere und untere Grenzen für jeden Datenpunkt habe (nicht den wahren Wert). Hier ist ein einfaches Beispiel, wie ich denke, dass es funktionieren sollte:
Einige obere und untere Grenzen für jeden Punkt:
> 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
Eine Funktion zum Schreiben des Modells (unter der Annahme, dass die Daten aus einer Normalverteilung mit einem gemeinsamen Mittelwert und einer Varianz stammen):
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)
Einige Funktionen und Zuweisungen für den jags-Aufruf:
data <- list("lim"=lim)
inits <- list(mu=rnorm(1),tau=rgamma(1,.01,.01),t=as.vector(apply(lim,1,mean)))
# Der letzte Teil stellt sicher, dass der Startwert zwischen der oberen und unteren Grenze liegt
# Jede Kette wird am gleichen Ort für t starten, aber das ist nur für diesen Fall
params <- c("mu","tau")
Und führe das Modell aus:
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")
Was passiert, wenn ich das ausführe?
1) meine Schätzung für mu pendelt genau um 0, wenn es 15 sein sollte
2) es wird nicht ausgeführt, wenn DIC=TRUE ist:
Fehler: "Error in jags.samples(model, variable.names, n.iter, thin, type = "trace", : Failed to set trace monitor for node deviance
Ich bin sicher, dass ich etwas Dummes mache und würde es schätzen, wenn mir jemand helfen könnte, mich wieder auf Kurs zu bringen.
1 Stimmen
Auch wenn ich dies in OpenBUGS modelliere und ihre I(Niedriger, Oberer) Funktion verwende, scheint es gut zu funktionieren.
0 Stimmen
Ich bin mir nicht sicher, wie viele von uns mit statistischer Physik arbeiten. Dies könnte eine der wenigen Situationen sein, in denen ein Cross-Posting auf stats.stackexchange.com eine gute Idee wäre. Alternativ könnten Sie den Paketautor kontaktieren oder sehen, ob es eine Mailingliste für das Paket gibt.