Comment estimer une courbe d'étalonnage avec bootstrap (R)

9

Question : J'ai adapté un modèle probabiliste (réseau bayésien) pour modéliser une variable de résultat binaire. Je voudrais créer un tracé d'étalonnage haute résolution (par exemple spline) corrigé pour le sur-ajustement avec bootstrapping. Existe-t-il une procédure standard pour calculer une telle courbe?

Considérations : je pourrais le faire facilement avec le fractionnement train / test, mais je préfère ne pas jeter de données car j'ai moins de 20 000 échantillons. J'ai donc naturellement pensé au bootstrap. Je sais qu'une telle fonction (calibrer) est implémentée dans le package rms de Frank Harrell, mais malheureusement le modèle que j'utilise n'est pas pris en charge par le package.

Question bonus : est-il possible de recalibrer un modèle mal calibré avec bootstrap? La raison pour laquelle je pose cette question est que j'ai essayé de recalibrer un modèle en

  1. diviser les données en train / test
  2. modèle adapté à l'ensemble de train
  3. recalibrer le modèle au train (avec une spline cubique)
  4. évaluer l'étalonnage sur le banc d'essai

Les modèles recalibrés de la manière ci-dessus étaient parfaitement calibrés sur le train, mais pas tellement sur le test, ce qui indique probablement un sur-ajustement léger. J'ai également essayé de diviser davantage l'ensemble de test, en calibrant sur une division et en évaluant la calibration sur la deuxième division. J'ai obtenu de meilleurs résultats (toujours pas parfaitement calibrés), mais les ensembles sont devenus assez petits (~ 1000 échantillons) et donc le calibrage n'est pas fiable

Gino_JrDataScientist
la source
1
Je ne sais pas ce qui est disponible dans R, mais sklearn de Python a un excellent module d'étalonnage des probabilités qui prend en charge la validation croisée et la régression isotonique / monotone, qui sont essentiels pour un étalonnage des probabilités de haute qualité. scikit-learn.org/stable/modules/calibration.html
olooney
Merci pour votre réponse! Je suis lié à R et je n'ai pas particulièrement envie de commencer reticulate. Je pourrais implémenter la procédure moi-même si je le savais, mais je ne l'ai trouvée nulle part .. Je suppose que j'espère juste que le professeur Harrell verra cette question: D
Gino_JrDataScientist
1
Veuillez inclure un (petit) exemple de données pour illustrer ce dont vous parlez. Je vous remercie.
Jim
Vous devriez envisager de jeter un œil à cette introduction au package rms (et à sa fonction de calibrage) dans R: r-bloggers.com/introduction-to-the-rms-package
rpatel
Salut rpatel, merci pour la suggestion. J'avais mentionné la fonction rms :: calibrate dans ma question d'origine, notant qu'elle ne prend pas en charge la classe de modèle que j'utilise. Je possède également le livre Harrell's Regression Modeling Strategies, mais je ne trouve aucune description détaillée du fonctionnement de la fonction de calibrage.
Gino_JrDataScientist

Réponses:

6

Après avoir discuté avec le professeur Frank Harrell par e-mail, j'ai conçu la procédure suivante pour estimer la courbe d'étalonnage corrigée de l'optimisme, basée en partie sur son Tutorial in Biostatistics (STATISTICS IN MEDICINE, VOL.15,361-387 (1996)):

  1. adapter un modèle de prédiction des risques à toutes les données
  2. adapter un modèle flexible (gam avec spline et lien logit) aux probabilités prédites par rapport au résultat du modèle, et interroger le gam sur une grille de probabilités prédites . Ceci est la courbe d'étalonnage apparente et nous l'appelonsp=(0.01,0.02,...,0.99)calapp
  3. dessiner un échantillon bootstrap avec remplacement, même taille des données originales
  4. adapter le modèle de prédiction des risques à l'échantillon bootstrap
  5. utiliser le modèle bootstrap pour prédire les probabilités à partir de l' échantillon bootstrap , ajuster un gam entre les probabilités prédites et le résultat, et interroger le gam sur une grille de probabilités prédites (appelons ces points )calboot
  6. utiliser le modèle bootstrap pour prédire les probabilités à partir de l' échantillon d' origine , ajuster un gam entre les probabilités prédites et le résultat, et interroger le gam sur une grille de probabilités prédites obtenant une courbe d'étalonnage ( )calorig
  7. calculer l'optimisme à chaque point de la grille comme sip
    Optimism(p)=calboot(p)calorig(p)
  8. répétez les étapes 3 à 7 environ 100 fois, faites la moyenne de l'optimisme à chaque pointp
  9. calculer l'étalonnage corrigé de l'optimisme comme si
    calcorr(p)=calapp(p)<Optimism(p)>

Remarque importante : La procédure ci-dessus est inspirée du travail de Harrell et de ma discussion avec lui, mais toutes les erreurs sont les miennes uniquement.

Gino_JrDataScientist
la source