Come presentare i risultati di un Lazo usando glmnet?


40

Vorrei trovare predittori per una variabile dipendente continua tra un set di 30 variabili indipendenti. Sto usando la regressione di Lasso come implementato nel pacchetto glmnet in R. Ecco un codice fittizio:

# 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 

Le mie domande sono come interpretare l'output:

  • È corretto affermare che nell'output finale tutti i predittori che mostrano un coefficiente diverso da zero sono correlati alla variabile dipendente?

  • Sarebbe una relazione sufficiente nel contesto di una pubblicazione su una rivista? O si prevede che fornirà statistiche di prova per la significatività dei coefficienti? (Il contesto è la genetica umana)

  • È ragionevole calcolare i valori di p o altre statistiche di test per rivendicare un significato? Come sarebbe possibile? Una procedura è implementata in R?

  • Un semplice diagramma di regressione (punti dati tracciati con un adattamento lineare) per ogni predittore sarebbe un modo adatto per visualizzare questi dati?

  • Forse qualcuno può fornire alcuni semplici esempi di articoli pubblicati che mostrano l'uso di Lasso nel contesto di alcuni dati reali e come segnalarlo in un diario?


Perché esegui glmnet nella sezione "adatta al modello"? Non potresti usare anche cvper la fase di previsione?
bourbaki4481472

Risposte:


22

La mia comprensione è che non si può necessariamente dire molto su quali variabili sono "importanti" o hanno effetti "reali" in base al fatto che i loro coefficienti siano diversi da zero. Per fare un esempio estremo, se hai due predittori perfettamente collineari, il lazo sceglierà uno di essi essenzialmente a caso per ottenere il peso completo e l'altro avrà peso zero.

Questo documento , che include uno degli autori di glmnet, presenta alcune analisi basate su glmnet (vedere in particolare: Introduzione, sezioni 2.3 e 4.3 e tabelle 4 e 5). Dando un'occhiata, sembra che non abbiano calcolato il valore P direttamente dal modello glmnet. Hanno calcolato due diversi tipi di valori P usando altri metodi, ma non sembra che si fidino completamente di nessuno dei due.

Non sono sicuro al 100% di ciò che stai suggerendo in termini di metodi di stampa, ma penso che sembri ragionevole.

Spero che sia d'aiuto.


1
Ciao David! Grazie per la risposta. Parlerebbe contro l'uso di LASSO per la selezione di predittori con coefficienti diversi da zero e quindi utilizzerebbe solo quei predittori in un modello di regressione lineare per ottenere valori di p per quanto riguarda il significato dei predittori. Ad esempio, come questo documento: ncbi.nlm.nih.gov/pmc/articles/PMC3412288
jokel

4
@jokel Penso che quello che stai suggerendo sia un caso speciale di "lazo rilassato", e può funzionare molto bene per alcuni scopi. Non sono sicuro che ti puoi fidare dei valori p che otterrai dalla procedura che hai descritto, dal momento che la tua statistica F o statistica t non "saprà" del passaggio di selezione della variabile che hai fatto e il tuo Il tasso di errore di tipo I verrà gonfiato. Un modo di pensare a questo: quale sarebbe il numero corretto di gradi di libertà per una statistica F? Il numero totale di variabili nella regressione LASSO? Il numero di variabili nella regressione secondaria? Qualcosa nel mezzo?
David J. Harris,

Vero - quindi anche questo non sembra essere un approccio valido. Avresti qualche altra idea su come trovare predittori significativi su 300 variabili indipendenti (n >> p come nell'esempio sopra)? In modo che alla fine sarei in grado di affermare: "il predittore X è significativamente correlato alla variabile dipendente Y"?
scherzo il

La mia risposta a tutto ciò in cui non so come fare i calcoli è fare la randomizzazione. Una possibilità potrebbe essere il ricampionamento delle righe del set di dati (ad es. Con bootstrap) e l'esecuzione ripetuta delle analisi LASSO. Più spesso la variabile è inclusa nel modello, più è probabile che sia importante. Un'opzione ancora migliore potrebbe comportare il samling delle righe e delle colonne, che potrebbe aiutare a evitare effetti di "mascheramento". Breiman suggerisce qualcosa di simile in [questo pdf] (vicino alla Figura 2) ( faculty.smu.edu/tfomby/eco5385/lecture/… ).
David J. Harris,

9

Volevo solo sottolineare che ci sono lavori recenti che provano a sviluppare una statistica di test specifica per LASSO, che tiene conto della selezione delle funzioni in corso:

Un test di significatività per il lazo. Richard Lockhart, Jonathan Taylor, Ryan J. Tibshirani, Robert Tibshirani. http://arxiv.org/abs/1301.7161

Non l'ho ancora visto usato nel lavoro applicato, mentre il bootstrap è certamente usato.


0

Per quanto riguarda l'inferenza per i modelli LASSO o elastici, dai un'occhiata ai pacchetti CRAN, Selective Inference e hdi , lo fanno esattamente tenendo conto del passaggio di selezione variabile!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.