¿Puede la regresión logística de glmnet manejar directamente las variables factoriales (categóricas) sin necesidad de variables ficticias? [cerrado]

15

Estoy construyendo una regresión logística en R usando el método LASSO con las funciones cv.glmnetpara seleccionar lambday glmnetpara el modelo final.

Ya conozco todas las desventajas con respecto a la selección automática del modelo, pero necesito hacerlo de todos modos.

Mi problema es que necesito incluir variables factoriales (categóricas) en el modelo, ¿hay alguna forma de hacerlo sin crear muchas variables ficticias? Estas variables son casi todas las cadenas y no números.

Dan
fuente
2
Tengo curiosidad acerca de la mejor manera de hacerlo también.
theforestecologist

Respuestas:

26

glmnet no puede tomar el factor directamente, necesita transformar las variables de factor en dummies. Es solo un paso simple usando model.matrix, por ejemplo:

x_train <- model.matrix( ~ .-1, train[,features])
lm = cv.glmnet(x=x_train,y = as.factor(train$y), intercept=FALSE ,family =   "binomial", alpha=1, nfolds=7)
best_lambda <- lm$lambda[which.min(lm$cvm)]

alpha = 1 construirá un LASSO.

Romain
fuente
1
+1 Gran respuesta! ¿Puedo preguntar por qué usted o alguien por qué uno usa intercepción = FALSO?
Erosennin
Esto parece fallar cuando hay dos variables categóricas: con razón obtengo columnas L1 si var1 tiene niveles L1, pero columnas L2-1 para var2 (que tiene niveles L2).
Peter Straka
@ Peter Straka: suma (sobre dummies L1 para var1) = 1 para todos los registros, y sum (sobre dummies L2 para V2) = 1 para todos los registros, por lo que los dummies L1 para var1 y los dummies L2 para var2 son linealmente dependientes. Al menos uno de los dummies L2 dummies para var2 es redundante (con el propósito de construir un modelo lineal).
VictorZurkowski el