La regressione logistica di glmnet può gestire direttamente le variabili fattoriali (categoriche) senza la necessità di variabili fittizie? [chiuso]


15

Sto costruendo una regressione logistica in R usando il metodo LASSO con le funzioni cv.glmnetper selezionare il lambdae glmnetper il modello finale.

Conosco già tutti gli svantaggi della selezione automatica del modello, ma devo comunque farlo.

Il mio problema è che devo includere le variabili fattore (categoriche) nel modello, c'è un modo per farlo senza creare molte variabili fittizie? Queste variabili sono quasi tutte stringhe e non numeri.


2
Sono curioso di sapere anche il modo migliore per farlo.
forestecologo il

Risposte:


26

glmnet non può prendere direttamente il fattore, è necessario trasformare le variabili fattore in manichini. È solo un semplice passaggio utilizzando model.matrix, ad esempio:

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 costruirà un LASSO.


1
+1 Ottima risposta! Posso chiederti perché tu o qualcuno perché si usa interccept = FALSE?
Erosennin,

Questo sembra fallire quando ci sono due variabili categoriche: ottengo giustamente colonne L1 se var1 ha livelli L1, ma colonne L2-1 per var2 (che ha livelli L2).
Peter Straka,

@Peter Straka: somma (oltre i manichini L1 per var1) = 1 per tutti i record e somma (oltre i manichini L2 per V2) = 1 per tutti i record, quindi i manichini L1 per var1 e i manichini L2 per var2 sono linearmente dipendenti. Almeno uno dei manichini L2 manichini per var2 è ridondante (allo scopo di costruire un modello lineare).
VictorZurkowski il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.