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:glmnet
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?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 pasonlambda=
?
(P5) ¿ es mejor usarlambda.min
olambda.1se
?Obtenga los coeficientes para ver qué parámetros se han caído ("."):
predict(model, type="coefficients")
En la página de ayuda hay muchos
predict
métodos (por ejemplo,predict.fishnet
,predict.glmnet
,predict.lognet
, etc). Pero cualquier predicción "simple" como vi en un ejemplo.
(P6) debo usarpredict
opredict.glmnet
u 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 caret
para sintonizar alfa y lambda:
trc = trainControl(method=cv, number=10)
fitM = train(x, y, trControl = trC, method="glmnet")
¿ fitM
Reemplaza 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 predict
paso, que puede sustituir model
a 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?
caret
es 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.cva.glmnet(..)
lugar de solocv.glmnet(...)
y sintonizar alfa y lambda al mismo tiempo. Luego puedes correrminlossplot(cva.fit)
para ver qué alfa da el mejor resultado. Esto es parte de glmnetUtils