Considera la trama sotto in cui ho simulato i dati come segue. Osserviamo un risultato binario per il quale la vera probabilità di essere 1 è indicata dalla linea nera. La relazione funzionale tra covariata e è 3 ° polinomio di ordine con il collegamento logistico (in modo che non è lineare in un doppio senso). x p ( y o b s = 1 | x )
La linea verde è la regressione logistica GLM in cui viene introdotto come polinomio di terzo ordine. Le linee verdi tratteggiate sono gli intervalli di confidenza del 95% attorno alla previsione , dove i coefficienti di regressione adattati. Ho usato e per questo.p ( y o b s = 1 | x , β ) βR
glm
predict.glm
Allo stesso modo, la linea della prupla è la media del posteriore con intervallo credibile del 95% per di un modello di regressione logistica bayesiana usando un precedente uniforme. Ho usato il pacchetto con la funzione per questo (l'impostazione dà l'uniforme non informativa precedente).MCMCpack
MCMClogit
B0=0
I punti rossi indicano osservazioni nel set di dati per cui , i punti neri sono osservazioni con . Si noti che come comune nella classificazione / analisi discreta si osserva ma non .y o b s = 0 y p ( y o b s = 1 | x )
Si possono vedere diverse cose:
- Ho simulato apposta che è scarso sulla mano sinistra. Voglio che la fiducia e l'intervallo credibile si allarghino qui a causa della mancanza di informazioni (osservazioni).
- Entrambe le previsioni sono distorte verso l'alto a sinistra. Questo pregiudizio è causato dai quattro punti rossi che indicano osservazioni, il che suggerisce erroneamente che la vera forma funzionale andrebbe qui. L'algoritmo ha informazioni insufficienti per concludere che la vera forma funzionale è piegata verso il basso.
- L'intervallo di confidenza si allarga come previsto, mentre l'intervallo credibile no . In effetti l'intervallo di confidenza racchiude lo spazio completo dei parametri, come dovrebbe a causa della mancanza di informazioni.
Sembra che l'intervallo credibile sia sbagliato / troppo ottimistico qui per una parte di . È davvero indesiderabile che l'intervallo credibile si restringa quando l'informazione diventa scarsa o è completamente assente. Di solito non è così che reagisce un intervallo credibile. Qualcuno può spiegare:
- Quali sono le ragioni per questo?
- Quali passi posso prendere per ottenere un intervallo credibile migliore? (cioè uno che racchiude almeno la vera forma funzionale, o meglio diventa ampio quanto l'intervallo di confidenza)
Il codice per ottenere intervalli di predizione nel grafico è stampato qui:
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)
Accesso ai dati : https://pastebin.com/1H2iXiew grazie a @DeltaIV e @AdamO
dput
il frame di dati contenente i dati, quindi includere l' dput
output come codice nel tuo post.