Comment présenter les résultats d'un lasso utilisant glmnet?

40

J'aimerais trouver des prédicteurs pour une variable dépendante continue sur un ensemble de 30 variables indépendantes. J'utilise la régression de Lasso telle qu'implémentée dans le paquet glmnet de R. Voici du code factice:

# generate a dummy dataset with 30 predictors (10 useful & 20 useless) 
y=rnorm(100)
x1=matrix(rnorm(100*20),100,20)
x2=matrix(y+rnorm(100*10),100,10)
x=cbind(x1,x2)

# use crossvalidation to find the best lambda
library(glmnet)
cv <- cv.glmnet(x,y,alpha=1,nfolds=10)
l <- cv$lambda.min
alpha=1

# fit the model
fits <- glmnet( x, y, family="gaussian", alpha=alpha, nlambda=100)
res <- predict(fits, s=l, type="coefficients")
res 

Ma question est de savoir comment interpréter le résultat:

  • Est-il exact de dire que dans la sortie finale, tous les prédicteurs présentant un coefficient différent de zéro sont liés à la variable dépendante?

  • Serait-ce un rapport suffisant dans le contexte d'une publication de journal? Ou est-il censé fournir des statistiques de test pour la signification des coefficients? (Le contexte est la génétique humaine)

  • Est-il raisonnable de calculer des valeurs p ou d'autres statistiques de test pour revendiquer une signification? Comment serait-ce possible? Une procédure est-elle implémentée dans R?

  • Un simple graphe de régression (points de données avec un ajustement linéaire) pour chaque prédicteur serait-il un moyen approprié de visualiser ces données?

  • Peut-être que quelqu'un peut fournir des exemples simples d'articles publiés montrant l'utilisation de Lasso dans le contexte de données réelles et comment rendre compte de cela dans un journal?

jokel
la source
Pourquoi lancez-vous glmnet dans la section "adapter le modèle"? Ne pourriez-vous pas utiliser également cvpour l'étape de prédiction?
bourbaki4481472

Réponses:

22

Je crois comprendre que vous ne pouvez pas nécessairement dire grand-chose sur les variables qui sont "importantes" ou qui ont des effets "réels" selon que leurs coefficients sont non nuls ou non. Pour donner un exemple extrême, si vous avez deux prédicteurs parfaitement colinéaires, le lasso choisira l’un d’eux essentiellement au hasard pour obtenir le poids total et l’autre aura un poids nul.

Cet article , qui inclut l'un des auteurs de glmnet, présente quelques analyses basées sur glmnet (voir notamment: l'introduction, les sections 2.3 et 4.3 et les tableaux 4 et 5). En parcourant les pages, on dirait qu'ils n'ont pas calculé la valeur de P directement à partir du modèle glmnet. Ils ont calculé deux types différents de valeurs P en utilisant d'autres méthodes, mais ils ne semblent pas avoir pleinement confiance en l'un ou l'autre.

Je ne suis pas sûr à 100% de ce que vous suggérez en termes de méthodes de traçage, mais je pense que cela semble raisonnable.

J'espère que ça t'as aidé.

David J. Harris
la source
1
Salut David! Merci d'avoir répondu. Quelque chose parlerait-il contre l'utilisation de LASSO pour la sélection de prédicteurs avec des coefficients non nuls, puis d'utiliser uniquement ces prédicteurs dans un modèle de régression linéaire pour obtenir des valeurs p concernant la signification des prédicteurs. Par exemple, cet article: ncbi.nlm.nih.gov/pmc/articles/PMC3412288
jokel
4
@jokel Je pense que ce que vous suggérez est un cas spécial du "lasso détendu", et cela peut très bien fonctionner à certaines fins. Je ne suis pas sûr que vous puissiez faire confiance aux valeurs-p que vous obtiendriez de la procédure que vous avez décrite, car votre statistique F ou t-statistique ne "saura" rien de l'étape de sélection des variables que vous avez effectuée, et votre Le taux d'erreur de type I sera gonflé. Une façon de penser à cela: quel serait le nombre correct de degrés de liberté pour une statistique F? Le nombre total de variables dans la régression LASSO? Le nombre de variables dans la régression secondaire? Quelque chose entre les deux?
David J. Harris
Vrai - cela ne semble donc pas être une approche valable non plus. Auriez-vous une autre idée sur la façon de trouver des prédicteurs significatifs sur 300 variables indépendantes (n >> p comme dans l'exemple ci-dessus)? Pour pouvoir finalement dire: "le prédicteur X est significativement lié à la variable dépendante Y"?
Jokel
Ma réponse à tout ce où je ne sais pas comment faire les calculs est de faire de la randomisation. Une possibilité serait de ré-échantillonner les lignes de votre ensemble de données (par exemple avec l'amorçage) et d'exécuter les analyses LASSO à plusieurs reprises. Plus la variable est souvent incluse dans le modèle, plus elle a de chances d'être importante. Une option encore meilleure pourrait impliquer l'échantillonnage des lignes et des colonnes, ce qui pourrait permettre d'éviter les effets de "masquage". Breiman suggère quelque chose de similaire dans [ce pdf] (près de la figure 2) ( faculty.smu.edu/tfomby/eco5385/lecture/… ).
David J. Harris
9

Je souhaitais simplement souligner le fait que des travaux récents tentent de développer une statistique de test spécifique au LASSO, qui prend en compte la sélection de fonctionnalités effectuée:

Un test de signification pour le lasso. Richard Lockhart, Jonathan Taylor, Ryan J. Tibshirani et Robert Tibshirani. http://arxiv.org/abs/1301.7161

Cependant, je n'ai pas encore vu cela dans les applications, alors que l'amorçage est utilisé.

daknowles
la source
0

En ce qui concerne l'inférence pour les modèles LASSO ou en réseau élastique, consultez les packages CRAN sélectiveInference et hdi , ils le font exactement en tenant compte de l'étape de sélection variable!

Tom Wenseleers
la source