Lors de l'utilisation de glmnet, comment déclarer la signification de la valeur p pour revendiquer la signification des prédicteurs?

9

J'ai un grand ensemble de prédicteurs (plus de 43 000) pour prédire une variable dépendante qui peut prendre 2 valeurs (0 ou 1). Le nombre d'observations est supérieur à 45 000. La plupart des prédicteurs sont des unigrammes, des bigrammes et des trigrammes de mots, il y a donc un haut degré de colinéarité entre eux. Il y a aussi beaucoup de clarté dans mon jeu de données. J'utilise la régression logistique du package glmnet, qui fonctionne pour le type de jeu de données que j'ai. Mon problème est de savoir comment signaler la valeur de la valeur p des prédicteurs. J'obtiens le coefficient bêta, mais existe-t-il un moyen de prétendre que les coefficients bêta sont statistiquement significatifs?

Voici mon code:

library('glmnet')
data <- read.csv('datafile.csv', header=T)
mat = as.matrix(data)
X = mat[,1:ncol(mat)-1] 
y = mat[,ncol(mat)]
fit <- cv.glmnet(X,y, family="binomial")

Une autre question est la suivante: j'utilise l'alpha = 1, pénalité par lasso par défaut, ce qui pose le problème supplémentaire que si deux prédicteurs sont colinéaires, le lasso choisira l'un d'eux au hasard et affectera un poids bêta nul à l'autre. J'ai également essayé avec une pénalité de crête (alpha = 0) qui attribue des coefficients similaires à des variables hautement corrélées plutôt que de sélectionner l'un d'entre eux. Cependant, le modèle avec pénalité au lasso me donne une déviance beaucoup plus faible que celui avec pénalité de crête. Existe-t-il un autre moyen de signaler les deux prédicteurs qui sont très colinéaires?

bronzer
la source
Cela me semble être plus un problème de classification multivarié que d'être un modèle linéaire.
ADP
merci @ADP quel sera votre modèle suggéré pour ce genre de situation?
bronzage

Réponses:

8

Il existe un nouvel article, A Signi fi cance Test for the Lasso , incluant l'inventeur de LASSO en tant qu'auteur qui rend compte des résultats de ce problème. Il s'agit d'un domaine de recherche relativement nouveau, de sorte que les références dans le document couvrent une grande partie de ce qui est connu à ce stade.

Quant à votre deuxième question, avez-vous essayé ? Il y a souvent une valeur dans cette gamme moyenne qui permet un bon compromis. C'est ce qu'on appelle la régularisation d' Elastic Net . Puisque vous utilisez cv.glmnet, vous souhaiterez probablement effectuer une validation croisée sur une grille de valeurs .α(0,1)(λ,α)

MichaelJ
la source
2

L'inférence post-sélection est un sujet très actif de la recherche statistique. À mon avis, un problème avec la méthode décrite dans Un test de signification pour le Lasso est que des hypothèses strictes sont requises (reproduites à partir d' ici ):

  1. Le modèle linéaire est correct.
  2. La variance est constante.
  3. Les erreurs ont une distribution normale.
  4. Le vecteur de paramètre est clairsemé.
  5. La matrice de conception a une très faible colinéarité. Ceci est généralement indiqué sous la forme d'incohérence, de restrictions de valeurs propres ou d'hypothèses d'incompatibilité.

L'approche que j'ai trouvée utile - tant qu'il y a suffisamment de données disponibles - est le fractionnement des données. L'idée de fractionnement des données remonte au moins à Moran (1974) et implique simplement de diviser les données au hasard en deux ensembles, de faire des choix de modélisation sur le premier ensemble et de faire des inférences sur le second ensemble.

Donc, dans ce cas, vous divisez les données en deux, effectuez une sélection de variables sur la première moitié, puis (en supposant que vous avez n>p) utiliser des techniques de régression standard sur la seconde moitié pour déterminer la signification statistique des coefficients. Bien sûr, des hypothèses sont toujours nécessaires aux deux étapes, mais elles peuvent être plus faciles à satisfaire pour chaque étape individuellement.

Vous mentionnez que les covariables sont uni-, bi- et tri-grammes, donc elles sont très colinéaires. Donc, dans ce cas, appliquer le Lasso dans la première étape violerait également les hypothèses - en particulier, # 5 d'en haut. Donc, pour rendre une telle approche véritablement utile et théoriquement solide, vous devriez faire une sorte de filtrage de colinéarité pré-Lasso.

Zoë Clark
la source
0

Peut-être jetez un œil au package CRAN hdi , celui-ci fournit une inférence pour les modèles de grande dimension et devrait faire l'affaire ... Les méthodes complètes sont un peu fastidieuses à répéter ici (il y en a plusieurs, et c'est toujours un domaine assez actif de recherche), mais ils sont bien décrits dans cet article: http://projecteuclid.org/euclid.ss/1449670857 (Si vous publiez publiquement des données de test ou simulez certaines données, je peux également vous donner un exemple concret)

Tom Wenseleers
la source
Vous ne pouvez pas faire cela et obtenir des valeurs p significatives. Ils ne tiennent pas compte de la variance dans votre sélection de variables.
Matthew Drury
Modifié ma réponse - le package hdi que je cite devrait être OK, et prend en compte la variance causée par votre sélection de variables ...
Tom Wenseleers