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
オプションを介して制御できます。
対数尤度の大幅な改善を要求することでスパースの選択を促進することは可能です(オプションmin.llk.diff
):これは、特に10〜15を超える変数の数がデフォルトでさえ経験でさえある場合に勧めます。 2の設定(他のパッケージで採用されているものよりも既により厳格)は、何らかの過剰適合につながる可能性があります。いずれにせよ、反復回数を減らすことにより選択されたパネルの最大サイズを設定することができます( max.iters
では10に設定)。
ネストされたフォワード選択は、クロス検証foldの各トレーニング分割でそれを実行することにより、選択プロセスの安定性を評価するのに役立ちます。
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
すべての折り目で選択されていることを示しており、FITの改善のほとんどは最初の2つの変数によって提供されます。
最も重要なことは、ネストされたフォワード選択は、選択プロセスの相互検証されたパフォーマンスの尺度を生成することです。これは、引き出されたデータの選択したパネルの予測パフォーマンスの公平な推定値です。
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。Farranet al。、血清腎障害分子1およびベータ-2-ミクログロブリンは、2型糖尿病における腎機能の急速な低下の予測のためのより大きなパネル、糖尿病(2019)62( 1):156-168。 https://doi.org/10.1007/S00125-018-4741-9
HC Looker、M。Colombo、S。Hesset al。、2型糖尿病における急速な慢性腎疾患の進行のバイオマーカー、Kidney International(2015)、88(4):888-896。 https://doi.org/10.1038/ki.2015.199
HC Looker、M。Colombo、F。Agakovet al。、2型糖尿病における心血管疾患の予測のためのタンパク質バイオマーカー、糖尿病(2015)58(6):1363-1371。 https://doi.org/10.1007/S00125-015-3535-6