NESTFS menyediakan implementasi seleksi ke depan berdasarkan regresi linier dan logistik yang mengadopsi validasi silang sebagai komponen inti dari prosedur seleksi.
Seleksi ke depan adalah pendekatan yang secara inheren lambat, karena untuk setiap variabel model perlu dipasang. Dalam implementasi kami, masalah ini semakin diperburuk oleh fakta bahwa validasi silang batin terjadi pada setiap iterasi, dengan tujuan memandu seleksi terhadap variabel yang memiliki sifat generalisasi yang lebih baik.
Kode ini diparalelkan pada lipatan dalam, berkat paket paralel . Karena itu, waktu pengguna tergantung pada jumlah core yang tersedia, tetapi tidak ada keuntungan dalam menggunakan lebih banyak core daripada lipatan dalam. Jumlah core yang ditugaskan untuk perhitungan harus ditresorkan sebelum memulai dengan mengatur opsi "mc.cores".
Keuntungan utama dari seleksi ke depan adalah bahwa ia memberikan model yang dapat ditafsirkan segera, dan panel variabel yang diperoleh dalam beberapa hal adalah yang paling tidak berlebihan, terutama jika jumlah variabel untuk dipilih tidak terlalu besar (dalam pengalaman kami, hingga hingga hingga pengalaman kami sekitar 30-40 variabel).
Namun, ketika jumlah variabel jauh lebih besar dari itu, seleksi ke depan, selain tidak tertandingi lambat, mungkin lebih tunduk pada overfitting, yang merupakan sifat dari desainnya yang mirip serakah.
Paket yang sudah dikompilasi tersedia di cran.
Pertama memuat paket dan daftarkan jumlah core yang akan digunakan dengan mengatur opsi mc.cores
. Jika Anda cukup beruntung untuk bekerja pada mesin multicore besar, kinerja terbaik dicapai dengan mendaftarkan sebanyak inti seperti jumlah lipatan dalam yang digunakan (standarnya adalah 30).
library( nestfs )
options( mc.cores = 10 )
Untuk menjalankan seleksi ke depan dari model awal yang hanya berisi usia dan jenis kelamin, berikut ini sudah cukup:
data( diabetes )
fs.res <- fs( Y ~ age + sex , diabetes , family = gaussian())
summary( fs.res )
# # vars fdr llks diffs iter
# # 1 age NA NA NA NA
# # 2 sex NA -2136.854 NA NA
# # 3 ltg 7.008928e-10 -2058.831 78.022766 1
# # 4 bmi 1.850715e-05 -2009.568 49.263387 2
# # 5 map 2.020038e-03 -1999.253 10.314799 3
# # 6 age.sex 1.508210e-02 -1992.544 6.709064 4
# # 7 hdl 4.039276e-02 -1985.208 7.336623 5
# # 8 bmi.map 7.474167e-02 -1980.913 4.294736 6
Secara default, pemilihan terjadi pada semua variabel yang ada dalam data.frame yang bukan bagian dari model awal. Ini dapat dikontrol melalui opsi choose.from
. Dari, yang menerima nama atau indeks variabel.
Dimungkinkan untuk mempromosikan pemilihan yang lebih luas dengan meminta peningkatan yang lebih besar dalam log-likelihood (opsi min.llk.diff
): Ini disarankan terutama ketika jumlah variabel untuk dipilih dari melebihi 10-15, karena pengalaman kami bahwa bahkan default yang default itu default Pengaturan 2 (sudah lebih ketat dari apa yang diadopsi oleh paket lain) dapat menyebabkan beberapa overfitting. Bagaimanapun, dimungkinkan untuk menetapkan ukuran maksimum panel yang dipilih dengan mengurangi jumlah iterasi (opsi max.iters
, secara default diatur ke 10).
Seleksi ke depan bersarang bermanfaat untuk menilai stabilitas proses seleksi dengan melakukannya pada setiap pelatihan perpecahan lipatan validasi silang:
folds <- create.folds( 10 , nrow( diabetes ), seed = 1 )
nest.res <- nested.fs( Y ~ age + sex , diabetes , family = gaussian(), folds = folds )
summary( nest.res )
# # vars percent coef coefIQR rank rankIQR diffLogLik diffLogLikIQR
# # 1 bmi 100 24.547 (23.61, 25.48) 2 (1.00, 2.00) 61.021 (44.49, 76.85)
# # 2 ltg 100 23.729 (22.39, 24.41) 2 (1.00, 2.00) 52.868 (36.09, 69.36)
# # 3 map 100 15.147 (14.45, 15.88) 3 (3.00, 3.75) 8.366 (8.04, 9.61)
# # 4 hdl 100 -13.297 (-13.65, -12.55) 4 (4.00, 4.00) 6.728 (6.35, 7.83)
# # 5 age.sex 80 8.825 (8.72, 9.24) 5 (5.00, 6.00) 4.625 (4.45, 5.37)
# # 6 bmi.map 70 8.165 (7.55, 8.27) 6 (5.50, 7.00) 3.604 (2.66, 4.15)
# # 7 bmi.glu 20 4.460 (4.07, 4.85) 5 (5.00, 5.00) 3.535 (3.09, 3.98)
# # 8 glu.2 20 6.477 (6.47, 6.49) 6 (6.25, 6.75) 2.984 (2.56, 3.41)
# # 9 sex.map 20 6.862 (6.71, 7.01) 6 (5.25, 5.75) 2.936 (2.89, 2.98)
# # 10 age.glu 10 7.469 (7.47, 7.47) 3 (3.00, 3.00) 4.826 (4.83, 4.83)
# # 11 age.map 10 7.365 (7.36, 7.36) 6 (6.00, 6.00) 2.679 (2.68, 2.68)
# # 12 bmi.2 10 7.987 (7.99, 7.99) 6 (6.00, 6.00) 2.466 (2.47, 2.47)
Output di atas menunjukkan bahwa bmi
, ltg
, map
dan hdl
dipilih di semua lipatan, dan sebagian besar peningkatan FIT disediakan oleh dua variabel pertama, yang setuju dengan apa yang ditemukan ketika menjalankan seleksi ke depan pada semua data.
Yang paling penting, seleksi ke depan bersarang menghasilkan ukuran kinerja seleksi yang divalidasi silang, yang merupakan perkiraan yang tidak bias dari kinerja prediktif dari panel yang dipilih pada data yang ditarik:
nested.performance( nest.res )
# # Correlation coefficient: 0.7097
Ini dapat dibandingkan dengan apa yang diperoleh dengan model baseline pada set lipatan validasi silang yang sama:
base.res <- nested.glm( Y ~ age + sex , diabetes , family = gaussian(), folds = folds )
nested.performance( base.res )
# # Correlation coefficient: 0.1551
M. Colombo, HC Looker, B. Farran et al., Molekul cedera ginjal serum 1 dan beta-2-2-microglobulin berkinerja serta panel yang lebih besar untuk prediksi penurunan fungsi ginjal yang cepat pada diabetes tipe 2, Diabetologia (2019) 62 ( 1): 156-168. https://doi.org/10.1007/s00125-018-4741-9
HC Looker, M. Colombo, S. Hess et al., Biomarker perkembangan penyakit ginjal kronis cepat pada diabetes tipe 2, Ginjal Internasional (2015), 88 (4): 888-896. https://doi.org/10.1038/ki.2015.199
HC Looker, M. Colombo, F. Agakov et al., Biomarker protein untuk prediksi penyakit kardiovaskular pada diabetes tipe 2, Diabetologia (2015) 58 (6): 1363-1371. https://doi.org/10.1007/s00125-015-3535-6