Multinominal Lojistik Regresyon Özellikleri

Multinominal Lojistik Regresyon(MLR) bağımlı değişkenin 3 veya daha fazla kategoriye sahip olduğu durumlarda kullanılır. MLR’de amaç bağımlı değişkenin kategorilerinin olasılıklarını bağımsız değişkenlerle açıklamaktır. Basit lojistik regresyon yetersiz kaldığında, çok kategorili sonuçları modellemek için MLR kullanılır.

Veri Seti

MLR’de bağımlı değişkenin en az 3 kategorili olduğu bir veri seti bulmak için yapay zekadan destek aldım. Bunun sonucunda R’da yer alan ve daha önce R’a giriş dersinde de kullandığımız Iris veri setini kullanmaya karar verdim. Iris veri setinde bağımlı değişken Species; Setosa, Versicolor, Virginica olmak üzere 3 kategoriden oluşmaktadır. Bağımsız değişkenler ise Sepal.Length, Sepal.Width, Petal.Length, Petal.Width.’ten meydana gelmektedir.

Analiz

library(dplyr)
iris %>% group_by(Species) %>% 
  summarise(n=n(),
            ort=mean(Petal.Length),
            sd=sd(Petal.Length))
## # A tibble: 3 × 4
##   Species        n   ort    sd
##   <fct>      <int> <dbl> <dbl>
## 1 setosa        50  1.46 0.174
## 2 versicolor    50  4.26 0.470
## 3 virginica     50  5.55 0.552

Faktör Dönüşümleri

levels(iris$Species) <- c("Setosa", "Versicolor", "Virginica")

iris$Species <- relevel(iris$Species, ref = "Setosa")

MLR Modelinin Kurulması

library(nnet)
model1 <- multinom(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris)
## # weights:  18 (10 variable)
## initial  value 164.791843 
## iter  10 value 16.177348
## iter  20 value 7.111438
## iter  30 value 6.182999
## iter  40 value 5.984028
## iter  50 value 5.961278
## iter  60 value 5.954900
## iter  70 value 5.951851
## iter  80 value 5.950343
## iter  90 value 5.949904
## iter 100 value 5.949867
## final  value 5.949867 
## stopped after 100 iterations
summary(model1)
## Call:
## multinom(formula = Species ~ Sepal.Length + Sepal.Width + Petal.Length + 
##     Petal.Width, data = iris)
## 
## Coefficients:
##            (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
## Versicolor    18.69037    -5.458424   -8.707401     14.24477   -3.097684
## Virginica    -23.83628    -7.923634  -15.370769     23.65978   15.135301
## 
## Std. Errors:
##            (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
## Versicolor    34.97116     89.89215    157.0415     60.19170    45.48852
## Virginica     35.76649     89.91153    157.1196     60.46753    45.93406
## 
## Residual Deviance: 11.89973 
## AIC: 31.89973
library(sjPlot)
tab_model(model1, show.ci = FALSE, show.se = FALSE, show.p = TRUE)
  Species
Predictors Odds Ratios p Response
(Intercept) 130956302.52 0.594 Versicolor
Sepal Length 0.00 0.952 Versicolor
Sepal Width 0.00 0.956 Versicolor
Petal Length 1536119.71 0.813 Versicolor
Petal Width 0.05 0.946 Versicolor
(Intercept) 0.00 0.506 Virginica
Sepal Length 0.00 0.930 Virginica
Sepal Width 0.00 0.922 Virginica
Petal Length 18850009278.07 0.696 Virginica
Petal Width 3742635.30 0.742 Virginica
Observations 150
R2 / R2 adjusted 0.964 / 0.958
library(parameters)
model_parameters(model1)
## # Response level: versicolor
## 
## Parameter    | Log-Odds |     SE |            95% CI |     z |     p
## --------------------------------------------------------------------
## (Intercept)  |    18.69 |  34.97 | [ -49.85,  87.23] |  0.53 | 0.593
## Sepal Length |    -5.46 |  89.89 | [-181.64, 170.73] | -0.06 | 0.952
## Sepal Width  |    -8.71 | 157.04 | [-316.50, 299.09] | -0.06 | 0.956
## Petal Length |    14.24 |  60.19 | [-103.73, 132.22] |  0.24 | 0.813
## Petal Width  |    -3.10 |  45.49 | [ -92.25,  86.06] | -0.07 | 0.946
## 
## # Response level: virginica
## 
## Parameter    | Log-Odds |     SE |            95% CI |     z |     p
## --------------------------------------------------------------------
## (Intercept)  |   -23.84 |  35.77 | [ -93.94,  46.26] | -0.67 | 0.505
## Sepal Length |    -7.92 |  89.91 | [-184.15, 168.30] | -0.09 | 0.930
## Sepal Width  |   -15.37 | 157.12 | [-323.32, 292.58] | -0.10 | 0.922
## Petal Length |    23.66 |  60.47 | [ -94.85, 142.17] |  0.39 | 0.696
## Petal Width  |    15.14 |  45.93 | [ -74.89, 105.16] |  0.33 | 0.742

