Selección de características y modelo con glmnet en los datos de metilación (p >> N)

29

Me gustaría usar GLM y Elastic Net para seleccionar esas características relevantes + construir un modelo de regresión lineal (es decir, predicción y comprensión, por lo que sería mejor quedarse con relativamente pocos parámetros). La salida es continua. Son genes por 50 casos. He estado leyendo sobre el paquete, pero no estoy 100% seguro de los pasos a seguir:2000050glmnet

  1. Realice CV para elegir lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) dados los datos de entrada, ¿elegiría un valor alfa diferente?
    (P2) ¿necesito hacer algo más antes de construir el modelo?

  2. Ajustar el modelo:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) ¿ algo mejor que "covarianza"?
    (P4) Si CV eligió lambda, ¿por qué necesita este paso nlambda=?
    (P5) ¿ es mejor usar lambda.mino lambda.1se?

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

    En la página de ayuda hay muchos predictmétodos (por ejemplo, predict.fishnet, predict.glmnet, predict.lognet, etc). Pero cualquier predicción "simple" como vi en un ejemplo.
    (P6) debo usar predicto predict.glmnetu otro?

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

ACTUALIZACIÓN
Basado en "Como se señaló anteriormente, un objeto del tren de clases contiene un elemento llamado finalModel, que es el modelo ajustado con los valores de los parámetros de ajuste seleccionados mediante remuestreo. Este objeto se puede usar de la manera tradicional para generar predicciones para nuevas muestras, usando eso función de predicción del modelo ".

Utilizando caretpara sintonizar alfa y lambda:

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

¿ fitMReemplaza el paso anterior 2? Si es así, ¿cómo especificar las opciones de glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se) ahora?
Y el siguiente predictpaso, que puede sustituir modela fitM?

Si lo hago

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

¿Tiene sentido o estoy mezclando incorrectamente el vocabulario de ambos paquetes?

PGreen
fuente

Respuestas:

42

Parte 1

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

  1. βj
  2. βj

α

αλλcv.glmnet

αλ

Parte 2

Q3

mn?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0.5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλk- Estimación CV doble del error del mejor modelo.

La decisión es tuya:

  1. El mejor modelo que puede ser demasiado complejo o ligeramente sobreajustado: lambda.min
  2. El modelo más simple que tiene un error comparable al mejor modelo dada la incertidumbre: lambda.1se

Parte 3

Este es simple y es algo con lo que te encontrarás mucho con R. Usas la predict()función el 99.9% del tiempo. R organizará el uso de la función correcta para el objeto suministrado como primer argumento.

Más técnicamente, predictes una función genérica, que tiene métodos (versiones de la función) para objetos de diferentes tipos (técnicamente conocidos como clases ). El objeto creado por glmnettiene una clase particular (o clases) dependiendo de qué tipo de modelo se ajusta realmente. glmnet (el paquete) proporciona métodos para la predictfunción de estos diferentes tipos de objetos. R conoce estos métodos y elegirá el apropiado según la clase del objeto suministrado.

Restablece a Mónica - G. Simpson
fuente
2
GRAN respuesta! He leído ahora sobre caret. No estoy 100% seguro de la relación entre caret y el paquete glmnet, por lo que realicé una actualización de mi pregunta para aclarar la 'fusión' de estos paquetes o el cambio de glmnet a caret.
PGreen
1
@PGreen: caretes un paquete de envoltorio R que envuelve las interfaces de funciones de más de 100 paquetes ML para ser más coherente y agrega CV, gridsearch, modifica los valores predeterminados de parámetros, etc. No carece de peculiaridades, pero es bastante bueno y ampliamente utilizado.
smci
Solo quiero agregar que para la afinación alfa puede usar en cva.glmnet(..)lugar de solo cv.glmnet(...)y sintonizar alfa y lambda al mismo tiempo. Luego puedes correr minlossplot(cva.fit)para ver qué alfa da el mejor resultado. Esto es parte de glmnetUtils
Espen Riskedal