Cara memperbaikinya di r: tidak terdefinisi karena singularitas
Pesan kesalahan yang mungkin Anda temui di R adalah:
Coefficients: (1 not defined because of singularities)
Pesan kesalahan ini terjadi ketika Anda menyesuaikan model menggunakan fungsi glm() di R dan dua atau lebih variabel prediktor Anda memiliki hubungan linier yang tepat satu sama lain – yang dikenal sebagai multikolinearitas sempurna .
Untuk memperbaiki kesalahan ini, Anda dapat menggunakan fungsi cor() untuk mengidentifikasi variabel dalam kumpulan data Anda yang memiliki korelasi sempurna satu sama lain dan cukup menghapus salah satu variabel tersebut dari model regresi.
Tutorial ini menjelaskan cara menangani pesan kesalahan ini dalam praktiknya.
Bagaimana cara mereproduksi kesalahan tersebut
Misalkan kita memasukkan model regresi logistik ke kerangka data berikut di R:
#define data
df <- data. frame (y = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
x1 = c(3, 3, 4, 4, 3, 2, 5, 8, 9, 9, 9, 8, 9, 9, 9),
x2 = c(6, 6, 8, 8, 6, 4, 10, 16, 18, 18, 18, 16, 18, 18, 18),
x3 = c(4, 7, 7, 3, 8, 9, 9, 8, 7, 8, 9, 4, 9, 10, 13))
#fit logistic regression model
model <- glm(y~x1+x2+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients: (1 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x2 NA NA NA NA
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
Perhatikan bahwa tepat sebelum keluaran koefisien, kita menerima pesan:
Coefficients: (1 not defined because of singularities)
Hal ini menunjukkan bahwa dua atau lebih variabel prediktor dalam model mempunyai hubungan linier yang sempurna sehingga tidak semua koefisien regresi dalam model dapat diestimasi.
Misalnya, perhatikan bahwa tidak ada estimasi koefisien yang dapat dibuat untuk variabel prediktor x 2 .
Bagaimana cara menangani kesalahan tersebut
Untuk mengidentifikasi variabel prediktor mana yang menyebabkan kesalahan ini, kita dapat menggunakan fungsi cor() untuk menghasilkan matriks korelasi dan memeriksa variabel mana yang memiliki korelasi tepat 1 satu sama lain:
#create correlation matrix
cor(df)
y x1 x2 x3
y 1.0000000 0.9675325 0.9675325 0.3610320
x1 0.9675325 1.0000000 1.0000000 0.3872889
x2 0.9675325 1.0000000 1.0000000 0.3872889
x3 0.3610320 0.3872889 0.3872889 1.0000000
Dari matriks korelasi terlihat bahwa variabel x 1 dan x 2 berkorelasi sempurna.
Untuk mengatasi kesalahan ini, kita cukup menghapus salah satu dari dua variabel ini dari model, karena variabel tersebut sebenarnya tidak memberikan informasi unik atau independen dalam model regresi.
Misalnya, kita menghapus x 2 dan menyesuaikan model regresi logistik berikut:
#fit logistic regression model
model <- glm(y~x1+x3, data=df, family=binomial)
#view model summary
summary(model)
Call:
glm(formula = y ~ x1 + x3, family = binomial, data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.372e-05 -2.110e-08 2.110e-08 2.110e-08 1.575e-05
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -75.496 176487.031 0.000 1
x1 14.546 24314.459 0.001 1
x3 -2.258 20119.863 0.000 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2.0728e+01 on 14 degrees of freedom
Residual deviance: 5.1523e-10 on 12 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
Perhatikan bahwa kami tidak menerima pesan kesalahan “tidak terdefinisi karena singularitas” kali ini.
Catatan : Tidak masalah apakah kita menghapus x 1 atau x 2 . Model akhir akan berisi estimasi koefisien yang sama untuk variabel yang Anda putuskan untuk dipertahankan dan kesesuaian model secara keseluruhan akan sama.
Sumber daya tambahan
Tutorial berikut menjelaskan cara menangani kesalahan lain di R:
Cara memperbaiki di R: Rumus template tidak valid di ExtractVars
Cara memperbaikinya di R: argumen bukan numerik atau logis: return na
Cara memperbaiki: randomForest.default(m, y, …): Na/NaN/Inf dalam panggilan fungsi asing