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