Dapatkah glmnet regresi logistik langsung menangani variabel faktor (kategori) tanpa memerlukan variabel dummy? [Tutup]

15

Saya sedang membangun regresi logistik di R menggunakan metode LASSO dengan fungsi cv.glmnetuntuk memilih lambdadan glmnetuntuk model akhir.

Saya sudah tahu semua kelemahan mengenai pemilihan model otomatis tetapi saya harus tetap melakukannya.

Masalah saya adalah bahwa saya perlu memasukkan variabel faktor (kategori) dalam model, apakah ada cara untuk melakukannya tanpa membuat banyak variabel dummy? Variabel ini hampir semua string dan bukan angka.

Dan
sumber
2
Saya ingin tahu tentang cara terbaik untuk melakukan ini juga.
theforestecologist

Jawaban:

26

glmnet tidak dapat mengambil faktor secara langsung, Anda perlu mengubah variabel faktor menjadi boneka. Ini hanya satu langkah sederhana menggunakan model.matrix, misalnya:

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 akan membangun LASSO.

Romain
sumber
1
+1 Jawaban bagus! Bolehkah saya bertanya mengapa Anda atau siapa pun mengapa seseorang menggunakan intersep = SALAH?
Erosennin
Ini tampaknya gagal ketika ada dua variabel kategori: Saya benar mendapatkan kolom L1 jika var1 memiliki level L1, tetapi kolom L2-1 untuk var2 (yang memiliki level L2).
Peter Straka
@Peter Straka: jumlah (lebih dari L1 boneka untuk var1) = 1 untuk semua catatan, dan jumlah (lebih dari L2 boneka untuk V2) = 1 untuk semua catatan, sehingga boneka L1 untuk var1 dan boneka L2 untuk var2 bergantung secara linear. Setidaknya salah satu boneka L2 boneka untuk var2 berlebihan (untuk tujuan membangun model linier).
VictorZurkowski