A regressão logística glmnet pode lidar diretamente com variáveis ​​fatoriais (categóricas) sem precisar de variáveis ​​dummy? [fechadas]


15

Estou construindo uma regressão logística em R usando o método LASSO com as funções cv.glmnetpara selecionar o modelo final lambdae glmneto.

Já conheço todas as desvantagens em relação à seleção automática de modelo, mas preciso fazê-lo de qualquer maneira.

Meu problema é que preciso incluir variáveis ​​fatoriais (categóricas) no modelo. Existe alguma maneira de fazer isso sem criar muitas variáveis ​​fictícias? Essas variáveis ​​são quase todas as strings e não números.


2
Estou curioso sobre a melhor maneira de fazer isso também.
Theforestecologist

Respostas:


26

O glmnet não pode levar o fator diretamente, você precisa transformar variáveis ​​de fator em manequins. É apenas uma etapa simples usando model.matrix, por exemplo:

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 criará um LASSO.


1
+1 Ótima resposta! Posso perguntar por que você ou alguém, por que alguém usa interceptar = FALSO?
Erosennin

Isso parece falhar quando há duas variáveis ​​categóricas: Estou recebendo corretamente colunas L1 se var1 tiver níveis L1, mas colunas L2-1 para var2 (que possui níveis L2).
Peter Straka

@ Peter Straka: soma (acima de manequins L1 para var1) = 1 para todos os registros e soma (acima de manequins L2 para V2) = 1 para todos os registros; portanto, os manequins L1 para var1 e os manequins L2 para var2 são linearmente dependentes. Pelo menos um dos manequins L2 para var2 é redundante (com a finalidade de construir um modelo linear).
VictorZurkowski 23/10/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.