NESTFS基于线性和逻辑回归提供了前向选择的实现,该回归采用了交叉验证作为选择过程的核心组成部分。
正向选择是一种固有的缓慢方法,因为对于每个变量,模型都需要拟合。在我们的实施中,在每次迭代中发生内部交叉验证的事实进一步加剧了这个问题,目的是指导选择具有更好概括属性的变量。
得益于并行软件包,该代码在内部折叠上并行。因此,用户时间取决于可用核心的数量,但是使用比内褶皱更多的内核没有优势。从设置“ mc.cors”选项开始之前,必须在计算中分配给计算的内核数。
正向选择的主要优点是它提供了一个立即解释的模型,并且获得的变量面板在某种意义上是最少的冗余模型,尤其是如果可供选择的变量数量不大(根据我们的经验,约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
。
可以通过要求更大的日志样品(选项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 Looker,B。Farran等人,血清肾脏损伤分子1和β-2-微球蛋白的表现和较大的面板,以预测2型糖尿病的肾功能快速下降,糖尿病学,2019年(2019年)62(62)(62)( 1):156-168。 https://doi.org/10.1007/s00125-018-4741-9
HC Looker,M。Colombo,S。Hess等人,2型糖尿病快速肾脏疾病进展的生物标志物,肾脏国际(2015),88(4):888-896。 https://doi.org/10.1038/ki.2015.199
HC Looker,M。Colombo,F。Agakov等人,2型糖尿病中心血管疾病预测的蛋白质生物标志物,Diabetologia(2015)58(6):1363-1371。 https://doi.org/10.1007/s00125-015-3535-6