31 votos

La selección de características y modelo con glmnet en los datos de la Metilación (p>>N)

Me gustaría usar el GLM y Red Elástica para seleccionar las características relevantes de + construir un modelo de regresión lineal (es decir, tanto la predicción y comprensión, por lo que sería mejor quedarse con relativamente pocos parámetros). La salida es continua. Es $20000$ genes por $50$ de los casos. He estado leyendo acerca de la glmnet paquete, pero no estoy 100% seguro de los pasos a seguir:

  1. Realizar un CV a elegir lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) dado los datos de entrada, elegir un diferente valor de alfa?
    (Q2) ¿tengo que hacer algo más antes de construir el modelo?

  2. Ajuste del modelo:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (T3) nada mejor que "covarianza"?
    (P4) Si lambda fue elegido por el CV, ¿por qué este paso necesita nlambda=?
    (P5) es mejor, lambda.min o lambda.1se?

  3. Obtener los coeficientes, para ver que parámetros se han caído ("."):
    predict(model, type="coefficients")

    En la página de ayuda hay muchas predict métodos (por ejemplo, predict.fishnet, predict.glmnet, predict.lognet, etc). Pero cualquier "normal" predecir como vi en un ejemplo.
    (P6) debo usar predict o predict.glmnet o de otro tipo?

A pesar de lo que he leído acerca de los métodos de regularización, soy bastante nuevo en R y en estos paquetes estadísticos, así que es difícil estar seguro de si estoy adaptando mi problema con el código. Cualquier sugerencia será bienvenida.

ACTUALIZACIÓN
Basado en "Como se señaló anteriormente, un objeto de la clase tren, contiene un elemento llamado finalModel, que es el modelo ajustado con el parámetro de ajuste de los valores seleccionados por el remuestreo. Este objeto puede ser utilizado de forma tradicional para generar predicciones para las nuevas muestras, el uso de la modelo predecir la función".

El uso de caret de sintonizar alfa y lambda:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

No fitM reemplazar el anterior paso 2? Si es así, cómo especificar el glmnet opciones (type.gaussian="naive",lambda=cv$lambda.min/1se) ahora?
Y el siguiente predict paso, ¿se puede reemplazar el model a fitM?

Si hago

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

¿tiene sentido, en todo o soy yo incorrectamente la mezcla de ambas paquete de vocabulario?

46voto

David J. Sokol Puntos 1730

Parte 1

En la red elástica dos tipos de restricciones sobre los parámetros que se emplean

  1. Lazo de restricciones (es decir, el tamaño de los valores absolutos de $\beta_j$)
  2. Ridge restricciones (es decir, el tamaño de los cuadrados de los valores de $\beta_j$)

$\alpha$ controles de la ponderación relativa de los dos tipos. El Lazo de las limitaciones de permitir la selección/eliminación de variables en el modelo. La cresta restricciones pueden lidiar con variables colineales. Que poner más peso sobre dependerá de las propiedades de los datos; un montón de correlación de las variables puede necesitar limitaciones, un par de correlación de las variables podría sugerir más énfasis en la cresta de las restricciones.

Una forma de resolver esto es tratar a $\alpha$ como un parámetro de ajuste junto a $\lambda$ y el uso de los valores que dan el menor CV error, de la misma manera que se ajuste más a $\lambda$ en el momento de la cv.glmnet.

El paquete de R símbolo de intercalación puede construir modelos de uso de la glmnet paquete y debe ser configurado para sintonizar a través de ambos parámetros $\alpha$$\lambda$.

Parte 2

Q3

Sí, en este caso donde $m \gg n$ (número de variables $\gg$ número de observaciones), la página de ayuda para ?glmnet sugiere la utilización de

type.gaussian = "naive"

En lugar de almacenar todo el interior-productos calculadas a lo largo del camino, que puede ser muy ineficiente con un gran número de variables, o al $m \gg n$, "naive" opción de recorrer $n$ cada vez que es necesario para el equipo interno de productos.

Si no se especifica este argumento, glmnet habría escogido "naive" de todos modos como $m > 500$, pero es mejor especificar explícitamente el caso de que el y los valores predeterminados de las opciones de cambiar más adelante en el paquete y se ejecuta el código en una fecha futura.

T4

Respuesta corta, no es necesario especificar un valor alto para nlambda ahora que usted ha elegido un valor óptimo, condicionado a $\alpha = 0.5$. Sin embargo, si usted desea trazar el coeficiente de caminos, etc, a continuación, tener un modesto conjunto de valores de $\lambda$ sobre el intervalo de resultados en una mucho mejor conjunto de rutas. La carga computacional de hacer toda la ruta de acceso relativa a un determinado $\lambda$ no es grande, el resultado de un gran esfuerzo para desarrollar algoritmos para hacer este trabajo correctamente. Acabo de salir de nlambda en el valor predeterminado, a menos que hace una diferencia apreciable en el tiempo de cálculo.

Q5

Esta es una pregunta acerca de la parsimonia. El lambda.min opción se refiere al valor de $\lambda$ en el menor CV de error. El error en este valor de $\lambda$ es el promedio de los errores a lo largo de la $k$ pliegues y por lo tanto, esta estimación del error es incierto. El lambda.1se representa el valor de $\lambda$ en la búsqueda de que era más sencillo que el mejor modelo (lambda.min), pero que tiene el error dentro de 1 error estándar de la mejor modelo. En otras palabras, utilizando el valor de lambda.1se como el valor seleccionado para la $\lambda$ resultados en un modelo que es un poco más simple que el mejor modelo, pero que no puede ser distinguido de la mejor modelo en términos de error dada la incertidumbre en la $k$veces CV estimación del error de la mejor modelo.

La elección es suya:

  1. El mejor modelo que puede ser demasiado compleja ligeramente overfitted: lambda.min
  2. El modelo más simple que se ha comparable error a la mejor modelo dada la incertidumbre: lambda.1se

Parte 3

Esta es una sencilla y es algo que te va a venir a través de un montón con R. utilice el predict() función 99.9% del tiempo. R hará los arreglos para el uso correcto de la función del objeto suministrado como el primer argumento.

Más técnicamente, predict es una función genérica, que tiene métodos (versiones de la función) para los objetos de diferentes tipos (técnicamente conocido como clases). El objeto creado por glmnet tiene una particular clase (o clases) dependiendo de qué tipo de modelo es equipado. glmnet (el paquete) proporciona métodos para el predict función para estos diferentes tipos de objetos. R sabe acerca de estos métodos y elegir el que corresponda según la clase del objeto suministrado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X