Cara memperkirakan kurva kalibrasi dengan bootstrap (R)

9

Pertanyaan : Saya telah memasang model probabilistik (jaringan bayesian) untuk memodelkan variabel hasil biner. Saya ingin membuat plot kalibrasi resolusi tinggi (misalnya spline) dikoreksi karena overfitting dengan bootstrap. Apakah ada prosedur standar untuk menghitung kurva seperti itu?

Pertimbangan : Saya bisa melakukan ini dengan mudah dengan train / test split, tapi saya lebih suka tidak membuang data apa pun karena saya memiliki kurang dari 20.000 sampel. Jadi saya secara alami berpikir tentang bootstrap. Saya tahu bahwa salah satu fungsi tersebut (kalibrasi) diimplementasikan dalam paket rms milik Frank Harrell, tetapi sayangnya model yang saya gunakan tidak didukung oleh paket tersebut.

Pertanyaan bonus : apakah mungkin untuk mengkalibrasi ulang model yang salah perhitungan dengan bootstrap? Alasan saya bertanya ini adalah karena saya mencoba untuk mengkalibrasi ulang model oleh

  1. pisahkan data dalam kereta / tes
  2. model pas untuk melatih set
  3. mengkalibrasi ulang model untuk melatih set (dengan spline kubik)
  4. mengevaluasi kalibrasi pada set tes

Model-model yang dikalibrasi ulang dengan cara di atas dikalibrasi sempurna pada set kereta tetapi tidak begitu banyak pada set tes, yang mungkin menunjukkan overfitting ringan. Saya juga mencoba membelah set tes lebih lanjut, mengkalibrasi pada satu split dan mengevaluasi kalibrasi pada split kedua. Saya mendapat hasil yang lebih baik (masih belum dikalibrasi dengan sempurna), tetapi set menjadi sangat kecil (~ 1000 sampel) dan dengan demikian kalibrasi tidak dapat diandalkan

Gino_JrDataScientist
sumber
1
Tidak yakin apa yang tersedia di R, tetapi sklearn Python memiliki modul kalibrasi probabilitas yang sangat baik yang mendukung validasi silang dan regresi isotonik / monotonik, yang merupakan kunci untuk kalibrasi probabilitas kualitas tinggi. Mungkin merupakan tempat yang baik untuk mendapatkan beberapa ide. scikit-learn.org/stable/modules/calibration.html
olooney
Terima kasih atas jawaban Anda! Saya terikat ke R dan tidak terlalu tertarik untuk memulai reticulate. Saya bisa menerapkan prosedur sendiri jika saya mengetahuinya, tetapi saya belum menemukannya di mana pun .. Saya kira saya hanya berharap bahwa prof Harrell akan melihat pertanyaan ini: D
Gino_JrDataScientist
1
Harap sertakan contoh data (kecil) untuk menggambarkan apa yang Anda bicarakan. Terima kasih.
Jim
Anda harus mempertimbangkan untuk melihat pengantar ini untuk paket rms (dan fungsi kalibrasi) di R: r-bloggers.com/introduction-to-the-rms-package
rpatel
Hai rpatel, terima kasih atas sarannya. Saya telah menyebutkan fungsi rms :: calibrate dalam pertanyaan awal saya, mencatat bahwa itu tidak mendukung kelas model yang saya gunakan. Saya juga memiliki buku Strategi Pemodelan Regresi Harrell, tetapi saya tidak dapat menemukan deskripsi terperinci tentang cara kerja fungsi kalibrasi.
Gino_JrDataScientist

Jawaban:

6

Setelah berdiskusi dengan Prof. Frank Harrell melalui email, saya menyusun prosedur berikut untuk memperkirakan kurva kalibrasi yang dikoreksi optimisme, sebagian berdasarkan pada Tutorialnya dalam Biostatistik (STATISTIK DALAM OBAT, VOL. 15,361-387 (1996)):

  1. cocok dengan model prediksi risiko pada semua data
  2. paskan model fleksibel (gam dengan tautan spline dan logit) dengan probabilitas yang diprediksi model vs hasil, dan kueri gam pada grid probabilitas yang diprediksi . Ini adalah kurva kalibrasi yang jelas dan kami menyebutnyap=(0.01,0.02,...,0.99)calapp
  3. menggambar sampel bootstrap dengan penggantian, ukuran data asli yang sama
  4. model prediksi risiko fit pada sampel bootstrap
  5. gunakan model bootstrap untuk memprediksi probabilitas dari sampel bootstrap , paskan gam di antara probabilitas yang diprediksi dan hasilnya, dan permintaan gam pada grid probabilitas yang diprediksi (mari kita sebut titik-titik ini )calboot
  6. gunakan model bootstrap untuk memprediksi probabilitas dari sampel asli , paskan gam antara probabilitas yang diprediksi dan hasil, dan kueri gam pada grid probabilitas diprediksi memperoleh kurva kalibrasi ( )calorig
  7. hitung optimisme di setiap titik dari grid seperti begitup
    Optimism(p)=calboot(p)calorig(p)
  8. ulangi langkah 3-7 sekitar 100 kali, rata-rata optimisme di setiap titikp
  9. hitung kalibrasi terkoreksi optimisme seperti begitu
    calcorr(p)=calapp(p)<Optimism(p)>

Catatan penting : Prosedur di atas terinspirasi oleh pekerjaan Harrell dan diskusi saya dengannya, tetapi semua kesalahan adalah milik saya sendiri.

Gino_JrDataScientist
sumber