NESTFS fournit une implémentation de la sélection directe basée sur la régression linéaire et logistique qui adopte la validation croisée comme composant central de la procédure de sélection.
La sélection vers l'avant est une approche intrinsèquement lente, car pour chaque variable, un modèle doit être ajusté. Dans notre mise en œuvre, cette question est encore aggravée par le fait qu'une validation croisée intérieure se produit à chaque itération, dans le but de guider la sélection vers des variables qui ont de meilleures propriétés de généralisation.
Le code est parallélisé sur les plis intérieurs, grâce au package parallèle . Le temps de l'utilisateur dépend donc du nombre de cœurs disponibles, mais il n'y a aucun avantage à utiliser plus de cœurs que les plis intérieurs. Le nombre de cœurs attribués aux calculs doit être enregistré avant de commencer par définir l'option "MC.Cores".
Le principal avantage de la sélection directe est qu'il fournit un modèle immédiatement interprétable, et le panel de variables obtenu est en quelque sorte le moins redondant, en particulier si le nombre de variables à choisir n'est pas trop grand (d'après notre expérience, jusqu'à environ 30 à 40 variables).
Cependant, lorsque le nombre de variables est beaucoup plus grand que cela, la sélection avant, en plus d'être insupportablement lente, peut être plus soumise à un sur-ajustement, qui est à la nature de sa conception gourmand.
Un forfait précompilé est disponible sur Cran.
Chargez d'abord le package et enregistrez le nombre de cœurs à utiliser en définissant l'option mc.cores
. Si vous avez la chance de travailler sur une grande machine multiccore, les meilleures performances sont obtenues en enregistrant autant de cœurs que le nombre de plis intérieurs utilisés (la valeur par défaut est 30).
library( nestfs )
options( mc.cores = 10 )
Pour exécuter la sélection à partir d'un modèle de base qui ne contient que l'âge et le sexe, ce qui suit est suffisant:
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
Par défaut, la sélection se produit sur toutes les variables présentes dans les données.frame qui ne fait pas partie du modèle initial. Ceci peut être contrôlé via l'option choose.from
, qui accepte des noms de variables ou des indices.
Il est possible de promouvoir la sélection plus claire en demandant une amélioration plus importante du journal de journal (option min.llk.diff
): Ceci est conseillé en particulier lorsque le nombre de variables à choisir dépasse 10-15, car c'est notre expérience que même le défaut par défaut Le réglage de 2 (déjà plus strict que ce qui a adopté par d'autres packages) peut conduire à un certain sur-ajustement. Dans tous les cas, il est possible de définir une taille maximale du panneau sélectionné en réduisant le nombre d'itérations (option max.iters
, par défaut réglé sur 10).
La sélection de transfert imbriquée est utile pour évaluer la stabilité du processus de sélection en la effectuant sur chaque division de formation des plis de validation croisée:
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)
La sortie ci-dessus montre que bmi
, ltg
, map
et hdl
sont choisis dans tous les plis, et la majeure partie de l'amélioration de l'ajustement est fournie par les deux premières variables, ce qui est d'accord avec ce qui a été trouvé lors de la sélection à l'avance sur toutes les données.
Plus important encore, la sélection de transfert imbriquée produit une mesure transversale de la performance du processus de sélection, qui est une estimation impartiale des performances prédictives des panneaux sélectionnés sur les données retirées:
nested.performance( nest.res )
# # Correlation coefficient: 0.7097
Cela peut être comparé à ce qui est obtenu par le modèle de base sur le même ensemble de plis de validation croisée:
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., La molécule de blessure rénale sérique 1 et la bêta-2-microglobuline permettent ainsi que des panneaux plus grands pour la prédiction du déclin rapide de la fonction rénale dans le diabète de type 2, Diabetologia (2019) 62 ( 1): 156-168. https://doi.org/10.1007/S00125-018-4741-9
HC Looker, M. Colombo, S. Hess et al., Biomarkers of Rapid Chronic rénal La progression de la maladie rénale dans le diabète de type 2, Kidney International (2015), 88 (4): 888-896. https://doi.org/10.1038/ki.2015.199
HC Looker, M. Colombo, F. Agakov et al., Biomarqueurs des protéines pour la prédiction des maladies cardiovasculaires dans le diabète de type 2, Diabetologia (2015) 58 (6): 1363-1371. https://doi.org/10.1007/S00125-015-3535-6