Saya mulai mencoba-coba penggunaan glmnet
dengan LASSO Regression di mana hasil yang saya minati menjadi dikotomis. Saya telah membuat bingkai data mock kecil di bawah ini:
age <- c(4, 8, 7, 12, 6, 9, 10, 14, 7)
gender <- c(1, 0, 1, 1, 1, 0, 1, 0, 0)
bmi_p <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88)
m_edu <- c(0, 1, 1, 2, 2, 3, 2, 0, 1)
p_edu <- c(0, 2, 2, 2, 2, 3, 2, 0, 0)
f_color <- c("blue", "blue", "yellow", "red", "red", "yellow", "yellow",
"red", "yellow")
asthma <- c(1, 1, 0, 1, 0, 0, 0, 1, 1)
# df is a data frame for further use!
df <- data.frame(age, gender, bmi_p, m_edu, p_edu, f_color, asthma)
Kolom (variabel) dalam dataset di atas adalah sebagai berikut:
age
(usia anak dalam tahun) - terus menerusgender
- biner (1 = laki-laki; 0 = perempuan)bmi_p
(Persentase BMI) - kontinyum_edu
(tingkat pendidikan tertinggi ibu) - ordinal (0 = kurang dari sekolah tinggi; 1 = ijazah sekolah tinggi; 2 = gelar sarjana; 3 = gelar pasca sarjana muda)p_edu
(tingkat pendidikan tertinggi ayah) - ordinal (sama dengan m_edu)f_color
(warna primer favorit) - nominal ("biru", "merah", atau "kuning")asthma
(status asma anak) - biner (1 = asma; 0 = tidak ada asma)
Tujuan dari contoh ini adalah untuk memanfaatkan Lasso untuk membuat model memprediksi Status asma anak dari daftar 6 variabel prediktor potensial ( age
, gender
, bmi_p
, m_edu
, p_edu
, dan f_color
). Jelas ukuran sampel adalah masalah di sini, tetapi saya berharap untuk mendapatkan lebih banyak wawasan tentang bagaimana menangani berbagai jenis variabel (yaitu, kontinu, ordinal, nominal, dan biner) dalam glmnet
kerangka kerja ketika hasilnya adalah biner (1 = asma ; 0 = tidak ada asma).
Dengan demikian, apakah ada orang yang bersedia memberikan R
skrip sampel bersama dengan penjelasan untuk contoh tiruan ini menggunakan LASSO dengan data di atas untuk memprediksi status asma? Meskipun sangat mendasar, saya tahu saya, dan kemungkinan banyak orang lain di CV, akan sangat menghargai ini!
sumber
dput
suatu yang sebenarnya objek R; jangan membuat pembaca menaruh hiasan di atasnya dan juga membuatkan kue untuk Anda !. Jika Anda menghasilkan bingkai data yang sesuai di R, katakanfoo
, lalu edit ke pertanyaan hasil daridput(foo)
.glmnet
dalam aksi dengan hasil biner.Jawaban:
Variabel kategorikal biasanya pertama-tama ditransformasikan menjadi faktor, kemudian matriks variabel tiruan dari prediktor dibuat dan bersama dengan prediktor kontinu, diteruskan ke model. Perlu diingat, glmnet menggunakan penalti ridge dan laso, tetapi dapat diatur untuk keduanya saja.
Beberapa hasil:
Koefisien dapat diekstraksi dari glmmod. Di sini ditunjukkan dengan 3 variabel yang dipilih.
Terakhir, validasi silang juga dapat digunakan untuk memilih lambda.
sumber
f_color
variabel? Apakah faktor level 1 hingga 4 dianggap sebagai langkah yang lebih besar yaitu 1 hingga 2, atau apakah semua ini memiliki bobot yang sama, tidak searah, dan kategorikal? (Saya ingin menerapkannya pada analisis dengan semua prediktor yang tidak berurutan.)xfactors <- model.matrix(asthma ~ gender + m_edu + p_edu + f_color)[,-1]
kode variabel variabel f_color (seperti yang dinyatakan olehas.factor
di baris sebelumnya). Ini harus menggunakan pengkodean variabel dummy R default, kecualicontrasts.arg
argumen diberikan. Ini berarti semua level f_color memiliki bobot dan non directional yang sama, kecuali untuk yang pertama yang digunakan sebagai kelas referensi dan diserap ke dalam intersep.model.matrix(asthma ~ gender + m_edu + p_edu + f_color + age + bmi_p)[, -1]
memberikan hasil yang sama dengan dua baris di atas? Mengapa menggunakan langkah ekstra untuk menggabungkan variabel kontinu dengandata.frame
?Saya akan menggunakan paket enet karena itu adalah metode yang saya pilih. Ini sedikit lebih fleksibel.
sumber
elasticnet
; Namun, saya tidak tahu harus membuat apa dariR
skrip di atas . Bisakah Anda mengklarifikasi? Terima kasih sebelumnya!Hanya untuk memperluas contoh luar biasa yang diberikan oleh tepuk. Masalah asli menimbulkan variabel ordinal (m_edu, p_edu), dengan urutan bawaan antar level (0 <1 <2 <3). Dalam jawaban asli pat, saya pikir ini diperlakukan sebagai variabel kategori nominal tanpa urutan di antara mereka. Saya mungkin salah, tetapi saya percaya variabel-variabel ini harus dikodekan sedemikian sehingga model menghormati urutan bawaannya. Jika ini dikodekan sebagai faktor yang diurutkan (bukan sebagai faktor yang tidak berurutan seperti dalam jawaban pat) maka glmnet memberikan hasil yang sedikit berbeda ... Saya pikir kode di bawah ini dengan benar memasukkan variabel ordinal sebagai faktor yang dipesan, dan itu memberikan hasil yang sedikit berbeda:
sumber