Come stimare una curva di calibrazione con bootstrap (R)


9

Domanda : ho inserito un modello probabilistico (rete bayesiana) per modellare una variabile di risultato binaria. Vorrei creare un grafico di calibrazione ad alta risoluzione (ad es. Spline) corretto per adattamento eccessivo con bootstrap. Esiste una procedura standard per il calcolo di tale curva?

Considerazioni : potrei farlo facilmente con la suddivisione treno / test, ma preferirei non gettare alcun dato poiché ho meno di 20.000 campioni. Quindi ho naturalmente pensato al bootstrap. So che una di queste funzioni (calibrare) è implementata nel pacchetto rms di Frank Harrell, ma sfortunatamente il modello che utilizzo non è supportato dal pacchetto.

Domanda bonus : è possibile ricalibrare un modello non calibrato con il bootstrap? Il motivo per cui lo chiedo è che ho provato a ricalibrare un modello di

  1. dividere i dati in treno / prova
  2. modello adatto al set da allenamento
  3. ricalibrare il modello per addestrare il set (con una spline cubica)
  4. valutare la calibrazione sul set di test

I modelli ricalibrati nel modo sopra erano perfettamente calibrati sul set del treno, ma non tanto sul set di test, il che probabilmente indica un lieve eccesso di adattamento. Ho anche provato a dividere ulteriormente il set di test, calibrando su una divisione e valutando la calibrazione sulla seconda divisione. Ho ottenuto risultati migliori (comunque non ancora perfettamente calibrato), ma i set sono diventati piuttosto piccoli (~ 1000 campioni) e quindi la calibrazione inaffidabile


1
Non sono sicuro di cosa sia disponibile in R, ma lo sklearn di Python ha un eccellente modulo di calibrazione della probabilità che supporta la convalida incrociata e la regressione isotonica / monotonica, che sono fondamentali per la calibrazione della probabilità di alta qualità. Potrebbe essere un buon posto per ottenere alcune idee. scikit-learn.org/stable/modules/calibration.html
olooney

La ringrazio per la risposta! Sono legato a R e non sono particolarmente entusiasta di iniziare reticulate. Potrei implementare la procedura da solo se lo sapessi, ma non l'ho trovata da nessuna parte. Immagino che spero solo che il prof Harrell vedrà questa domanda: D
Gino_JrDataScientist

1
Includi un (piccolo) esempio di dati per illustrare di cosa stai parlando. Grazie.
Jim,

Dovresti considerare di dare un'occhiata a questa introduzione al pacchetto rms (e alla sua funzione di calibrazione) in R: r-bloggers.com/introduction-to-the-rms-package
rpatel

Ciao rpatel, grazie per il suggerimento. Avevo menzionato la funzione rms :: calibrate nella mia domanda originale, osservando che non supporta la classe di modello che sto usando. Possiedo anche il libro Harrell's Regression Modeling Strategies, ma non riesco a trovare alcuna descrizione dettagliata su come funziona la funzione di calibrazione.
Gino_JrDataScientist,

Risposte:


6

Dopo aver discusso con il prof Frank Harrell via e-mail, ho escogitato la seguente procedura per stimare la curva di calibrazione corretta dall'ottimismo, parzialmente basata sul suo Tutorial in Biostatistica (STATISTICS IN MEDICINE, VOL. 15.361-387 (1996)):

  1. adattare un modello di previsione del rischio su tutti i dati
  2. adattare un modello flessibile (gam con spline e collegamento logit) alle probabilità previste del modello rispetto ai risultati e interrogare il gam su una griglia di probabilità previste p=(0.01,0.02,...,0.99). Questa è la curva di calibrazione apparente e la chiamiamocun'lun'pp
  3. disegna campione bootstrap con sostituzione, stessa dimensione dei dati originali
  4. adatta il modello di previsione del rischio sul campione bootstrap
  5. utilizzare il modello bootstrap per prevedere le probabilità dal campione bootstrap , adattare un gam tra le probabilità previste e il risultato e interrogare il gam in una griglia di probabilità previste (chiamiamo questi punticun'lBoot)
  6. utilizzare il modello bootstrap per prevedere le probabilità dal campione originale , adattare un gam tra le probabilità previste e il risultato e interrogare il gam in una griglia di probabilità previste ottenendo una curva di calibrazione (cun'loriog)
  7. calcola l'ottimismo in ogni punto p della griglia in questo modo
    OptiomioSm(p)=cun'lBoot(p)-cun'loriog(p)
  8. ripetere i passaggi 3-7 circa 100 volte, in media l'ottimismo in ciascun punto p
  9. calcola la calibrazione corretta dell'ottimismo in questo modo
    cun'lcorr(p)=cun'lun'pp(p)-<OptiomioSm(p)>

Nota importante : la procedura sopra descritta è ispirata al lavoro di Harrell e alla mia discussione con lui, ma tutti gli errori sono solo miei.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.