Lojistik regresyon analizi yöntemlerinden biri olan binary (ikili: binomial) lojistik regresyon analiz yöntemi, bağımlı değişkenin ya da cevap değişkeninin iki kategoriye sahip olduğu durumlarda bağımlı değişkenler (dependent variables) ile bağımsız değişken veya değişkenler (independent variables) arasındaki ilişkiyi ortaya koyan regresyon analiz yöntemidir. Burada bağımlı değişkenin binomial olmasından kasıt kategorik değişkenin iki cevap seçeneği olduğu anlaşılmalıdır. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri Şekil 1’de verilmiştir.
Şekil 1: Veri Tipleri
Nicel Veri (Quantitative Data)
Şekil 1’de verilen sunulan nicel veri tipi ölçülebilen veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek verelim.
- Sürekli veri: Tam sayı ile ifade edilmeyen veri tipi olup, zaman, sıcaklık, beden kitle endeksi, boy ve ağırlık ölçümleri bu veri tipine örnek verilebilir.
- Kesikli veri: Tam sayı ile ifade edilebilen veri tipi olup, bu veri tipine proje sayısı, popülasyon sayısı, öğrenci sayısı örnek verilebilir.
Nitel Veri (Qualitative Data)
Şekil 1’de verilen sunulan nitel veri tipi ölçülemeyen ve kategori belirten veri tipi olup, kendi içerisinde temel olarak ikiye ayrılmaktadır. Bu veri tipine alt sınıflandırmalar dikkate alınarak sırasıyla örnek vererek ele alalım.
- Nominal veri: İki veya daha fazla cevap kategorisi olan ve sıra düzen içermeyen veri tipi olup, bu veri tipine medeni durum (evli, bekar) ve sosyal güvenlik türü (Bağkur, SSK, Yeşil Kart, Özel Sigorta) örnek gösterilebilir.
- Ordinal veri: İki veya daha fazla kategorisi olan ancak sıra düzen belirten veri türüdür. Bu veri tipine örnek olarak eğitim düzeyleri (İlkokul, ortaokul, lise, üniversite ve yüksek lisans), yarışma dereceleri (1. , 2. ve 3.) ve illerin gelişmişlik düzeyleri (1. Bölge, 2. Bölge, 3. Bölge, 4. Bölge, 5. Bölge ve 6. Bölge) verilebilir.
Veri tiplerinden bahsedildikten sonra bu veri tiplerinin cevap değişkeni (bağımlı değişken) olduğu durumlarda seçilecek regresyon analiz yöntemini ele alalım. Temel olarak cevap değişkeni ölçülebilir numerik değişken ise regresyon, değilse sınıflandırma analizi yapıyoruz. Eğer cevap değişkeni nitel ise aslında sınıflandırma problemini çözmek için analizi kullanıyoruz. Cevap değişkeni, diğer bir deyişle bağımlı değişken numerik ise bağımsız değişken veya değişkenlerin çıktı (output) / bağımlı değişken (dependent variable) / hedef değişken (target variable) veya değişkenlerin üzerindeki etkisi tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemi de değiştirecektir. Bağımlı (dependent) değişkenin tipine göre kullanılan regresyon analiz yöntemleri Şekil 2’de genel hatlarıyla verilmiştir.
Şekil 2: Cevap Değişkeninin Veri Tipine Göre Regresyon Analiz Yöntemleri
Bu kapsamda cevap değişkeni (bağımlı değişken) üzerinden uygulamalı olarak binary lojistik regresyon analizi yapılacaktır. Analizde R programlama dili kullanılarak analiz adımları R kod bloklarında adım adım verilmiştir.
Veri seti Ucla Dijital Araştırma ve Eğitim Enstitüsü‘nce üretilen sentetik veri seti olup, resmi web sitesinden indirilmiştir. Analizde kullanılan veri setini csv uzantılı olarak aşağıdaki linkten indirebilirsiniz.
https://stats.idre.ucla.edu/stat/data/binary.csv
Veri setindeki değişkenlerle öğrencilerin başarı düzeylerine göre yüksek lisans programına kabul edilip edilmeme durumu analiz edilmiştir. Veri setindeki gözlem sayısı 400, değişken sayısı ise 4’tür. Veri setinde değişkenler şöyledir:
- gre: öğrencinin GRE (Graduate Record Exam) skorlarını göstermektedir. Değişken tipi nicel ve kesiklidir.
- gpa: Değişken sürekli veri tipine sahip olup, öğrencinin mezuniyet ortalamasını göstermektedir.
- rank: Değişken kategorik ve ordinal veri tipine sahip olup, öğrencinin sırlamasını göstermektedir. Cevap kategorileri 12den 4’e kadar kodlanmıştır.
- admit: Kabul değişkeni olup dikotomik (binary) nominal veri tipine sahiptir. Kabul 0, Red 1 olarak kodlanmıştır.
Yüklenecek R kütüphaneleri
gereklikütüphaneler<-sapply(c("dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","readr","readxl","xlsx","ggpubr", "gghighlight","pastecs","gridExtra","officer","flextable","ggstance", "jtools", "huxtable", "aod", "DescTools", "readstata13", "nnet","foreign","stargazer","margins", "reshape2", "car", "pROC"), require, character.only = TRUE)
gereklikütüphaneler
Ver setinin okunması
Bu kısımda ilk olarak csv uzantılı veri seti kaynağından okunmuş, ardından veri setindeki ilk 10 gözlem verilmiştir.
veri <-read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
## view the first few rows of the data
formattabble(head(veri,10))#ilk 10 kayıt
#veri setinin "xlsx" uzantılı dosyaya yazdırılması
writexl::write_xlsx(veri,"veriseti.xlsx")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasıyla veri seti xlsx uzantılı dosyaya yazdırılmış olup, aşağıdaki linkten veri setini indirebilirsiniz.
Veri setinin yapısı
Aşağıdaki kod bloğu ile veri setinin yapısı gözden geçirilmiştir.
str (veri)#alternatif
glimpse(ver,)
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen veri setinin yapısına ilişkin istatistikler aşağıda verilmiştir. Görüleceği üzere veri 400 gözlem ve 4 değişkenden oluşmaktadır. Modelde bağımlı değişken olarak yer alan değişken “admit” olup, kalan değişkenler bağımsız (predictor) değişkenlerdir.
Observations: 400
Variables: 4
$ admit <int> 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1...
$ gre <int> 380, 660, 800, 640, 520, 760, 560, 400, 540, 700, 800, 440...
$ gpa <dbl> 3.61, 3.67, 4.00, 3.19, 2.93, 3.00, 2.98, 3.08, 3.39, 3.92...
$ rank <int> 3, 3, 1, 4, 4, 2, 1, 2, 3, 2, 4, 1, 1, 2, 1, 3, 4, 3, 2, 1...
Kategorik değişkenlerin sıklıkları (n)
#rank değişkenini ordinal kategorik veri tipine dönüştürülmesi
mydata <- veri %>% as_tibble() %>% mutate(rank=as.ordered(rank))
#Veri setindeki bağımlı değişkeni recode etme
grafik<-mydata %>% mutate(admit=recode_factor(admit,"0"="Kabul", "1"="Red"))
#Alternatif recode etme
grafik<-mydata %>% mutate(admit=ifelse(admit=="0","Kabul", "Red")) %>% mutate(admit = as.factor(admit))
#Kategorik değişkenlerin sıklıkları
freq<-grafik %>% as_tibble() %>% group_by( admit, rank) %>%
summarise(n = n()) %>% spread(key = rank, value = n)
formattable(freq)
#Alternatif:Kategorik değişkenlerin sıklıkları
levels(as.factor(veri$rank))#"1" "2" "3" "4"
levels(as.factor(veri$admit))#"0" "1"
xtabs(~admit + rank, data = veri)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra kategorik değişkenlere ait elde edilen sıklıklar aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra kategorik değişkenlere ait elde edilen sıklıklar iki yönlü tablo olarak aşağıda verilmiştir.
[1] "1" "2" "3" "4"
[1] "0" "1"
rank
admit 1 2 3 4
0 28 97 93 55
1 33 54 28 12
Veri setinin görselleştirilmesi
Şimdi de veri setindeki değişkenlerin tamamını kategorik veri etiketleriyle birlikte aşağıdaki kod bloğuyla grafiğe yansıtalım.
#rank değişkenini ordinal kategorik veri tipine dönüştürülmesi
mydata <- veri %>% as_tibble() %>% mutate(rank=as.ordered(rank))
#Veri setindeki bağımlı değişkeni recode etme: veri setindeki bağımlı kategorik değişkenin cevap seçeneklerine etiket ataması yapılması
grafik<-mydata %>% mutate(admit=recode_factor(admit,"0"="Kabul", "1"="Red"))
#Veri setinin görselleştirilmesi
grafik %>% ggplot(aes(x =gre , y = gpa, color = rank))+
geom_point(position = position_dodge(0.9)) +
facet_grid(rank~admit)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen grafik aşağıda verilmiştir.
Değişkenler arasındaki korelasyonun hesaplanması
Bu kısımda veri setindeki değişkenler arasındaki ilişkiler (korelasyon) ortaya konulmuştur. Ardından çizilen Q-Q grafikleriyle verinin normal dağılıma uyup uymadığı kontrol edilmiştir.
chisq.test(mydata$admit, mydata$rank)#iki kategorik değişken arasındaki ilişki
cor.test(mydata$gre, mydata$gpa, method="pearson") ##sürekli ve kesikli değişken için pearson korelasyon katsayısı hesaplanması
#ilişkinin grafik üzerinde gösterimi
ggscatter(mydata, x = "gre", y = "gpa",
add = "reg.line", conf.int = TRUE,
cor.coef = TRUE, cor.method = "pearson",
xlab = "gre", ylab = "gpa")
#Q-Q plot ile verinin normal dağılıma uyumu incelenmiştir.
#verinin normal dağılıma uyup uymadığının sürekli veri değişkenler üzerinden gösterilmesi
m<-ggqqplot(mydata$gre, ylab = "gre")
f<-ggqqplot(mydata$gpa, ylab = "gpa")
ggarrange(m, f)
Ortaya konulan korelasyon test sonuçları aşağıda verilmiş olup, katsayılar oldukça düşüktür. Bu durum model için istenen bir durumdur.
Pearson's Chi-squared test
data: mydata$admit and mydata$rank
X-squared = 25.242, df = 3, p-value = 1.374e-05
Pearson's product-moment correlation
data: mydata$gre and mydata$gpa
t = 8.3036, df = 398, p-value = 1.596e-15
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.2974203 0.4648047
sample estimates:
cor
0.3842659
Sürekli ve kesikli değişkenler arasındaki korelasyonun grafiği ise aşağıda verilmiştir.
Sürekli değişkenlerin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafikleri ise karşılaştırma sağlanabilmesi adına değişkene göre yanyana verilmiştir.
Binary lojistik regresyon (BLR) modelinin oluşturulması
mydata <- veri %>% as_tibble() %>% mutate(rank=as.factor(rank))
binarylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
nullmod <- glm(admit~1, data=mydata,family="binomial")
summary(binarylogit)
#alternatif model özeti
summ(binarylogit)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde binary lojistik regresyon model çıktısına aşağıda yer verilmiştir. Aşağıda verilen z istatistiği bazen Wald istatistiği olarak da anılmaktadır.
Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial",
data = mydata)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.6268 -0.8662 -0.6388 1.1490 2.0790
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 499.98 on 399 degrees of freedom
Residual deviance: 458.52 on 394 degrees of freedom
AIC: 470.52
Number of Fisher Scoring iterations: 4
Yukarıdaki R kod bloğunun son satırı çalıştırılmasından sonra elde edilen binary lojistik regresyon modelinin özeti alternatif bir fonksiyon kullanılarak aşağıda verilmiştir.
MODEL INFO:
Observations: 400
Dependent Variable: admit
Type: Generalized linear model
Family: binomial
Link function: logit
MODEL FIT:
χ²(5) = 41.46, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.14
Pseudo-R² (McFadden) = 0.08
AIC = 470.52, BIC = 494.47
Standard errors: MLE
------------------------------------------------
Est. S.E. z val. p
----------------- ------- ------ -------- ------
(Intercept) -3.99 1.14 -3.50 0.00
gre 0.00 0.00 2.07 0.04
gpa 0.80 0.33 2.42 0.02
rank2 -0.68 0.32 -2.13 0.03
rank3 -1.34 0.35 -3.88 0.00
rank4 -1.55 0.42 -3.71 0.00
------------------------------------------------
Yukarıdaki sonuçlar aşağıdaki R kod bloğu ile raporlanmak istenirse katsayılar ve standart hatanın olduğu bir tablo edilmesi de mümkündür.
stargazer(binarylogit, type="text", out="models.txt")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen model özet tablosu aşağıda verilmiştir.
=============================================
Dependent variable:
---------------------------
admit
---------------------------------------------
gre 0.002**
(0.001)
gpa 0.804**
(0.332)
rank2 -0.675**
(0.316)
rank3 -1.340***
(0.345)
rank4 -1.551***
(0.418)
Constant -3.990***
(1.140)
---------------------------------------------
Observations 400
Log Likelihood -229.259
Akaike Inf. Crit. 470.517
=============================================
Note: *p<0.1; **p<0.05; ***p<0.01
Odds Rasyolarının (OR) raporlanması
binarylogidod<-exp(coef(binarylogit))
stargazer(binarylogit, type="text", coef=list(binarylogidod), p.auto=FALSE, out="binarylogitor.txt")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen üstel beta (OR) model özet tablosu aşağıda verilmiştir.
=============================================
Dependent variable:
---------------------------
admit
---------------------------------------------
gre 1.002**
(0.001)
gpa 2.235**
(0.332)
rank2 0.509**
(0.316)
rank3 0.262***
(0.345)
rank4 0.212***
(0.418)
Constant 0.019***
(1.140)
---------------------------------------------
Observations 400
Log Likelihood -229.259
Akaike Inf. Crit. 470.517
=============================================
Note: *p<0.1; **p<0.05; ***p<0.01
Pseudo R Karelerin ve 2*LL’nin hesaplanması
Pseudo R Kareler ve 2*LL (Log Likehood) bütünsel olarak model uyumunu değerlendirme imkanı sunmaktadır.
etiket=c("2 Log Likehood (2LL)","Hosmer and Lemeshow","Cox and Snell","Nagelkerke", "Mc Fadden") %>% as_tibble()%>% rename("2*LL ve Pseudo R Kareler"=value)
etiket
d=binarylogit$deviance
nd=binarylogit$null.deviance
l=length(binarylogit$fitted.values)
llm=logLik(binarylogit)#model log olasılıkları
lln=logLik(nullmod)#null model log olasılıkları (sadece intersept değerini içerir)
x0=2*logLik(binarylogit)#kurulan modelin sapmasını gösterir. 2LL değeri 0'a ne kadar yakınsa o kadar iyidir.Yüksek 2LL değerleri, kurulan model ile verinin uyumunun iyi olmadığı göstermektedir.
x1=1-d/nd# The Hosmer-Lemeshow testi goodness of fit testidir.
x2=1-exp(-(nd-d)/l)
x3=x2/(1-exp(-(nd/l)))#Nagelkerke R Kare:Kurulan Modelin açıklama gücünü gösterir.
x4=1-llm/lln
degerler<-c(x0,x1,x2,x3,x4)%>% as_tibble()%>% rename("Değerler"=value)
tablo<-cbind(etiket, round(degerler,3))
formattable(tablo)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Pseudo R kareler aşağıda verilmiştir.
Bağımsız değişkenlerin bağımlı değişken ile etkileşim düzeyleri
gre<-effect_plot(binarylogit, pred = gre, interval = TRUE)
gpa<-effect_plot(binarylogit, pred = gpa, interval = TRUE)
rank<-effect_plot(binarylogit, pred = rank, interval = TRUE)
ggarrange(gre, gpa, rank, col=1)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra bağımsız değişkenler ile bağımlı değişken (admit) arasındaki etkileşim düzeyleri aşağıdaki grafiklerde verilmiştir.
Marjinal etki düzeylerinin hesaplanması
Marjinal etki düzeyi, tahmincilerin (bağımsız değişkenlerin) sonuç değişkeni üzerindeki etkisini tanımlamak için kullanılabilecek alternatif bir metriktir. Marjinal etkiler, bağımsız değişkendeki bir birim artışın oluşturduğu değişim olasılığını göstermektedir.
#Marjinal etki düzeyleri tablosu
margineffect= margins(binarylogit)
# Summary of marginal effect
margineffect=summary(margineffect) %>% mutate_at(2:7, round, 3)
formattable(margineffect)
#Marjinal etki düzeylerinin grafiği
mgrafik= margins(binarylogit)
plot(mgrafik, main="Ortalama Marjinal Etki (AME) Düzeyleri Grafiği", ylab="AME", xlab="Faktörler")
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen ortalama marjinal etki düzeyleri (AME) aşağıdaki tabloda verilmiştir.
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen ortalama marjinal etki (AME) düzeylerinin grafiği ise aşağıda verilmiştir.
ROC eğrisinin çizilmesi ve altındaki alanın hesaplanması
#ROC eğrisi altındaki alanın (AUC) hesaplanması
roc1alan <- roc(admit ~ binarylogit$fitted.values, data = mydata, plot = FALSE)
roc1alan
#ROC eğrisinin çizilmesi
plot.roc(gozlem$admit, binarylogit$fitted.values, main="% 95 Güven Aralıklı ROC Eğrisi", percent=TRUE, ci=TRUE, print.auc=TRUE)
Yukarıdaki R kod bloğunda yer alan ilk satırın çalıştırılmasından sonra hesaplanan ROC eğrisi altında kalan (AUC) 0.6928 olup, elde edilen bu sonuç kurulan modelle elde edilen başarı düzeyinin zayıf (0,60-0,70) olduğunu göstermektedir. Modelin doğruluk (accuracy) oranı, ROC eğrisinin altındaki alanla ölçülür ve yüksek bir AUC değeri kurulan modelin bağımlı değişken kategorilerini iyi tahmin ettiğini veya sınıflandırdığını göstermektedir. ROC eğrisinin altında kalan alanla ilgili literatürde önerilen eşik değerler aşağıda verilmiştir.
- 0,90-1 = mükemmel (A)
- 0,80-0,90 = iyi (B)
- 0,70-0,80 = orta (C)
- 0,60-0,70 = zayıf (D)
- 0,50-0,60 = başarısız (F)
Kod bloğundaki 2. satırın çalıştırılmasından sonra elde edilen ROC eğrisi ise aşağıdaki grafikte verilmiştir.
Tahmin edilen olasılık değerleri
#olasılıklar
fitted(binarylogit)
#yada
as.vector(binarylogit$fitted.values)
Yukarıdaki kod bloğu çalıştırılmasından sonra elde edilen bağımlı değişken kategorilerine ait olasılık değerleri aşağıda verilmiştir.
[1] 0.17262654 0.29217496 0.73840825 0.17838461 0.11835391 0.36996994
[7] 0.41924616 0.21700328 0.20073518 0.51786820 0.37431440 0.40020025
[13] 0.72053858 0.35345462 0.69237989 0.18582508 0.33993917 0.07895335
[19] 0.54022772 0.57351182 0.16122101 0.43727108 0.12837525 0.19204860
[25] 0.43759396 0.68229503 0.57848091 0.20475422 0.42307349 0.45829857
[31] 0.21765393 0.28583616 0.22481919 0.42494837 0.34296523 0.21293277
[37] 0.48413281 0.13931720 0.26569575 0.11942769 0.18975965 0.33567002
[43] 0.31560404 0.17702923 0.32817441 0.18025548 0.36121718 0.11699101
[49] 0.07235381 0.15047417 0.31488795 0.11624726 0.23936553 0.37838478
[55] 0.24045684 0.39213236 0.18283980 0.10853139 0.30472142 0.12837525
[61] 0.33078459 0.16742893 0.28289780 0.33295972 0.30988311 0.39645173
[67] 0.27784995 0.51681586 0.57206626 0.69436828 0.33966212 0.07486000
[73] 0.15073716 0.46607599 0.24284830 0.38139149 0.20415281 0.42494837
[79] 0.43570986 0.65251556 0.16456653 0.31150713 0.20517359 0.08776685
[85] 0.21358749 0.25126279 0.34584314 0.37549461 0.55783057 0.51131037
[91] 0.49978497 0.63809471 0.57000341 0.26968427 0.40010880 0.37907977
[97] 0.22063013 0.33002244 0.31762762 0.14640896 0.11633954 0.24114689
[103] 0.11883427 0.28100436 0.50126183 0.35394219 0.61241920 0.25695415
[109] 0.11218813 0.30904921 0.17869743 0.13603549 0.10881750 0.48942091
[115] 0.35153649 0.32780508 0.29004920 0.47768876 0.68922540 0.09863460
[121] 0.38205848 0.19283124 0.13456621 0.14161529 0.35890251 0.16784107
[127] 0.55353632 0.29761787 0.29364378 0.12270194 0.32900715 0.27429792
[133] 0.35016196 0.15167362 0.26397051 0.20956391 0.16855273 0.37076538
[139] 0.37104174 0.56147017 0.48592324 0.24487554 0.27496207 0.21702497
[145] 0.18326999 0.15292361 0.30053113 0.13202601 0.36278299 0.58590453
[151] 0.69607194 0.26076336 0.48793196 0.22533437 0.27701027 0.12691355
[157] 0.20243105 0.49385024 0.40979572 0.33767745 0.31214097 0.40081797
[163] 0.44572710 0.21536268 0.33209361 0.69237989 0.12564635 0.33881603
[169] 0.27253083 0.25713529 0.16766865 0.13610230 0.27045353 0.47601029
[175] 0.17207711 0.36543032 0.20079352 0.20929210 0.22290898 0.09702710
[181] 0.29173405 0.21592659 0.53390445 0.41213948 0.10284874 0.51016205
[187] 0.23875288 0.26184001 0.28313813 0.30160149 0.29894660 0.33797096
[193] 0.29780561 0.14252603 0.37361105 0.37499458 0.20306181 0.11520619
[199] 0.25867413 0.23203530 0.29790835 0.31450637 0.69237989 0.19176895
[205] 0.62160882 0.37552455 0.62994688 0.59336886 0.17269671 0.36867073
[211] 0.23500145 0.28417171 0.21145148 0.23806753 0.39069474 0.18303592
[217] 0.29144726 0.49458858 0.36532833 0.37499458 0.18691983 0.35841190
[223] 0.38346629 0.32549498 0.37234438 0.29200523 0.40539785 0.13119209
[229] 0.30562595 0.42917277 0.17040039 0.20845157 0.25212831 0.09688336
[235] 0.65921863 0.30806878 0.40979572 0.41039144 0.10815929 0.27465027
[241] 0.19001218 0.56239934 0.19616746 0.33794240 0.41996550 0.40736827
[247] 0.39171070 0.24596016 0.29657173 0.29278619 0.20011793 0.17414395
[253] 0.43247252 0.18780755 0.26200847 0.23371984 0.30267400 0.32075797
[259] 0.33944941 0.46187255 0.34863249 0.24298996 0.16969339 0.32075797
[265] 0.26562483 0.14378335 0.15865328 0.26021896 0.41492493 0.12579904
[271] 0.48994106 0.19310678 0.45641226 0.54337733 0.27302605 0.28684953
[277] 0.22143462 0.55028996 0.16945136 0.34384116 0.49925174 0.13172559
[283] 0.21874547 0.13337693 0.28021662 0.17925207 0.60122274 0.25502619
[289] 0.23197657 0.05878643 0.38047126 0.35008696 0.46240272 0.73372225
[295] 0.29885443 0.17659931 0.45483793 0.23950580 0.34785059 0.27566478
[301] 0.36288468 0.28067279 0.22671860 0.51860565 0.07198547 0.19060160
[307] 0.44561844 0.37054412 0.28373804 0.12588934 0.30028221 0.44520022
[313] 0.30907647 0.19322270 0.17701800 0.15412239 0.18491373 0.29806393
[319] 0.18670880 0.46755914 0.14630641 0.32183935 0.12035456 0.17486941
[325] 0.12112920 0.66498227 0.38597852 0.35450549 0.33926538 0.11370930
[331] 0.39213236 0.27905234 0.34097123 0.21344965 0.20393972 0.59795326
[337] 0.16520993 0.16070084 0.45158492 0.26006097 0.14037382 0.12659514
[343] 0.22560760 0.29075910 0.18859648 0.14657301 0.35132030 0.42636137
[349] 0.25767548 0.27488628 0.57858815 0.23714608 0.18120291 0.43779599
[355] 0.40050290 0.49758253 0.38909423 0.57487559 0.25063922 0.37007654
[361] 0.59956970 0.50972425 0.35412991 0.29777892 0.49491656 0.11836196
[367] 0.12645014 0.26745319 0.63170496 0.56803162 0.39857395 0.31708679
[373] 0.37650752 0.53085361 0.41142403 0.18735742 0.41512421 0.58958954
[379] 0.20223990 0.21896113 0.46366743 0.34602886 0.34967678 0.67275941
[385] 0.18665107 0.35189341 0.52842881 0.34287938 0.33908140 0.40275050
[391] 0.40093595 0.48719398 0.22202911 0.43872524 0.25342327 0.48866999
[397] 0.16550430 0.18106222 0.46366743 0.30073055
Hata Matriksi (Confusion Matrix) değerleri
Karışıklık matrisi olarak olarak da adlandırılan hata matrisi sınıflandırma problemlerinin çözümünde hata metriklerini ortaya koyarak kurulan modelin veya modellerin hata oranını değerlendirmektedir.Hata matrisinin makine ve derin öğrenme metodlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Aşağıda yer alan tabloda hata metriklerinin hesaplanmasına esas teşkil eden tablo verilmiştir. Bu tabloyla sınıflandırma hataları hesaplanabilmektedir. Tabloda yer verilen Tip 1 hata (Type 1 error) istatistikte alfa hatasını göstermektedir. Tip 1 hata H0 hipotezi (null hpypothesis) doğru olduğu halde reddedilmesidir. Tabloda Tip 2 hata (Type II error) olarak adlandırılan hata ise istatistikte Beta hatası olarak da bilinmektedir. Tip 2 hata ise H0 hipotezi (null hpypothesis) yanlış olduğu halde kabul edilmesidir.
Kaynak: Stanford Üniversitesi
Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.
- Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar. Bu sınıflandırma metriği ile aslında biz informal bir şekilde dile getirirsek doğru tahminlerin toplam tahminler içindeki oranını hesaplamış oluyoruz.
- Kesinlik (Precision): TP / TP+FP eşitliği ile hesaplanır. Doğru tahminlerin ne kadar kesin olduğunu gösterir.
- Geri çağırma (Recall): TP / TP+FN eşitliği ile hesaplanır. Gerçek pozitif örneklerin oranını verir.
- Özgünlük (Specificity): TN / TN+FP eşitliği ile hesaplanır. Gerçek negatif örneklerin oranını gösterir.
- F1 skoru : 2TP / 2TP+FP+FN eşitliği ile hesaplanır. Dengesiz sınıflar için yararlı hibrit bir metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.
- ROC (Receiver operating characteristic): Yukarıda karışıklık matrisinde belirtilen parametrelerden yararlanılarak hesaplanır. ROC eğrisi olarak da adlandırılmaktadır. ROC eğrileri, herhangi bir tahmin modelinin doğru pozitifler (TP) ve negatifler (TN) arasında nasıl ayrım yapabileceğini görmenin güzel bir yoludur. Sınıflandırma modellerin perfomansını eşik değerler üzerinden hesaplar. ROC iki parametre üzerinden hesaplanır. Doğru Pozitiflerin Oranı (TPR) ve Yanlış Pozitiflerin Oranı (FPR) bu iki parametreyi ifade eder. Burada aslında biz TPR ile Geri Çağırma (Recall), FPR ile ise 1-Özgünlük (Specificity)‘ü belirtiyoruz.
- Cohen Kappa: Kategorik cevap seçenekleri arasındaki tutarlılığı ve uyumu gösterir. Cohen, Kappa sonucunun şu şekilde yorumlanmasını önermiştir: ≤ 0 değeri uyumun olmadığını, 0,01–0,20 çok az uyumu, 0,21-0,40 az uyumu, 0,41-0,60 orta, 0,61-0,80 iyi uyumu ve 0,81–1,00 çok iyi uyumu göstermektedir. 1 değeri ise mükemmel uyum anlamına gelmektedir.
Binary lojistik regresyon metodu sınıflandırma problemlerinin çözümünde kullanıldığı için modelin doğruluğunu ölçümlemek için karışıklık matris hesaplanmış olup kod bloğu aşağıda verilmiştir. Burada şöyle bir yol izlenmiştir: Sınıflandırmada en iyi kesim noktası (cut-off)’nın bulunması için ROC eğrisinden yararlanan eşik değerler belirlenmiştir. Bundan dolayı ilk olarak eşik değerlerin hesaplanmasına yönelik R kod bloğu verilmiştir.
#En iyi eşik (threshold) değeri belirleme
rocobj <- roc(gozlem$admit, binarylogit$fitted.values)
eniyi<-coords(rocobj, seq(0.05, 0.5, 0.01), transpose = FALSE)
eniyi
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen eşik (threshold) değerler, özgünlük (specificity) ve duyarlılık (sensitivity) göstergeleri ile birlikte aşağıda verilmiştir.
threshold specificity sensitivity
1 0.05 0.000000000 1.0000000
2 0.06 0.003663004 1.0000000
3 0.07 0.003663004 1.0000000
4 0.08 0.018315018 1.0000000
5 0.09 0.021978022 1.0000000
6 0.10 0.032967033 1.0000000
7 0.11 0.047619048 1.0000000
8 0.12 0.076923077 0.9842520
9 0.13 0.109890110 0.9685039
10 0.14 0.139194139 0.9685039
11 0.15 0.164835165 0.9685039
12 0.16 0.183150183 0.9606299
13 0.17 0.216117216 0.9448819
14 0.18 0.256410256 0.9370079
15 0.19 0.285714286 0.8818898
16 0.20 0.304029304 0.8582677
17 0.21 0.336996337 0.8267717
18 0.22 0.373626374 0.8188976
19 0.23 0.395604396 0.8031496
20 0.24 0.428571429 0.8031496
21 0.25 0.446886447 0.7952756
22 0.26 0.468864469 0.7716535
23 0.27 0.487179487 0.7322835
24 0.28 0.527472527 0.7322835
25 0.29 0.549450549 0.7086614
26 0.30 0.589743590 0.6692913
27 0.31 0.626373626 0.6614173
28 0.32 0.641025641 0.6377953
29 0.33 0.655677656 0.6141732
30 0.34 0.695970696 0.5905512
31 0.35 0.721611722 0.5748031
32 0.36 0.754578755 0.5590551
33 0.37 0.765567766 0.5275591
34 0.38 0.798534799 0.4881890
35 0.39 0.809523810 0.4645669
36 0.40 0.820512821 0.4409449
37 0.41 0.842490842 0.4094488
38 0.42 0.857142857 0.3858268
39 0.43 0.860805861 0.3543307
40 0.44 0.868131868 0.3228346
41 0.45 0.871794872 0.3070866
42 0.46 0.882783883 0.2992126
43 0.47 0.904761905 0.2992126
44 0.48 0.908424908 0.2913386
45 0.49 0.923076923 0.2677165
46 0.50 0.930402930 0.2362205
Yukarıda elde edilen en iyi eşik değere göre oluşturulan karışıklık (confusion) matrisine ilişkin R kod bloğu aşağıda verilmiştir.
tahmin <- ifelse(binarylogit$fitted.values > 0.06, "Kabul", "Red") %>% as_tibble() %>% rename("Tahmin"=value) %>% mutate_if(is.character,as.factor)
gozlem<-mydata %>% as_tibble() %>% mutate(admit=recode_factor(admit,"0"="Kabul", "1"="Red"))
karsilastirma<-tibble(Tahmin=tahmin$Tahmin,"Gözlem"=gozlem$admit)
confusionMatrix(karsilastirma$Gözlem,karsilastirma$Tahmin)
Yukarıdaki R kok bloğunun çalıştırılmasından sonra elde edilen sınıflandırma tablosu ile birlikte hata metrikleri aşağıda verilmiştir. Elde edilen bulgulardan kurulan binary lojistik regresyon modelinden elde edilen doğruluk (accuracy) oranı % 68 olup, sınıflandırma hatası ise % 32’dir.
Confusion Matrix and Statistics
Reference
Prediction Kabul Red
Kabul 272 1
Red 127 0
Accuracy : 0.68
95% CI : (0.6318, 0.7255)
No Information Rate : 0.9975
P-Value [Acc > NIR] : 1
Kappa : -0.005
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.6817
Specificity : 0.0000
Pos Pred Value : 0.9963
Neg Pred Value : 0.0000
Prevalence : 0.9975
Detection Rate : 0.6800
Detection Prevalence : 0.6825
Balanced Accuracy : 0.3409
'Positive' Class : Kabul
Model etki testi (Parametre Tahminleri)
Anova testi yardımıyla kurulan modelin etkisi test edilmiştir.
Anova(binarylogit, type=c("II","III", 2, 3),
test.statistic=c("LR", "Wald", "F"),
error, error.estimate=c("pearson", "dispersion", "deviance"),)
#yada
Anova(binarylogit)
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Anova test sonuçları aşağıda verilmiştir.
Analysis of Deviance Table (Type II tests)
Response: admit
LR Chisq Df Pr(>Chisq)
gre 4.3578 1 0.03684 *
gpa 6.0143 1 0.01419 *
rank 21.8265 3 7.088e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Üstel Beta (Exponential Beta: Odds Ratio (OR)) Katsayıları
Binary lojistik regresyonun yorumlanmasında önemli bir yere sahip üstel Beta katsayı aşağıdaki kod bloğunda hesaplanmıştır. Üstel Beta ya da OR>1 olması pozitif regresyon, OR <1 ise negatif regresyon eğimini göstermektedir. Diğer taraftan, OR = 1 ise regresyon eğimi 0’dır. Bu noktada, OR> 1 olması bağımsız değişken ya da değişkenlerde bir birimlik artışın bağımlı değişken üzerinde artış oluşturduğunu, OR< 1 olması ise bir birimlik artışın bağımlı değişken üzerinde azalış oluşturduğunu göstermektedir. Diğer taraftan OR = 1 olması, bağımsız değişken ya da değişkenlerde bir birimlik artışın bağımlı değişken üzerinde bir değişim oluşturmadığı anlamına gelmektedir.
or<-summ(binarylogit, confint = TRUE, exp=T, digits=3)
round(or$coeftable,3)
#alternatif
ci <- confint(binarylogit) # default method gives profiled CIs
## OR and CI (Üstel Beta ve Güven Düzeyleri)
exp(cbind(OR = coef(binarylogit), ci))
Yukarıdaki R kod bloğunun ilk satırı çalıştırıldıktan sonra elde edilen üstel Beta (OR) katsayıları güven düzeyleri ile birlikte aşağıda verilmiştir.
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.019 0.002 0.173 -3.500 0.000
gre 1.002 1.000 1.004 2.070 0.038
gpa 2.235 1.166 4.282 2.423 0.015
rank2 0.509 0.274 0.946 -2.134 0.033
rank3 0.262 0.133 0.515 -3.881 0.000
rank4 0.212 0.093 0.481 -3.713 0.000
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen üstel Beta (OR) katsayıları güven düzeyleri ile birlikte alternatif olarak aşağıda verilmiştir.
OR 2.5 % 97.5 %
(Intercept) 0.0185001 0.001889165 0.1665354
gre 1.0022670 1.000137602 1.0044457
gpa 2.2345448 1.173858216 4.3238349
rank2 0.5089310 0.272289674 0.9448343
rank3 0.2617923 0.131641717 0.5115181
rank4 0.2119375 0.090715546 0.4706961
Yukarıdaki parametre tahminleri ışığında kurulan binary regresyon modeli değerlendirildiğinde öne çıkan bulgular şöyledir:
- Bağımsız değişkenlerin tamamının bağımsız değişkenler üzerinde istatistiksel olarak anlamlı bir etkisi bulunmaktadır (p<0.05).
- gpe’de bir birimlik artış, lisansüstü programa kabul edilme (kabul edilmeme) oranınında bir değişim oluşturmamıştır (p=0.038<0.05). Burada gpe’nin OR değeri 1’e yakın olduğu için bu yorum yapılmıştır.
- gpa’da bir birimlik artış, lisansüstü programa kabul edilme (kabul edilmeme) oranını 2,23 kat artırmıştır (p=0.015<0.05).
- rank 2 (2. sıra)’deki bir birimlik artış, referans grup olan rank 1 (1. sıra)’e göre lisansüstü programa kabul edilme (kabul edilmeme) oranını 0,5 kat azaltmıştır (p=0.033<0.05).
- rank 3 (3. sıra)’teki bir birimlik artış, referans grup olan rank 1 (1. sıra)’e göre lisansüstü programa kabul edilme (kabul edilmeme) oranını yaklaşım 0,2 kat azaltmıştır (p=0.033<0.05).
- rank 4 (4. sıra)’deki bir birimlik artış, referans grup olan rank 1 (1. sıra)’e göre lisansüstü programa kabul edilme (kabul edilmeme) oranını yaklaşım 0,3 kat azaltmıştır (p=0.033<0.05).
Binary logistik regresyon model denkleminin yazılması
Pr(yi = 1) = Logit-1(Xiβ) eşitliği kullanarak ve tahmin edilen olasılıklardan yola çıkılarak aşağıdaki kod bloğu yardımıyla binary lojistik regresyon modelinin denklemi yazılmıştır. Her bir bağımsız ortalama noktasındaki olasılığı tahmin etmek için logit modeli ters çevrilmiştir.
coef<-coef(binarylogit)
coef
#Eşitlik:Pr(yi = 1) = Logit-1(Xiβ)
#rank = ‘2’ iken olasılığı tahmin etme
invlogit = function (x) {1/(1+exp(-x))}
invlogit(coef[1]+ coef[2]*mean(mydata$gre)+ coef[3]*mean(mydata$gpa)+ coef[4]*1)
#Pr(yi = 1| rank= “2”) = 0.3522846
#rank = ‘3’ iken olasılığı tahmin etme
invlogit = function (x) {1/(1+exp(-x))}
invlogit(coef[1]+ coef[2]*mean(mydata$gre)+ coef[3]*mean(mydata$gpa)+ coef[5]*1)
#Pr(yi = 1| rank= “3”) = 0.218612
#rank = ‘4’ iken olasılığı tahmin etme
invlogit = function (x) {1/(1+exp(-x))}
invlogit(coef[1]+ coef[2]*mean(mydata$gre)+ coef[3]*mean(mydata$gpa)+ coef[6]*1)
#Pr(yi = 1| rank= “4”) = 0.1846684
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla.
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Note: It can not be cited or copied without referencing.
Yararlanılan Kaynaklar
https://spartanideas.msu.edu/2013/12/01/testing-regression-significance-in-r/
http://gim.unmc.edu/dxtests/roc3.htm
https://dss.princeton.edu/training/LogitR101.pdf.
https://stats.idre.ucla.edu/stata/dae/logistic-regression/
https://www.mayo.edu/research/documents/data-types/doc-20408956
https://statistics.laerd.com/statistical-guides/types-of-variable.php
https://drive.google.com/file/d/1xCLN-jtPMsjl46w4lZzEG6_IWnY-7uqJ/view
https://sites.google.com/view/statistics-for-the-real-world/contents
Field, Andy. (2009). Discovering Statistics Using SPSS. Third Edition.
https://www.r-project.org/
http://www.sthda.com/english/articles/32-r-graphics-essentials/129-visualizing-multivariate-categorical-data/
https://stats.idre.ucla.edu
https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks