Cara mengurangi prediktor dengan cara yang tepat untuk model regresi logistik

9

Jadi saya telah membaca beberapa buku (atau bagian dari mereka) tentang pemodelan (F. Harrell "Strategi Pemodelan Regresi" antara lain), karena situasi saya saat ini adalah bahwa saya perlu melakukan model logistik berdasarkan data respon biner. Saya memiliki data kontinu, kategoris, dan biner (prediktor) dalam kumpulan data saya. Pada dasarnya saya memiliki sekitar 100 prediksi sekarang, yang jelas terlalu banyak untuk model yang bagus. Juga, banyak dari prediksi ini agak terkait, karena mereka sering didasarkan pada metrik yang sama, walaupun agak berbeda.

Bagaimanapun, apa yang saya baca, menggunakan regresi univariat dan teknik langkah-bijaksana adalah beberapa hal terburuk yang dapat Anda lakukan untuk mengurangi jumlah prediktor. Saya pikir teknik LASSO cukup oke (jika saya memahaminya dengan benar), tetapi jelas Anda tidak bisa menggunakannya pada 100 prediktor dan berpikir ada gunanya akan terjadi itu.

Jadi apa saja pilihan saya di sini? Apakah saya benar-benar harus duduk, berbicara dengan semua penyelia saya, dan orang-orang pintar di tempat kerja, dan benar-benar memikirkan apa yang bisa / seharusnya menjadi peramal top 5 terbaik (kita mungkin salah), atau pendekatan apa yang harus saya lakukan? pertimbangkan sebagai gantinya?

Dan ya, saya juga tahu bahwa topik ini banyak dibahas (online dan dalam buku-buku), tetapi kadang-kadang tampaknya sedikit berlebihan ketika Anda agak baru di bidang pemodelan ini.

EDIT:

Pertama-tama, ukuran sampel saya adalah +1000 pasien (yang banyak di bidang saya), dan di antara mereka ada antara 70-170 tanggapan positif (yaitu 170 ya tanggapan vs kira-kira 900 tidak ada tanggapan dalam salah satu kasus) . Pada dasarnya idenya adalah untuk memprediksi toksisitas setelah perawatan radiasi. Saya memiliki beberapa data respons biner prospektif (yaitu toksisitas, baik Anda memilikinya (1), atau tidak (0)), dan kemudian saya memiliki beberapa jenis metrik. Beberapa metrik spesifik untuk pasien, misalnya usia, obat-obatan yang digunakan, volume organ dan target, diabetes dll, dan kemudian saya memiliki beberapa metrik khusus pengobatan berdasarkan bidang pengobatan yang disimulasikan untuk target. Dari sana saya dapat mengambil beberapa prediktor, yang sering sangat relevan di bidang saya, karena sebagian besar toksisitas sangat berkorelasi dengan jumlah radiasi (iedosa) yang diterima. Jadi misalnya, jika saya mengobati tumor paru-paru, ada risiko mengenai jantung dengan sejumlah dosis. Saya kemudian dapat menghitung berapa x-jumlah volume jantung yang menerima x-jumlah dosis, misalnya " Saya hanya memilih satu untuk memulainya (walaupun itu yang telah coba dilakukan oleh percobaan sebelumnya, dan apa yang ingin saya lakukan juga), karena saya perlu tahu "persis" pada tingkat mana sebenarnya ada korelasi besar antara toksisitas jantung dan dosis volume (sekali lagi, sebagai contoh, ada metrik serupa lainnya, di mana strategi yang sama diterapkan). Jadi ya, seperti itulah set data saya terlihat. Beberapa metrik yang berbeda, dan beberapa metrik yang agak mirip. Saya hanya memilih satu untuk memulainya (walaupun itu yang telah coba dilakukan oleh percobaan sebelumnya, dan apa yang ingin saya lakukan juga), karena saya perlu tahu "persis" pada tingkat mana sebenarnya ada korelasi besar antara toksisitas jantung dan dosis volume (sekali lagi, sebagai contoh, ada metrik serupa lainnya, di mana strategi yang sama diterapkan). Jadi ya, seperti itulah set data saya terlihat. Beberapa metrik yang berbeda, dan beberapa metrik yang agak mirip. Cukup banyak seperti bagaimana kumpulan data saya terlihat. Beberapa metrik yang berbeda, dan beberapa metrik yang agak mirip. Cukup banyak seperti bagaimana kumpulan data saya terlihat. Beberapa metrik yang berbeda, dan beberapa metrik yang agak mirip.

Apa yang kemudian ingin saya lakukan adalah membuat model prediksi sehingga saya mudah-mudahan dapat memprediksi pasien mana yang memiliki risiko mendapatkan semacam toksisitas. Dan karena data responsnya adalah biner, ide utama saya tentu saja menggunakan model regresi logistik. Setidaknya itulah yang dilakukan orang lain di bidang saya. Namun, ketika melalui banyak makalah ini, di mana ini telah dilakukan, beberapa di antaranya kelihatannya salah (setidaknya ketika membaca jenis-jenis buku pemodelan khusus seperti karya F. Harrel). Banyak yang menggunakan analisis regresi univariat untuk memilih prediktor, dan menggunakannya dalam analisis multivariat (hal yang disarankan jika saya tidak salah), dan juga banyak menggunakan teknik langkah-bijaksana untuk mengurangi jumlah prediktor. Tentu saja tidak semuanya buruk. Banyak yang menggunakan LASSO, PCA, validasi silang, bootstrap, dll., Tetapi yang sudah saya lihat,

Mengenai pemilihan fitur, ini mungkin tempat saya sekarang. Bagaimana saya memilih / menemukan prediktor yang tepat untuk digunakan dalam model saya? Saya telah mencoba pendekatan univariat / langkah-bijaksana ini, tetapi setiap kali saya berpikir: "Mengapa bahkan melakukannya, jika itu salah?". Tapi mungkin itu cara yang baik untuk menunjukkan, setidaknya pada akhirnya, bagaimana "model yang baik" melakukan cara yang benar melawan "model yang buruk" melakukan cara yang salah. Jadi saya mungkin bisa melakukannya dengan cara yang agak salah sekarang, yang saya perlu bantuan adalah mendapatkan arahan untuk melakukannya dengan cara yang benar.

Maaf untuk hasil edit, dan itu terlalu lama.

EDIT 2: Contoh singkat bagaimana data saya terlihat:

'data.frame':   1151 obs. of  100 variables:
 $ Toxicity              : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Age                   : num  71.9 64 52.1 65.1 63.2 ...
 $ Diabetes              : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ Risk.Category         : Ord.factor w/ 3 levels "LOW"<"INTERMEDIATE"<..: 1 1 1 1 2 1 1 1 1 3 ...
 $ Organ.Volume.CC       : num  136.1 56.7 66 136.6 72.8 ...
 $ Target.Volume.CC      : num  102.7 44.2 58.8 39.1 56.3 ...
 $ D1perc                : num  7961 7718 7865 7986 7890 ...
 $ D1.5CC                : num  7948 7460 7795 7983 7800 ...
 $ D1CC                  : num  7996 7614 7833 7997 7862 ...
 $ D2perc                : num  7854 7570 7810 7944 7806 ...
 $ D2.5CC                : num  7873 7174 7729 7952 7604 ...
 $ D2CC                  : num  7915 7313 7757 7969 7715 ...
 $ D3perc                : num  7737 7379 7758 7884 7671 ...
 $ D3.5CC                : num  7787 6765 7613 7913 7325 ...
 $ D3CC                  : num  7827 6953 7675 7934 7480 ...
 $ D4perc                : num  7595 7218 7715 7798 7500 ...
 $ D5perc                : num  7428 7030 7638 7676 7257 ...
 $ DMEAN                 : num  1473 1372 1580 1383 1192 ...
 $ V2000CGY              : num  24.8 23.7 25.9 22.3 19.3 ...
 $ V2000CGY_CC           : num  33.7 13.4 17.1 30.4 14 ...
 $ V2500CGY              : num  22.5 21.5 24 20.6 17.5 ...
 $ V2500CGY_CC           : num  30.7 12.2 15.9 28.2 12.7 ...
 $ V3000CGY              : num  20.6 19.6 22.4 19.1 15.9 ...
 $ V3000CGY_CC           : num  28.1 11.1 14.8 26.2 11.6 ...
 $ V3500CGY              : num  18.9 17.8 20.8 17.8 14.6 ...
 $ V3500CGY_CC           : num  25.7 10.1 13.7 24.3 10.6 ...
 $ V3900CGY              : num  17.5 16.5 19.6 16.7 13.6 ...
 $ V3900CGY_CC           : num  23.76 9.36 12.96 22.85 9.91 ...
 $ V4500CGY              : num  15.5 14.4 17.8 15.2 12.2 ...
 $ V4500CGY_CC           : num  21.12 8.18 11.76 20.82 8.88 ...
 $ V5000CGY              : num  13.9 12.8 16.4 14 11 ...
 $ V5000CGY_CC           : num  18.91 7.25 10.79 19.09 8.03 ...
 $ V5500CGY              : num  12.23 11.14 14.84 12.69 9.85 ...
 $ V5500CGY_CC           : num  16.65 6.31 9.79 17.33 7.17 ...
 $ V6000CGY              : num  10.56 9.4 13.19 11.34 8.68 ...
 $ V6000CGY_CC           : num  14.37 5.33 8.7 15.49 6.32 ...
 $ V6500CGY              : num  8.79 7.32 11.35 9.89 7.44 ...
 $ V6500CGY_CC           : num  11.96 4.15 7.49 13.51 5.42 ...
 $ V7000CGY              : num  6.76 5.07 9.25 8.27 5.86 ...
 $ V7000CGY_CC           : num  9.21 2.87 6.1 11.3 4.26 ...
 $ V7500CGY              : num  4.61 2.37 6.22 6.13 4 ...
 $ V7500CGY_CC           : num  6.27 1.34 4.11 8.38 2.91 ...
 $ V8000CGY              : num  0.7114 0.1521 0.0348 0.6731 0.1527 ...
 $ V8000CGY_CC           : num  0.9682 0.0863 0.023 0.9194 0.1112 ...
 $ V8200CGY              : num  0.087 0 0 0 0 ...
 $ V8200CGY_CC           : num  0.118 0 0 0 0 ...
 $ V8500CGY              : num  0 0 0 0 0 0 0 0 0 0 ...
 $ V8500CGY_CC           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ n_0.02                : num  7443 7240 7371 7467 7350 ...
 $ n_0.03                : num  7196 6976 7168 7253 7112 ...
 $ n_0.04                : num  6977 6747 6983 7055 6895 ...
 $ n_0.05                : num  6777 6542 6811 6871 6693 ...
 $ n_0.06                : num  6592 6354 6649 6696 6503 ...
 $ n_0.07                : num  6419 6180 6496 6531 6325 ...
 $ n_0.08                : num  6255 6016 6350 6374 6155 ...
 $ n_0.09                : num  6100 5863 6211 6224 5994 ...
 $ n_0.1                 : num  5953 5717 6078 6080 5840 ...
 $ n_0.11                : num  5813 5579 5950 5942 5692 ...
 $ n_0.12                : num  5679 5447 5828 5809 5551 ...
 $ n_0.13                : num  5551 5321 5709 5681 5416 ...
 $ n_0.14                : num  5428 5201 5595 5558 5285 ...
 $ n_0.15                : num  5310 5086 5485 5439 5160 ...
 $ n_0.16                : num  5197 4975 5378 5324 5039 ...
 $ n_0.17                : num  5088 4868 5275 5213 4923 ...
 $ n_0.18                : num  4982 4765 5176 5106 4811 ...
 $ n_0.19                : num  4881 4666 5079 5002 4702 ...
 $ n_0.2                 : num  4783 4571 4985 4901 4597 ...
 $ n_0.21                : num  4688 4478 4894 4803 4496 ...
 $ n_0.22                : num  4596 4389 4806 4708 4398 ...
 $ n_0.23                : num  4507 4302 4720 4616 4303 ...
 $ n_0.24                : num  4421 4219 4636 4527 4210 ...
 $ n_0.25                : num  4337 4138 4555 4440 4121 ...
 $ n_0.26                : num  4256 4059 4476 4355 4035 ...
 $ n_0.27                : num  4178 3983 4398 4273 3951 ...
 $ n_0.28                : num  4102 3909 4323 4193 3869 ...
 $ n_0.29                : num  4027 3837 4250 4115 3790 ...
 $ n_0.3                 : num  3955 3767 4179 4039 3713 ...
 $ n_0.31                : num  3885 3699 4109 3966 3639 ...
 $ n_0.32                : num  3817 3633 4041 3894 3566 ...
 $ n_0.33                : num  3751 3569 3975 3824 3496 ...
 $ n_0.34                : num  3686 3506 3911 3755 3427 ...
 $ n_0.35                : num  3623 3445 3847 3689 3361 ...
 $ n_0.36                : num  3562 3386 3786 3624 3296 ...
 $ n_0.37                : num  3502 3328 3725 3560 3233 ...
 $ n_0.38                : num  3444 3272 3666 3498 3171 ...
 $ n_0.39                : num  3387 3217 3609 3438 3111 ...
 $ n_0.4                 : num  3332 3163 3553 3379 3053 ...
 $ n_0.41                : num  3278 3111 3498 3321 2996 ...
 $ n_0.42                : num  3225 3060 3444 3265 2941 ...
 $ n_0.43                : num  3173 3010 3391 3210 2887 ...
 $ n_0.44                : num  3123 2961 3339 3156 2834 ...
 $ n_0.45                : num  3074 2914 3289 3103 2783 ...
 $ n_0.46                : num  3026 2867 3239 3052 2733 ...
 $ n_0.47                : num  2979 2822 3191 3002 2684 ...
 $ n_0.48                : num  2933 2778 3144 2953 2637 ...
 $ n_0.49                : num  2889 2734 3097 2905 2590 ...

Dan jika saya menjalankan table(data$Toxicity)outputnya adalah:

> table(data$Toxicity)
   0    1 
1088   63 

Sekali lagi, ini untuk satu jenis toksisitas. Saya punya 3 orang lain juga.

Denver Dang
sumber
1
Apa yang ingin Anda lakukan? Prediksi atau kesimpulan, atau sesuatu yang lain?
Stephan Kolassa
Ini disebut pemilihan fitur . Jika Anda harus menggunakan regresi, maka fitur-fitur kategorik menjadi satu-dibenci, tetapi untuk metode pohon Anda dapat menggunakannya sebagaimana adanya. Anda bahkan bisa mengetahui interaksi n-arah yang paling prediktif atau istilah asosiasi, dan menggunakannya.
smci
"Apakah aku benar-benar hanya perlu duduk, berbicara dengan orang-orang, dan benar-benar memikirkan / mengeluarkan prediktor teratas?" Persetan, intuisi adalah titik awal, tapi itu sebabnya ada metode pemilihan fitur; hasil dari banyak eksperimen mengalahkan intuisi.
smci
1
@smci maaf karena tidak jelas. Jadi di bidang saya (onkologi radiasi) kami membuat rencana perawatan, yang pada dasarnya adalah representasi 3D tentang bagaimana radiasi / dosis didistribusikan di sekitar target. Sayangnya, ini tidak dapat dilakukan tanpa memukul setidaknya sejumlah kecil jaringan sehat. Jadi dari peta 3D ini, bisa dikatakan, saya bisa misalnya mendapatkan informasi tentang seberapa besar volume yang diterima x-jumlah radiasi / dosis. Tetapi seperti yang dapat Anda bayangkan, saya dapat "bertanya" dalam langkah-langkah seperti "berapa banyak radiasi yang diterima 1% dari volume struktur ini", dan kemudian 2%, 3%. Pada prinsipnya, nilainya akan agak mirip.
Denver Dang
1
@smci, jika prediksi adalah tujuan OPs, maka korelasi seharusnya tidak menjadi perhatian. Korelasi yang tinggi di antara variabel hanya akan menjadi perhatian besar ketika mencoba menafsirkan variabel yang termasuk dalam model.
StatsStudent

Jawaban:

4

Beberapa jawaban yang Anda terima bahwa pemilihan fitur push tidak berdasar.

The laso atau lebih baik bersih elastis akan melakukan seleksi fitur tetapi sebagai keluar menunjuk di atas Anda akan cukup kecewa pada volatilitas dari himpunan "dipilih" fitur. Saya percaya satu-satunya harapan nyata dalam situasi Anda adalah pengurangan data, yaitu pembelajaran tanpa pengawasan, seperti yang saya tekankan dalam buku saya. Pengurangan data membawa lebih banyak interpretabilitas dan terutama stabilitas. Saya sangat merekomendasikan komponen-komponen utama yang jarang, atau pengelompokan variabel yang diikuti oleh komponen-komponen utama reguler pada kelompok-kelompok.

Konten informasi dalam dataset Anda jauh, terlalu rendah untuk dapat diandalkan oleh algoritma pemilihan fitur apa pun.

Frank Harrell
sumber
Pertama-tama, terima kasih telah meluangkan waktu untuk berkomentar. Kedua, jika saya tidak salah, pembelajaran tanpa pengawasan adalah ketika Anda tidak memanfaatkan (atau tidak memiliki) respons khusus dari variabel respons (yaitu 1 atau 0), dan membuat komputer "menebak "Bagaimana distribusinya harus dibagi. Tapi regresi logistik (dan linier) diawasi sejauh yang saya tahu? Jadi rekomendasi Anda adalah meninggalkan metodologi itu? Di satu sisi saya menyukai ide itu, tetapi di sisi lain, regresi logistik dan probit adalah bagaimana hampir setiap makalah pemodelan di bidang saya (data yang mirip dengan milik saya) telah melakukan sejauh ini.
Denver Dang
Jadi bukankah saya akan pergi mengambil risiko di sini, atau apakah saya hanya harus berasumsi bahwa semua orang telah melakukan itu "salah" selamanya?
Denver Dang
3
Tidak semua orang tetapi kebanyakan orang pasti melakukan kesalahan. Ini adalah motivator utama untuk menulis Strategi Pemodelan Regresi . Tujuan dari reduksi data adalah mengurangi jumlah pembelajaran yang diawasi yang diminta untuk dilakukan oleh regresi logistik. Misalnya Anda dapat mengurangi 100 fitur kandidat untuk secara efektif 5 skor klaster, maka harus memperkirakan hanya 5 parameter + intersep.
Frank Harrell
2
Bagaimana perasaan Anda tentang berbagai model koefisien dalam kasus ini (seperti yang saya tambahkan pada jawaban saya)?
Ben Bolker
@ FrankHarrell kedengarannya agak menarik. Tapi maaf untuk bertanya, mengapa belajar yang diawasi buruk, atau setidaknya agak buruk, karena sepertinya Anda menyiratkan?
Denver Dang
8

+1 untuk "terkadang tampak agak berlebihan". Itu benar-benar tergantung (seperti yang dinyatakan Harrell dengan jelas; lihat bagian di akhir Bab 4) apakah Anda ingin melakukannya

  • Anda harus menggunakan validasi silang untuk memilih tingkat hukuman, yang akan menghancurkan kemampuan Anda untuk melakukan inferensi (membangun interval kepercayaan pada prediksi) kecuali jika Anda menggunakan metode inferensi dimensi tinggi yang canggih (mis. Dezeure et al 2015 ; I telah tidak mencoba pendekatan ini, tetapi mereka tampaknya masuk akal ...)

  • analisis eksplorasi : bersenang-senang, transparan dan jujur, jangan mengutip nilai p apa pun.

Untuk kasus penggunaan tertentu yang telah Anda jelaskan sekarang (sekelompok prediktor Anda pada dasarnya mewakili distribusi kumulatif dari dosis yang diterima oleh fraksi jantung yang berbeda), Anda mungkin ingin melihat ke dalam model koefisien yang bervariasi (agak sulit untuk dicari) , yang pada dasarnya sesuai dengan kurva halus untuk efek CDF (ini dapat diimplementasikan dalam mgcvpaket R ).

Ben Bolker
sumber
Ukuran sampel saya adalah +1000, dan tergantung pada variabel respons mana (saya punya 4), saya memiliki antara 75-170 positif (atau negatif, tergantung pada bagaimana Anda melihatnya) respons dari +1000. Saya tidak tahu apakah itu membuat sesuatu lebih mudah, yaitu saya dapat mengabaikan beberapa langkah karena set sampel agak besar (setidaknya di bidang saya).
Denver Dang
Akankah validasi silang menghancurkan kemampuan untuk melakukan inferensi? Mungkin. Saya pikir kita bisa bootstrap sebelum validasi silang untuk mendapatkan interval kepercayaan untuk prediksi. Ini mungkin layak dengan 1000 pengamatan.
JTH
inferensi pasca-seleksi sangat sulit; jika Anda menggunakan seluruh data yang disetel untuk menyetel hyperparameters (seperti kekuatan hukuman), maka Anda berada dalam situasi yang sama. Anda harus menguraikan pendekatan bootstrap + CV Anda sebelum saya dapat mengatakan jika saya yakin itu akan berhasil ...
Ben Bolker
0

Ada banyak pendekatan berbeda. Apa yang saya sarankan adalah mencoba beberapa yang sederhana, dengan urutan sebagai berikut:

resnet
sumber
1
Saya percaya bahwa ketiga metode ini akan ditemukan tidak stabil.
Frank Harrell
itu tergantung pada bagaimana Anda mendefinisikan tidak stabil. Dalam praktiknya, Anda biasanya menggunakan beberapa jenis validasi silang seperti k-fold atau leave-one-out dan menilai berdasarkan varians kinerja + keseluruhan (alias metode 1SE) yang fitur yang akhirnya Anda pilih.
resnet
Bootstrap dan validasi silang hanya memvalidasi beberapa indeks prediktif untuk proses menghasilkan model. Ini menghasilkan estimasi yang baik dari indeks tersebut untuk model yang dipilih menggunakan proses itu tetapi tidak memberikan kenyamanan untuk struktur model yang dikembangkan satu kali, yaitu model keseluruhan. Lihatlah struktur yang dipilih (yaitu, fitur yang dipilih) di seluruh sampel untuk melihat volatilitas.
Frank Harrell