R'de nasıl düzeltilir: tekillikler nedeniyle tanımsız
R’de karşılaşabileceğiniz bir hata mesajı:
Coefficients: (1 not defined because of singularities)
Bu hata mesajı, R’de glm() işlevini kullanarak bir model uydurduğunuzda ve tahmin değişkenlerinizin iki veya daha fazlasının birbirleriyle tam bir doğrusal ilişkiye sahip olduğu durumlarda ortaya çıkar; bu, mükemmel çoklu doğrusallık olarak bilinir.
Bu hatayı düzeltmek için, veri kümenizdeki birbiriyle mükemmel korelasyona sahip değişkenleri tanımlamak için cor() işlevini kullanabilir ve bu değişkenlerden birini regresyon modelinden kaldırabilirsiniz.
Bu eğitimde, bu hata mesajıyla pratikte nasıl başa çıkılacağı açıklanmaktadır.
Hata nasıl yeniden oluşturulur?
R’deki aşağıdaki veri çerçevesine bir lojistik regresyon modeli uydurduğumuzu varsayalım:
#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
Katsayı çıktısından hemen önce şu mesajı aldığımızı unutmayın:
Coefficients: (1 not defined because of singularities)
Bu durum, modeldeki iki veya daha fazla yordayıcı değişkenin mükemmel bir doğrusal ilişkiye sahip olduğunu ve dolayısıyla modeldeki tüm regresyon katsayılarının tahmin edilemediğini göstermektedir.
Örneğin, yordayıcı değişken x 2 için hiçbir katsayı tahmini yapılamayacağını unutmayın.
Hata nasıl ele alınır?
Bu hataya hangi yordayıcı değişkenlerin neden olduğunu belirlemek için cor() fonksiyonunu kullanarak birkorelasyon matrisi oluşturabilir ve hangi değişkenlerin birbiriyle tam olarak 1 korelasyona sahip olduğunu inceleyebiliriz:
#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
Korelasyon matrisinden x 1 ve x 2 değişkenlerinin mükemmel korelasyona sahip olduğunu görebiliriz.
Bu hatayı çözmek için, regresyon modelinde aslında benzersiz veya bağımsız bilgi sağlamadıkları için bu iki değişkenden birini basitçe modelden kaldırabiliriz.
Örneğin, x 2’yi çıkardığımızı ve aşağıdaki lojistik regresyon modelini uyguladığımızı varsayalım:
#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
Bu sefer “tekillikler nedeniyle tanımsız” hata mesajı almadığımızı unutmayın.
Not : x 1 veya x 2’yi kaldırmamızın bir önemi yoktur. Nihai model, tutmaya karar verdiğiniz değişken için aynı katsayı tahminini içerecek ve modelin genel uyum iyiliği aynı olacaktır.
Ek kaynaklar
Aşağıdaki eğitimlerde R’deki diğer hataların nasıl ele alınacağı açıklanmaktadır:
R’de nasıl düzeltilir: ExtractVars’ta geçersiz şablon formülü
R’de nasıl düzeltilir: argüman ne sayısal ne de mantıksal: return na
Nasıl düzeltilir: randomForest.default(m, y, …): Yabancı işlev çağrısında Na/NaN/Inf