Pseduo R2 Değeri

library(pscl)
pR2(model1)
## fitting null model for pseudo-r2
## # weights:  6 (2 variable)
## initial  value 164.791843 
## final  value 164.791843 
## converged
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
##   -5.9498671 -164.7918433  317.6839523    0.9638947    0.8797152    0.9896796

0.964 McFadden pseudo-R² değeri için; 0.2–0.4 arası “iyi uyum” kabul edilirken, 0.96 olağanüstü yüksek bir değer. Yorum olarak Model, bağımlı değişkeni açıklamada çok güçlü diyebiliriz.

r2ML = 0.880 Maksimum likelihood tabanlı pseudo-R². r2CU = 0.990 Nagelkerke pseudo-R². Her ikisi de 0.8–0.9’un üzerinde olduğundan modelin açıklayıcılığı çok yüksek diyebiliriz.

Odds Ratio

exp(coef(model1))
##             (Intercept) Sepal.Length  Sepal.Width Petal.Length  Petal.Width
## Versicolor 1.309563e+08 0.0042602646 1.653575e-04      1536120 4.515366e-02
## Virginica  4.446690e-11 0.0003620841 2.111348e-07  18850009278 3.742635e+06

Yorumlama

Odds ratio > 1 olduğunda ilgili değişken arttığında kategoriye girme olasılığı referansa göre katlanarak artar. Odds ratio < 1 olduğunda ilgili değişken arttığında kategoriye girme olasılığı referansa göre katlanarak azalır. Odds ratio ≈ 1 olduğunda değişkenin etkisi yok denecek kadar azdır.

Versicolor vs Setosa Sepal.Length (0.00426) odds ratio değeri yaklaşık 1.004. Sepal uzunluğu 1 birim arttığında, Versicolor olma oddsunu Setosa’ya göre 1.004 katına çıkar. - Sepal.Width (0.000165) odds ratio değeri yaklaşık 1.00016. Sepal genişliği 1 birim arttığında, Versicolor olma oddsunu Setosa’ya göre 1.00016 katına çıkar (neredeyse değişmez). - Petal.Length (1,536,120) odds ratio değeri yaklaşık çok büyük. Petal uzunluğu 1 birim arttığında, Versicolor olma oddsunu Setosa’ya göre astronomik katlara çıkar. - Petal.Width (0.045) odds ratio değeri yaklaşık 1.046. Petal genişliği 1 birim arttığında, Versicolor olma oddsunu Setosa’ya göre 1.046 katına çıkar.

Yordanan Olasılıklar

pred_probs <- fitted(model1)
head(pred_probs)
##      Setosa   Versicolor    Virginica
## 1 1.0000000 1.526406e-09 2.716417e-36
## 2 0.9999996 3.536476e-07 2.883729e-32
## 3 1.0000000 4.443506e-08 6.103424e-34
## 4 0.9999968 3.163905e-06 7.117010e-31
## 5 1.0000000 1.102983e-09 1.289946e-36
## 6 1.0000000 3.521573e-10 1.344907e-35

Modelde Versicolor ve Virginica olasılıkları sıfıra çok yakın olduğu için model, bu gözlemin neredeyse kesinlikle Setosa olduğunu tahmin ediyor yorumu yapılabilir. DEğerler 0’a yakın olduğundan aynı şekilde Veriscolor ve Virginica için de aynı yorumlar yapılabilir.

Değişkenlerin Etkisini Grafikte Karşılaştırılması

library(sjPlot)
plot_model(model1, show.values = TRUE, show.p = TRUE)

Sınıflandırma Tablosu

pred_class <- predict(model1, type="class")
table(pred_class, iris$Species)
##             
## pred_class   Setosa Versicolor Virginica
##   Setosa         50          0         0
##   Versicolor      0         49         1
##   Virginica       0          1        49

Toplam 150 gözlemden 148’i doğru tahmin edilmiştir.(yaklaşık %98,7)