Cara menangani r peringatan: glm.fit: algoritma tidak menyatu
Peringatan umum yang mungkin Anda temui di R adalah:
glm.fit: algorithm did not converge
Peringatan ini sering terjadi ketika Anda mencoba menyesuaikan model regresi logistik di R dan melihat pemisahan yang sempurna , yaitu variabel prediktor mampu memisahkan variabel respons dengan sempurna menjadi 0 dan 1.
Contoh berikut menunjukkan cara menangani peringatan ini dalam praktiknya.
Cara mereproduksi peringatan tersebut
Misalkan kita mencoba menyesuaikan model regresi logistik berikut di R:
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#attempt to fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept)x
-409.1 431.1
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.19
Residual Deviance: 2.468e-09 AIC: 4
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
Perhatikan bahwa kami menerima pesan peringatan: glm.fit: algoritma tidak menyatu .
Pesan ini kita terima karena variabel prediktor x mampu memisahkan variabel respon y menjadi 0 dan 1 dengan sempurna.
Perhatikan bahwa untuk setiap nilai x yang kurang dari 1, y sama dengan 0. Dan untuk setiap nilai x yang sama dengan atau lebih besar dari 1, y sama dengan 1.
Kode berikut menunjukkan skenario ketika variabel prediktor tidak mampu memisahkan variabel respons menjadi 0 dan 1 dengan sempurna:
#create data frame
df <- data. frame (x=c(.1, .2, .3, .4, .5, .6, .7, .8, .9, 1, 1, 1.1, 1.3, 1.5, 1.7),
y=c(0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1))
#fit logistic regression model
glm(y~x, data=df, family=" binomial ")
Call: glm(formula = y ~ x, family = "binomial", data = df)
Coefficients:
(Intercept) x
-2.112 2.886
Degrees of Freedom: 14 Total (ie Null); 13 Residual
Null Deviance: 20.73
Residual Deviance: 16.31 AIC: 20.31
Kami tidak menerima pesan peringatan apa pun karena variabel prediktor tidak dapat memisahkan variabel respons menjadi 0 dan 1 dengan sempurna.
Bagaimana menangani peringatan tersebut
Jika kita menghadapi skenario pemisahan yang sempurna, ada dua cara untuk menanganinya:
Metode 1: Gunakan regresi yang diberi sanksi.
Salah satu pilihannya adalah dengan menggunakan bentuk regresi logistik yang dikenakan sanksi seperti regresi logistik laso atau regularisasi jaring elastis.
Lihat paket glmnet untuk opsi tentang cara menerapkan regresi logistik yang dikenakan sanksi di R.
Metode 2: Gunakan variabel prediktor untuk memprediksi variabel respon dengan sempurna.
Jika Anda menduga bahwa pemisahan sempurna ini mungkin ada dalam populasi, Anda cukup menggunakan variabel prediktor ini untuk memprediksi dengan sempurna nilai variabel respons.
Misalnya, pada skenario di atas, kita melihat bahwa variabel respon y selalu sama dengan 0 ketika variabel prediktor x kurang dari 1.
Jika kita mencurigai bahwa hubungan ini berlaku pada keseluruhan populasi, kita selalu dapat memprediksi bahwa nilai y akan menjadi 0 ketika x kurang dari 1 dan tidak perlu khawatir untuk menerapkan model regresi logistik yang dikenakan sanksi.
Sumber daya tambahan
Tutorial berikut memberikan informasi tambahan tentang penggunaan fungsi glm() di R:
Perbedaan antara glm dan lm di R
Cara menggunakan fungsi prediksi dengan glm di R
Cara menangani: glm.fit: probabilitas yang disesuaikan secara numerik 0 atau 1 terjadi