Nestfs обеспечивает реализацию прямого выбора на основе линейной и логистической регрессии, которая принимает перекрестную проверку в качестве основного компонента процедуры выбора.
Впередный выбор - это медленный подход по своей сути, так как для каждой переменной необходимо подготовить модель. В нашей реализации эта проблема еще больше усугубляется тем фактом, что внутренняя перекрестная проверка происходит на каждой итерации, с целью направления отбора к переменным, которые имеют лучшие свойства обобщения.
Код параллелизирован через внутренние складки благодаря параллельному пакету. Таким образом, время пользователя зависит от количества доступных ядер, но нет никакого преимущества в использовании большего количества ядер, чем внутренние складки. Количество ядер, назначенных для вычислений, должно быть зарегистрировано, прежде чем начать, установив опцию «mc.cores».
Основное преимущество прямого выбора заключается в том, что он предоставляет немедленно интерпретируемую модель, а панель полученных переменных в некотором смысле является наименее избыточной, особенно если количество переменных на выбор не слишком велика (по нашему опыту, вплоть до около 30-40 переменных).
Однако, когда количество переменных намного больше, чем это, вперед отбор, помимо невыносимо медленного, может быть более подверженным пережирению, что имеет характер его жадного дизайна.
Предварительный пакет доступен на Cran.
Сначала загрузите пакет и зарегистрируйте количество ядер для использования, установив опцию mc.cores
. Если вам посчастливилось работать над большой многоядерной машиной, лучшая производительность достигается путем регистрации столько ядер, сколько и количества используемых внутренних складок (по умолчанию 30).
library( nestfs )
options( mc.cores = 10 )
Чтобы запустить вперед выбор из базовой модели, которая содержит только возраст и пол, достаточно следующего:
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
По умолчанию выбор происходит по всем переменным, присутствующим в Data.Frame, которые не являются частью начальной модели. Это можно контролировать с помощью опции choose.from
, которая принимает имена или индексы переменных.
Можно содействовать выбору SPARSER, запрашивая большее улучшение в логарифмическом желании (опция min.llk.diff
): это рекомендуется, особенно когда количество переменных на выбор превышает 10-15, так как наш опыт даже по умолчанию по умолчанию Установка 2 (уже строгие, чем то, что принято другими пакетами) может привести к некоторому переоснащению. В любом случае, можно установить максимальный размер панели, выбранной путем уменьшения количества итераций (опция max.iters
, по умолчанию, установленной 10).
Вложенный форвардный выбор полезен для оценки стабильности процесса отбора, выполняя его при каждом обучении разделения складок перекрестной проверки:
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)
Вывод выше показывает, что bmi
, ltg
, map
и hdl
выбираются во всех складках, и большая часть улучшения подгонки обеспечивается первыми двумя переменными, что согласуется с тем, что было обнаружено при выборе вперед на всех данных.
Самое главное, что вложенный прямой отбор дает перекрестную проверку показателя производительности процесса отбора, которая представляет собой непредвзятую оценку прогнозной производительности выбранных панелей на снятых данных:
nested.performance( nest.res )
# # Correlation coefficient: 0.7097
Это можно сравнить с тем, что получается базовой моделью на одном и том же наборе перекрестной проверки складок:
base.res <- nested.glm( Y ~ age + sex , diabetes , family = gaussian(), folds = folds )
nested.performance( base.res )
# # Correlation coefficient: 0.1551
M. Colombo, HC Lister, B. Farran et al., Молекула травмы почек сыворотки и бета-2-микроглобулин, а также более крупные панели для прогнозирования быстрого снижения функции почек при диабете 2 типа, Диабетология (2019) 62 (62 (62 1): 156-168. https://doi.org/10.1007/S00125-018-4741-9
HC Likeer, M. Colombo, S. Hess et al., Биомаркеры быстрого хронического прогрессирования заболевания почек при диабете 2 типа, Kindy International (2015), 88 (4): 888-896. https://doi.org/10.1038/ki.2015.199
HC Looker, M. Colombo, F. Agakov et al., Белковые биомаркеры для прогнозирования сердечно-сосудистых заболеваний при диабете 2 типа, Diabetologia (2015) 58 (6): 1363-1371. https://doi.org/10.1007/S00125-015-3535-6