Betrachten Sie das Diagramm unten, in dem ich Daten wie folgt simuliert habe. Wir betrachten ein binäres Ergebnis für das die wahre Wahrscheinlichkeit, 1 zu sein, durch die schwarze Linie angezeigt wird. Die funktionale Beziehung zwischen einer Kovariate und ist ein Polynom 3. Ordnung mit logistischer Verknüpfung (also in doppelter Hinsicht nicht linear). x p ( y o b s = 1 | x )
Die grüne Linie ist die logistische GLM-Regressionsanpassung, bei der als Polynom 3. Ordnung eingeführt wird. Die gestrichelten grünen Linien sind die 95% -Konfidenzintervalle um die Vorhersage , wobei die angepassten Regressionskoeffizienten sind. Ich habe und dafür verwendet.P ( y o b s = 1 | x , β ) βR
glm
predict.glm
In ähnlicher Weise ist die Prupellinie der Mittelwert des Seitenzahns mit einem zu 95% glaubwürdigen Intervall für eines Bayes'schen logistischen Regressionsmodells unter Verwendung eines einheitlichen Prior. Ich habe das Paket mit Funktion dafür verwendet (Einstellung gibt den einheitlichen nicht informativen Prior).MCMCpack
MCMClogit
B0=0
Die roten Punkte bezeichnen Beobachtungen im Datensatz, für die , die schwarzen Punkte sind Beobachtungen mit . Beachten Sie, dass wie bei der Klassifizierung / diskreten Analyse üblich aber nicht beobachtet wird.y o b s = 0 y p ( y o b s = 1 | x )
Mehrere Dinge können gesehen werden:
- Ich habe absichtlich simuliert, dass auf der linken Seite spärlich ist. Ich möchte, dass das Vertrauen und das glaubwürdige Intervall hier aufgrund des Mangels an Informationen (Beobachtungen) groß werden.
- Beide Vorhersagen sind links nach oben voreingenommen. Diese Verzerrung wird durch die vier roten Punkte verursacht, die Beobachtungen bezeichnen, was fälschlicherweise darauf hindeutet, dass die wahre funktionale Form hier hochgehen würde. Der Algorithmus hat nicht genügend Informationen, um zu schließen, dass die wahre Funktionsform nach unten gebogen ist.
- Das Konfidenzintervall wird erwartungsgemäß breiter, das glaubwürdige Intervall jedoch nicht . Tatsächlich umfasst das Konfidenzintervall den gesamten Parameterraum, wie es aufgrund fehlender Informationen sein sollte.
Es scheint, dass das glaubwürdige Intervall hier für einen Teil von falsch / zu optimistisch ist . Es ist wirklich unerwünscht, dass das glaubwürdige Intervall eng wird, wenn die Informationen spärlich werden oder vollständig fehlen. Normalerweise reagiert ein glaubwürdiges Intervall nicht so. Kann jemand erklären:
- Was sind Gründe dafür?
- Welche Schritte kann ich unternehmen, um ein glaubwürdigeres Intervall zu erreichen? (das heißt, eine, die mindestens die wahre funktionale Form einschließt oder besser so breit wird wie das Konfidenzintervall)
Code zum Abrufen von Vorhersageintervallen in der Grafik wird hier gedruckt:
fit <- glm(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
x_pred <- seq(0, 1, by=0.01)
pred <- predict(fit, newdata = data.frame(x=x_pred), se.fit = T)
plot(plogis(pred$fit), type='l')
matlines(plogis(pred$fit + pred$se.fit %o% c(-1.96,1.96)), type='l', col='black', lty=2)
library(MCMCpack)
mcmcfit <- MCMClogit(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
gibbs_samps <- as.mcmc(mcmcfit)
x_pred_dm <- model.matrix(~ x + I(x^2) + I(x^3), data=data.frame('x'=x_pred))
gibbs_preds <- apply(gibbs_samps, 1, `%*%`, t(x_pred_dm))
gibbs_pis <- plogis(apply(gibbs_preds, 1, quantile, c(0.025, 0.975)))
matlines(t(gibbs_pis), col='red', lty=2)
Datenzugriff : https://pastebin.com/1H2iXiew Dank @DeltaIV und @AdamO
dput
den Datenrahmen, der die Daten enthält, verwenden und dann die dput
Ausgabe als Code in Ihren Beitrag aufnehmen.