¿Cómo presentar los resultados de un lazo usando glmnet?

40

Me gustaría encontrar predictores para una variable dependiente continua de un conjunto de 30 variables independientes. Estoy usando la regresión Lasso como se implementa en el paquete glmnet en R. Aquí hay un código ficticio:

# 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 

Mi pregunta es cómo interpretar el resultado:

  • ¿Es correcto decir que en el resultado final todos los predictores que muestran un coeficiente diferente de cero están relacionados con la variable dependiente?

  • ¿Sería un informe suficiente en el contexto de una publicación de revista? ¿O se espera que proporcione estadísticas de prueba para la importancia de los coeficientes? (El contexto es la genética humana)

  • ¿Es razonable calcular valores p u otro estadístico de prueba para reclamar significancia? ¿Cómo sería eso posible? ¿Se implementa un procedimiento en R?

  • ¿Sería una forma adecuada de visualizar estos datos una gráfica de regresión simple (puntos de datos trazados con un ajuste lineal) para cada predictor?

  • ¿Quizás alguien pueda proporcionar algunos ejemplos fáciles de artículos publicados que muestren el uso de Lasso en el contexto de algunos datos reales y cómo informar esto en una revista?

jokel
fuente
¿Por qué ejecuta glmnet en la sección "ajustarse al modelo"? ¿No podrías usar también cvpara el paso de predicción?
bourbaki4481472

Respuestas:

22

Tengo entendido que no necesariamente se puede decir mucho sobre qué variables son "importantes" o tienen efectos "reales" en función de si sus coeficientes son distintos de cero. Para dar un ejemplo extremo, si tiene dos predictores que son perfectamente colineales, el lazo seleccionará uno de ellos esencialmente al azar para obtener el peso completo y el otro tendrá un peso cero.

Este papel , que incluye a uno de los autores de glmnet, presenta algunos análisis basados ​​en glmnet (ver especialmente: Introducción, Secciones 2.3 y 4.3, y Tablas 4 y 5). Echando un vistazo, parece que no calcularon el valor P directamente del modelo glmnet. Calcularon dos tipos diferentes de valores P utilizando otros métodos, pero no parece que confíen plenamente en ninguno de ellos.

No estoy 100% seguro de lo que estás sugiriendo en términos de métodos de trazado, pero creo que suena razonable.

Espero que ayude.

David J. Harris
fuente
1
¡Hola David! Gracias por la respuesta. Cualquier cosa hablaría en contra de usar el LASSO para la selección de predictores con coeficientes distintos de cero y luego usar solo esos predictores en un modelo de regresión lineal para obtener valores p con respecto a la importancia de los predictores. Por ejemplo, como este documento: ncbi.nlm.nih.gov/pmc/articles/PMC3412288
jokel
44
@jokel Creo que lo que estás sugiriendo es un caso especial del "lazo relajado", y puede funcionar muy bien para algunos propósitos. Sin embargo, no estoy seguro de que pueda confiar en los valores p que obtendría del procedimiento que ha descrito, ya que su estadística F o estadística t no "sabrá" sobre el paso de selección de variables que hizo, y su La tasa de error tipo I se inflará. Una forma de pensar en esto: ¿cuál sería el número correcto de grados de libertad para una estadística F? ¿El número total de variables en la regresión LASSO? ¿El número de variables en la regresión secundaria? ¿Algo en el medio?
David J. Harris
Es cierto, por lo que tampoco parece ser un enfoque válido. ¿Tendrías alguna otra idea de cómo encontrar predictores significativos de 300 variables independientes (n >> p como en el ejemplo anterior)? ¿De modo que al final podría afirmar: "el predictor X está significativamente relacionado con la variable dependiente Y"?
jokel
Mi respuesta a todo lo que no sé cómo hacer los cálculos es hacer aleatorización. Una posibilidad sería volver a muestrear las filas de su conjunto de datos (por ejemplo, con bootstrapping) y ejecutar los análisis LASSO repetidamente. Cuanto más a menudo se incluya la variable en el modelo, más probable es que sea importante. Una opción aún mejor podría implicar muestrear las filas y columnas, lo que podría ayudar a evitar los efectos de "enmascaramiento". Breiman sugiere algo similar en [este pdf] (cerca de la Figura 2) ( faculty.smu.edu/tfomby/eco5385/lecture/… ).
David J. Harris el
9

Solo quería señalar que hay un trabajo reciente que intenta desarrollar una estadística de prueba específicamente para LASSO, que tiene en cuenta la selección de características que se realiza:

Una prueba de significación para el lazo. Richard Lockhart, Jonathan Taylor, Ryan J. Tibshirani, Robert Tibshirani. http://arxiv.org/abs/1301.7161

Sin embargo, todavía no he visto esto usado en el trabajo aplicado, mientras que ciertamente se usa bootstrapping.

daknowles
fuente
0

Con respecto a la inferencia para LASSO o los modelos de red elástica, eche un vistazo a los paquetes CRAN selectivos de Inferencia e hdi , ¡hacen exactamente eso teniendo en cuenta el paso de selección variable!

Tom Wenseleers
fuente