NESTFS bietet eine Implementierung der Vorwärtsauswahl auf der Grundlage einer linearen und logistischen Regression, die Kreuzvalidierung als Kernkomponente des Auswahlverfahrens annimmt.
Die Vorwärtsauswahl ist ein von Natur aus langsamer Ansatz, da für jede Variable ein Modell angepasst werden muss. In unserer Umsetzung wird dieses Problem durch die Tatsache weiter verschärft, dass bei jeder Iteration eine innere Kreuzvalidierung auftritt, um die Auswahl zu Variablen mit besseren Generalisierungseigenschaften zu leiten.
Der Code wird dank des parallelen Pakets parallel über den inneren Falten parallelisiert. Die Benutzerzeit hängt daher von der Anzahl der verfügbaren Kerne ab, aber es gibt keinen Vorteil, mehr Kerne zu verwenden als innere Falten. Die Anzahl der Berechnungen zugewiesenen Kerne muss registriert sein, bevor die Option "MC.Cores" festgelegt wird.
Der Hauptvorteil der Vorwärtsauswahl besteht darin, dass es ein sofort interpretierbares Modell bietet und das erhalten ca. 30-40 Variablen).
Wenn jedoch die Anzahl der Variablen viel größer ist als diese, kann die Vorwärtsauswahl, abgesehen davon, dass sie unerträglich langsam sind, mehr überpunktiert werden, was in der Natur seines gierigen Designs liegt.
Ein vorkompiliertes Paket ist auf Cran erhältlich.
Laden Sie zuerst das Paket und registrieren Sie die Anzahl der Kerne, indem Sie die Option mc.cores
einstellen. Wenn Sie das Glück haben, an einer großen Multicore -Maschine zu arbeiten, wird die beste Leistung erzielt, indem so viele Kerne wie die Anzahl der in inneren Falten verwendeten Falten registriert werden (die Standardeinstellung beträgt 30).
library( nestfs )
options( mc.cores = 10 )
Um die Auswahl eines Basismodells zu entwickeln, das nur Alter und Geschlecht enthält, reicht das Folgende aus:
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
Standardmäßig erfolgt die Auswahl über alle in den Daten vorhandenen Variablen. Rahmen, die nicht Teil des Anfangsmodells sind. Dies kann über die Option choose.from
gesteuert werden, die variable Namen oder Indizes akzeptiert.
Es ist möglich, die sparsamere Auswahl zu fördern, indem sie eine größere Verbesserung der Protokoll-Likelihood anfordern (Option min.llk.diff
): Dies ist ratsam Die Einstellung von 2 (bereits strenger als von anderen Paketen angenommen) kann zu einer Überanpassung führen. In jedem Fall ist es möglich, eine maximale Größe des ausgewählten Panels festzulegen, indem die Anzahl der Iterationen reduziert wird (Option max.iters
standardmäßig auf 10).
Eine verschachtelte Vorwärtsauswahl ist hilfreich, um die Stabilität des Auswahlprozesses zu bewerten, indem sie bei jeder Trainingsaufteilung der Quervalidationsfalten durchführen:
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)
Die obige Ausgabe zeigt, dass bmi
, ltg
, map
und hdl
in allen Falten ausgewählt werden, und der größte Teil der Verbesserung der Anpassung wird durch die ersten beiden Variablen bereitgestellt, was mit dem übereinstimmt, was bei der Vorwärtsauswahl aller Daten gefunden wurde.
Am wichtigsten ist, dass eine verschachtelte Vorwärtsauswahl ein quervalidiertes Maß für die Leistung des Auswahlprozesses erzeugt, was eine unvoreingenommene Schätzung der Vorhersageleistung der ausgewählten Panels für zurückgezogene Daten darstellt:
nested.performance( nest.res )
# # Correlation coefficient: 0.7097
Dies kann mit dem verglichen werden, was durch das Basismodell auf demselben Satz von Kreuzvalidationsfalten erhalten wird:
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., Serum-Nieren-Verletzungsmolekül 1 und Beta-2-Mikroglobulin sowie größere Panels für die Vorhersage des schnellen Rückgangs der Nierenfunktion bei Typ-2-Diabetes, Diabetologia (2019) 62 ( 1): 156-168. https://doi.org/10.1007/s00125-018-4741-9
HC Looker, M. Colombo, S. Hess et al., Biomarker für das Fortschreiten der chronischen Nierenerkrankungen bei Typ-2-Diabetes, Kidney International (2015), 88 (4): 888-896. https://doi.org/10.1038/ki.2015.199
HC Looker, M. Colombo, F. Agakov et al., Proteinbiomarker für die Vorhersage von Herz-Kreislauf-Erkrankungen bei Typ-2-Diabetes, Diabetologia (2015) 58 (6): 1363-1371. https://doi.org/10.1007/s00125-015-3535-6