Considérez le graphique ci-dessous dans lequel j'ai simulé des données comme suit. Nous regardons un résultat binaire pour lequel la vraie probabilité d'être 1 est indiquée par la ligne noire. La relation fonctionnelle entre une covariable x et est un polynôme de troisième ordre avec lien logistique (il est donc non linéaire dans un double sens).
La ligne verte est l'ajustement de régression logistique GLM où est introduit comme polynôme de troisième ordre. Les lignes vertes en pointillés sont les intervalles de confiance à 95% autour de la prédiction , où les coefficients de régression ajustés. J'ai utilisé et pour ça.p ( y o b s = 1 | x , β ) βR
glm
predict.glm
De même, la ligne du pruple est la moyenne du postérieur avec un intervalle crédible à 95% pour d'un modèle de régression logistique bayésienne utilisant un a priori uniforme. J'ai utilisé le package avec fonction pour cela (le réglage donne la priorité uniforme non informative).MCMCpack
MCMClogit
B0=0
Les points rouges désignent des observations dans l'ensemble de données pour lesquelles , les points noirs sont des observations avec . Notez que comme courant dans la classification / analyse discrète mais pas est observé.y o b s = 0 y p ( y o b s = 1 | x )
Plusieurs choses peuvent être vues:
- J'ai simulé exprès que est rare sur la main gauche. Je veux que la confiance et l'intervalle crédible s'élargissent ici en raison du manque d'informations (observations).
- Les deux prédictions sont biaisées vers le haut à gauche. Ce biais est causé par les quatre points rouges dénotant observations, ce qui suggère à tort que la véritable forme fonctionnelle remonterait ici. L'algorithme ne dispose pas d'informations suffisantes pour conclure que la véritable forme fonctionnelle est courbée vers le bas.
- L'intervalle de confiance devient plus large comme prévu, alors que l'intervalle crédible ne pas . En fait, l'intervalle de confiance renferme tout l'espace des paramètres, comme il se doit en raison du manque d'informations.
Il semble que l'intervalle crédible soit faux / trop optimiste ici pour une partie de . Il est vraiment indésirable que l'intervalle crédible se rétrécisse lorsque les informations deviennent rares ou totalement absentes. Habituellement, ce n'est pas ainsi que réagit un intervalle crédible. Quelqu'un peut-il expliquer:
- Quelles en sont les raisons?
- Quelles mesures puis-je prendre pour arriver à un meilleur intervalle crédible? (c'est-à-dire qui englobe au moins la vraie forme fonctionnelle, ou mieux devient aussi large que l'intervalle de confiance)
Le code pour obtenir les intervalles de prédiction dans le graphique est imprimé ici:
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)
Accès aux données : https://pastebin.com/1H2iXiew merci @DeltaIV et @AdamO
dput
sur la trame de données contenant les données, puis inclure la dput
sortie sous forme de code dans votre publication.