R’da Poisson ve Negatif Binom Regresyon Yöntemleri Üzerine Bir Vaka Çalışması: A Case Study on Poisson and Negative Binomial Regression Methods in R

Giriş

Regresyon analizi yöntemlerinden biri olan poisson regresyon analiz yöntemi, bağımlı değişkenin ya da cevap değişkeninin
nicel kesikli ve pozitif (sayma sayıları) olduğu 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.

Genel olarak bağımlı değişkenin veri tipi yapılacak analiz yöntemlerinde belirleyici rol oynamaktadır. Dolayısıyla veri tiplerinin anlaşılması burada önemlidir. Veri tipleri kendi içerisinde Şekil 1’de görüleceği üzere 4 farklı alt sınıfta ele alınabilir.

Şekil 1: Veri Tipleri

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.

  1. 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.
  2. 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 görselin boş bir alt özelliği var; dosya ismi: image-3.png

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms

  • 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.

Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında R programlama dili içerisinde bulunan “warpbreaks” veri setinde bağımlı değişken olan breaks (mola sayısı) tahmin edilmiştir. Veri seti kullanılarak poisson ve negatif binom regresyon yöntemleriyle regresyon problemi çözülecektir.

Metodoloji ve Uygulama Sonuçları

Poisson Regresyon Yöntemi

Poisson regresyon, lojistik regresyonlar modellerinin genelleştirilmiş şeklidir. Fakat lojistik regresyonda bağımlı değişkenler kategorilerden oluşan belirli cevap seçenekleri ile sınırlıdır.

Regresyon modellerinden poisson ve negatif binom regresyon modelleri regresyon modellerinin özel bir türü olup, bağımlı değişkenin nicel pozitif ve aynı zamanda kesikli olduğu durumlarda kullanılır. Yapılan Covid-19 testlerinin sayısı, vaka sayısı, ölüm sayısı gibi değişken istatistikleri bu modellerde kullanılabilecek değişkenlere örnek verilebilir. Bu modellerde amaç nicel kesikli ve pozitif bağımlı değişkenin bağımsız değişkenlerle tahmin edilmesidir.

Poisson regresyon analizi, bağımlı değişkenin Poisson dağılımı gösterdiğinden hareket etmektedir. Poisson dağılımı Fransız matematikçi Siméon Denis Poisson tarafından geliştirilmiştir. Poisson dağılımı, bir olayın belirli bir zaman veya mekan aralığında kaç kez meydana geldiğini modellemek için kullanılmaktadır.

Poisson dağılımı sağa çarpık (right skew) bir görünüm sergilemekte olup, olasılık dağılım fonksiyonu aşağıdaki eşitlikte verilmiştir. Bu dağılım sürekli dağılımlardan biri olan normal dağılımın aksine kesikli dağılım türlerinden biridir.

Eşitlikte e= Euler’in sabitini ifade etmektedir. Bu katsayı yaklaşık 2,71828’e eşittir. Eşitlikte yer verilen lambda (λ) belirli zaman aralığında meydana gelen vakaların ortalama sayısını göstermektedir. x ise eşitlikte hedeflenen vaka sayısını belirtmektedir.  x = 0, 1, 2, …, n > 0 ve 0 < p ≤ 1. Varsayımsal bir örnek vererek konuyu biraz somutlaştıralım.

Örnek: Bir organize sanayi bölgesinde gıda sektöründe üretim yapan firmanın deposunda stoklanan ürünlerin 0,04’nin bozuk olduğu bilinmektedir. Bu depodan tesadüfi seçilen 80 birimden en az 5 tanesinin bozuk olma olasılığını Poisson dağılımından yararlanarak hesaplayalım.

Burada,

  • p= 0,04
  • Lambda (λ) = 80*0,04=3,2

Yukarıda belirtilen Poisson kütle olasılık eşitliğinde verilenleri yerine koyarsak

Yapılan işlemi aşağıdaki R kod bloğunda da verelim adım adım hesaplama adımlarını görebilmek açısından.

e<-2.71828 #Euler'in sabiti
sıfır<-(e^-3.2*(3.2)^0)/factorial(0)
bir<-(e^-3.2*(3.2)^1)/factorial(1)
iki<-(e^-3.2*(3.2)^2)/factorial(2)
uc<-(e^-3.2*(3.2)^3)/factorial(3)
dort<-(e^-3.2*(3.2)^4)/factorial(4)
poissonfonksiyon<-sum(sıfır, bir,iki,uc,dort)#f(x): Poisson olasılık dağılım fonksiyonu
round(1-poissonfonksiyon,5)
#Sonuç=0.21939

Lambda (λ) Poisson dağılımı , R’da dpois, ppois ve qpois fonksiyonları ile temsil edilir. dpois yoğunluğu, ppois dağılım fonksiyonunu, qpois çeyreklik fonksiyonu, rpois ise tesadüfi ve tekrarsız atanan sayıları gösterir. İlk olarak rpois fonksiyonunu kullanarak poisson dağılımına uygun lambda değeri 1, popülasyon büyüklüğü (N) 10000 olan gözlem üretelim. Daha sonra poisson regresyon ve dağılımı varsayımlarından biri olan gözlemlerin varyansının gözlemlerin ortalamasına eşit veya yakın olması varsayımını aşağıda yazılan R kod bloğu ile test edip histogramını çizelim.

poisorneklem<-rpois(n=10000, lambda=1)#poisson dağılımına uygun örneklem çekmek
hist(poisorneklem, xlab="", main="Poisson Dağılımı", col="red")
mean(poisorneklem);var(poisorneklem)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Poisson dağılımına ilişkin histogram aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Poisson dağılımına ilişkin ortalama 1.0175, varyans ise 1.012895 olup, görüleceği üzere birbirine çok yakındır.

Şimdi de poisson dağılımına uygun olarak aynı popülasyon büyüklüğüne sahip ancak farklı lambda değerleriyle karşılaştırmalı olarak poisson dağılıma grafik üzerinde bakalım. Aşağıda yazılan R kod bloğu ile popülasyon büyüklüğü (N) 1000, lambda düzeyleri ise sırasıyla 1, 1,5, 2, 2,5, 3 ve 3,5 olan poisson eğrileri verilmiştir.

set.seed(61)#Sonuçları sabitlemek için
orneklem<-1000#(N=n)
nd1<-density(rpois(orneklem, lambda=1))
nd2<-density(rpois(orneklem, lambda=1.5))
nd3<-density(rpois(orneklem, lambda=2))
nd4<-density(rpois(orneklem, lambda=2.5))
nd5<-density(rpois(orneklem, lambda=3))
nd6<-density(rpois(orneklem, lambda=3.5))
par(oma = c(0.1, 0.1, 0.1, 0.1))#legendin tablodaki yerini düzenlemek için.
plot(nd1,                                  
     xlim = c(0,8),
     ylim = c(0,0.8),
     cex=0.8,
     lwd = 2,
     main = "Poisson Dağılımı")
lines(nd2, col = "orange", lwd = 2)             
lines(nd3, col = "grey", lwd = 2)             
lines(nd4, col = "brown", lwd = 2)  
lines(nd5, col = "green", lwd = 2)  
lines(nd6, col = "red", lwd = 2)  
legend("topright",                                    
       legend = c("λ= 1",
                  "λ= 1.5",
                  "λ= 2",
                  "λ= 2.5",
                  "λ= 3",
                  "λ= 3.5"),
       col = c("black", "orange", "grey", "brown","green","red" ),
       lty = 1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen farklı lambda değerlerine sahip poisson dağılım eğrileri aşağıdaki grafikte verilmiştir. Genel olarak grafikten düşük lambda değerlerine sahip eğrilerin poisson dağılımının da bir özelliği olarak sağa çarpık (right skew) bir görünüm çizdiği görülmektedir. Ancak lambda değerleri artıkça eğriler normal dağılım eğrisine evrilmektedir.

Poisson eğrilerine daha yakından bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile Poisson eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(6)
orneklem<-1000
l1<-ggdensity(rpois(orneklem, lambda=1),main="λ=1")
l2<-ggdensity(rpois(orneklem, lambda=1.5),main="λ=1.5", col="orange")
l3<-ggdensity(rpois(orneklem, lambda=2),main="λ=2", col="grey")
l4<-ggdensity(rpois(orneklem, lambda=2.5),main="λ=2.5", col="brown")
l5<-ggdensity(rpois(orneklem, lambda=3),main="λ=3", col="green")
l6<-ggdensity(rpois(orneklem, lambda=3.5),main="λ=3.5", col="red")
ggarrange(l1,l2,l3,l4,l5,l6)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen grafikler aşağıda verilmiştir.

Adı geçmişken normal dağılımdan biraz bahsedebilir. Normal dağılım sürekli olasılık dağılımlardan biri olup, eğrisi can eğrisine benzemektedir. Birazdan R’da rnorm fonksiyonu kullanılarak ilk olarak ortalaması 0, standart sapması 1 olan standart normal dağılım eğrisi çizilecektir. Daha sonra rnorm içerisinde yer alan parametreler değiştirilerek normal dağılım eğrilerindeki farklılaşmalar gösterilecektir. Aşağıdaki yazılan R kod bloğu ile ortalaması 0, standart sapması 1 olan normal dağılım eğrisi çizilmiştir.

set.seed(2)
ggdensity(rnorm(orneklem, mean=0, sd=1), main="Standart Normal Dağılım (Ortalama=0 ve Standart Sapma=1)", col="red")+
theme_pander()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen standart normal dağılım eğrisi aşağıdaki grafikte verilmiştir. Büyük sayı yasası (Law of large numbers)’na göre popülasyondan çekilen örneklem büyüklüğü artıkça örneklem ortalamaları popülasyon ortalamasına yaklaşır. Sözgelimi yaşları bilinen yaklaşık 83 milyonluk ülke nüfusundan çekilen 10 milyonluk örneklemin ortalama değeri, çekilen 2 milyonluk örneklemin ortalama değerinden popülasyon ortalamasına daha yakındır ve bu aslında bir anlamda 10 milyonluk örneklem 2 milyonluk örnekleme göre popülasyonu daha iyi temsil ediyor demektir.

Şimdi de aşağıda yazılan R kod bloğu ile farklı ortalama (Ort) ve standart sapma (SS) değerlerine sahip normal dağılıma uygun eğriler çizerek normal dağılım dağılım eğrilerindeki farklılaşmaları görelim.

set.seed(61)
orneklem<-1000
nd1<-density(rnorm(orneklem, mean=0, sd=1))
nd2<-density(rnorm(orneklem, mean=1, sd=1))
nd3<-density(rnorm(orneklem, mean=2, sd=3))
nd4<-density(rnorm(orneklem, mean=3, sd=4))
nd5<-density(rnorm(orneklem, mean=4, sd=5))
nd6<-density(rnorm(orneklem, mean=5, sd=6))
plot(nd1,                               
     xlim = c(- 10, 10),
     main = "Normal Dağılım", lwd = 2)
lines(nd2, col = "orange", lwd = 2)             
lines(nd3, col = "grey", lwd = 2)           
lines(nd4, col = "brown", lwd = 2)  
lines(nd5, col = "green", lwd = 2)  
lines(nd6, col = "red", lwd = 2)  
legend("topleft",                                   
       legend = c("Ort = 0; SS = 1",
                  "Ort = 1; SS = 1",
                  "Ort = 2; SS = 3",
                  "Ort = 3; SS = 4",
                  "Ort = 4; SS = 5",
                  "Ort = 5; SS = 6"),
       col = c("black", "orange", "grey", "brown","green","red" ),
       lty = 2)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra farklı ortalama ve standart sapma değerlerine sahip normal dağılım eğrileri aşağıdaki grafikte verilmiştir. Şekilde siyah eğri standart normal dağılım eğrisini göstermektedir. Burada özellikle standart sapma artıkça eğrilerin normal dağılımdan uzaklaştığını görmekteyiz. Bu duruma şöyle bir yorum da getirilebilir, standart sapmanın artması varyansı ve dolayısıyla hatayı da artıracağından eğri sağa ve sola yayılım gösterir. Eğrinin altındaki alanın toplamı her durumda 1’e eşittir.

Normal dağılım eğrilerine daha yakından bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile normal dağılım eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(16)
orneklem<-1000
l1<-ggdensity(rnorm(orneklem, mean=0, sd=1),main="Ort=0, SS=1")
l2<-ggdensity(rnorm(orneklem, mean=1, sd=1),main="Ort=1, SS=1", col="orange")
l3<-ggdensity(rnorm(orneklem, mean=2, sd=3),main="Ort=2, SS=3", col="grey")
l4<-ggdensity(rnorm(orneklem, mean=3, sd=4),main="Ort=3, SS=4", col="brown")
l5<-ggdensity(rnorm(orneklem, mean=4, sd=5),main="Ort=4, SS=5", col="green")
l6<-ggdensity(rnorm(orneklem, mean=5, sd=6),main="Ort=5, SS=6", col="red")
ggarrange(l1,l2,l3,l4,l5,l6)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen normal dağılım grafikleri aşağıda verilmiştir. İlk grafik standart normal dağılım grafiğidir.

Şimdi çizilen bu normal dağılım grafiklerin aşağıda yazılan R kod bloğu ile gerçekten normal dağılıma uyum uymadığını q-q grafikleri ve shapiro wilk testleri ile konrol edelim.

#q-q grafikler
set.seed(16)
q1<-ggqqplot(rnorm(orneklem, mean=0, sd=1), main="Ort=0, SS=1")
q2<-ggqqplot(rnorm(orneklem, mean=1, sd=1), main="Ort=1, SS=1", col="orange")
q3<-ggqqplot(rnorm(orneklem, mean=2, sd=3), main="Ort=2, SS=3", col="grey")
q4<-ggqqplot(rnorm(orneklem, mean=3, sd=4), main="Ort=3, SS=4", col="brown")
q5<-ggqqplot(rnorm(orneklem, mean=4, sd=5), main="Ort=4, SS=5", col="green")
q6<-ggqqplot(rnorm(orneklem, mean=5, sd=6), main="Ort=5, SS=6", col="red")
ggarrange(q1,q2,q3,q4,q5,q6)
#Shapiro Wilk Normalite testleri
s1<-rnorm(orneklem, mean=0, sd=1)
s2<-rnorm(orneklem, mean=1, sd=1)
s3<-rnorm(orneklem, mean=2, sd=3)
s4<-rnorm(orneklem, mean=3, sd=4)
s5<-rnorm(orneklem, mean=4, sd=5)
s6<-rnorm(orneklem, mean=5, sd=6)
st<-tibble(s1,s2,s3,s4,s5,s6)
istatistik<-apply(st, 2, function(x) shapiro.test(x)$statistic)
pdegeri<-apply(st, 2, function(x) shapiro.test(x)$p.value)
round(rbind(istatistik,pdegeri),3)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen q-q grafikleri aşağıda verilmiştir. q-q grafiklere bakıldığında örneklem dağılımının teorik normal dağılımın eğrisi boyunca ilerlediği ve bu eğriden sapma göstermediği görülmektedir.

Yukarıdaki R kod bloğunda Shapiro Wilk testlerine ilişkin R kod bloğu çalıştırılmasıyla elde edilen sonuçlar aşağıda verilmiştir. Elde sonuçlara göre bütün dağılım veri setlerinde p >0,05 olduğu için verinin istatistiksel olarak normal dağılım gösterdiğini rahatlıkla söyleyebiliriz. Yukarıdaki q-q grafikleri de bunu doğrular niteliktedir.

              s1    s2    s3    s4    s5    s6
istatistik 0.998 0.998 0.998 0.999 0.999 0.999
pdegeri    0.246 0.418 0.162 0.878 0.900 0.799

Negatif binom regresyon yöntemi

Negatif bir binom dağılımı, Poisson dağılımlarının özel bir türüdür. Poisson olasılık dağılımı gibi kesikli bir olasılık dağılımıdır. Negatif binom dağılımı kitle fonksiyonu aşağıdaki denklemle ifade edilebilir. İkili sonuçları olan Bernoulli deneylerinde geçerli olan varsayımlar negatif binom dağılımı için de geçerlidir. Bağımsız Bernoulli deneylerinde ilk başarı önemliyken, negatif binom dağılımında r tane başarı elde durumu söz konusudur. Negatif binom dağılımı geometrik dağılımının genelleştirilmiş bir şeklidir.

x = 0, 1, 2, …n > 0 ve 0 < p ≤ 1. Eşitlikte p başarı olasılığını göstermektedir. Varsayımsal bir örnek vererek konuyu biraz somutlaştıralım.

Örnek: Covid-19 hastalığına maruz kalan sigara kullanan 65 yaşındaki bireyin bu hastalığa yakalanma olasılığı 0,70 ise bu hastalığa maruz kalan aynı yaşta 20. bireyin bu hastalığa yakalanan 8. birey olma olasılığı nedir?

Burada,

  • p=0,70 (hastalığa maruz kalma olasılığı)
  • x=20 (hastalığa maruz kalan 20. birey)
  • r=8 (hastalığa yakalanan 8. birey)

Yukarıda belirtilen negatif binom eşitliğinde verilenleri yerine koyarsak

Yapılan işlemi aşağıdaki R kod bloğunda da verelim kullanılan fonksiyonun görülebilmesi açısından.

options(scipen=999)#Sonuçların bilimsel gösterimden eşitliği kurtarmak için
round(choose(19,7)*(1-0.7)^(20-8)*(0.7)^8,5)#burada choose () fonksiyonu kombinasyon hesaplamasında kullanılmıştır.
#Sonuç:0.00154

R’da rnbinom fonksiyonu ile belirtilen negatif binom dağılıma göre rastgele seçilen 1 veya daha fazla sayı üretilmektedir. rnbinom(n, size, prob, mu) fonksiyonu negatif binom dağılımına göre tekrarsız seçilen örneklem büyüklüğünü göstermektedir. Fonksiyondaki size parametresi, diğer bir ifadeyle shape parametresi hedeflenen başarılı denemelerin sayısını, mu ise ortalamasını göstermektedir. İlk olarak rnbinom fonksiyonunu kullanarak negatif binom dağılımına uygun gözlem sayısı 10000, hedeflenen başarılı denemelerin sayısı 20, ortalamanın ise 5 olduğu varsayımından hareketle aşağıda yazılan R kod bloğu ile histogramı çizilmiştir.

nbd<-tibble(Sayi=rnbinom(n=10000, size=20, mu=5))
ggplot(nbd, aes(x=Sayi)) + 
geom_histogram(aes(y=..density..),bins=100,binwidth=.3, fill="red")+
geom_density(alpha=.3, fill="blue")+
xlab("")+
ylab("Yoğunluk")+
ggtitle("Negatif Binom Dağılımı Yoğunluk ve Histogram")
#Alternatif olarak sadece yoğunluk grafiği verecek olursak
ggdensity(rnbinom(n=10000, size=20, mu=5), xlab="",ylab="Yoğunluk", main="Negatif Binom Dağılımı Yoğunluk Grafiği", col="red")+
theme_economist()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Negatif binom dağılımına ilişkin histogram ve yoğunluk aşağıdaki grafik üzerinde verilmiştir.

Alternatif olarak daha net görebilmek adına sadece yoğunluk grafiği verecek olursak R kod bloğundaki ilgili alan çalıştırıldığında aşağıdaki grafik elde edilmiş olacaktır. Burada amaç biraz da grafiği farklı bir temayla sunmak :).

Şimdi de Negatif Binom dağılımına uygun olarak aynı popülasyon büyüklüğü (N) sahip ancak farklı size ve ortalama (mu) değerleriyle karşılaştırmalı olarak negatif binom dağılıma grafik üzerinde bakalım. Aşağıda yazılan R kod bloğu ile popülasyon büyüklüğü (N) 1000 olan

  1. mu = 4, size = 10
  2. mu = 8, size = 20
  3. mu = 12, size = 30
  4. mu = 16, size = 40
  5. mu = 20, size = 50
  6. mu = 24, size = 60

değerlerine sahip negatif binom eğrileri çizilmiştir.

set.seed(61)
orneklem<-1000
nb1<-density(rnbinom(orneklem, mu = 4, size = 10))
nb2<-density(rnbinom(orneklem, mu = 8, size = 20))
nb3<-density(rnbinom(orneklem, mu = 12, size = 30))
nb4<-density(rnbinom(orneklem, mu = 16, size = 40))
nb5<-density(rnbinom(orneklem, mu = 20, size = 50))
nb6<-density(rnbinom(orneklem, mu = 24, size = 60))
par(oma = c(1, 0.1, 0.1, 0.1))
plot(nb1,                               
     xlim = c(0,20),
     ylim = c(0,0.25),
     main = "Negatif Binom Dağılımı")
lines(nb2, col = "orange", lwd = 2)             
lines(nb3, col = "grey", lwd = 2)             
lines(nb4, col = "brown", lwd = 2)  
lines(nb5, col = "green", lwd = 2)  
lines(nb6, col = "red", lwd = 2)  
legend("topright",                                   
       legend = c("Size= 10",
                  "Size= 20",
                  "Size= 30",
                  "Size= 40",
                  "Size= 50",
                  "Size= 60"),
       col = c("black", "orange", "grey", "brown","green","red"),
       lty = 1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra farklı mu ve size sapma değerlerine sahip negatif binom olasılık dağılım eğrileri aşağıdaki grafikte verilmiştir.

Negatif binom olasılık dağılım eğrilerine daha yakın plandan bakacak olursak eğrilerin izlediği seyri daha da iyi anlayabiliriz. Yazılan R kod bloğu ile Negatif Binom dağılım eğrilerine ilişkin grafikler ayrı ayrı verilmiştir.

set.seed(26)
orneklem<-1000
nby1<-ggdensity(rnbinom(orneklem, mu = 4, size = 10),main="m = 4, s = 10", col="orange")
nby2<-ggdensity(rnbinom(orneklem, mu = 8, size = 20),main="m = 8, s = 20",col="orange")
nby3<-ggdensity(rnbinom(orneklem, mu = 12, size = 30),main="m = 12, s = 30", col="grey")
nby4<-ggdensity(rnbinom(orneklem, mu = 16, size = 40),main="m = 16, s = 40", col="brown")
nby5<-ggdensity(rnbinom(orneklem, mu = 20, size = 50),main="m = 20, s = 50",col="green")
nby6<-ggdensity(rnbinom(orneklem, mu = 24, size = 60),main="m = 24, s = 60", col="red")
ggarrange(nby1,nby2,nby3,nby4,nby5,nby6)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen grafikler aşağıda verilmiştir. Elde edilen bulgular mu ve size değerleri yükseldikçe dağılım normal dağılıma evrildiğini göstermektedir.

Poisson regresyon modeli aşağıdaki eşitlikteki gibi ifa edilebilir. Yöntemde regresyon katsayıları maksimum olasılık ya da maksimum olabilirlik yöntemi (MLE) kullanılarak hesaplanır.

Negatif binom regresyon modeli ise aşağıdaki eşitlikteki gibi gösterilebilir. Bu modelde Poisson regresyon yöntemine benzer olarak regresyon katsayıları maksimum olasılık (maksimum likehood) yöntemi kullanılarak tahmin edilir.

Kurulan regresyon analiz modellerinde güvenilir bir regresyon modeli kurmak için örneklem büyüklüğünün asgari şartları karşılaması gerekmektedir. Buna göre;

  • Kurulan regresyon modelinin tamamını değerlerdirmek için önerilen minimum örneklem büyüklüğü 50 + 8k‘tır. k burada bağımsız değişkenlerin sayısını göstermektedir. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 50 + 8 X 10 eşitliğinden 130’dur.
  • Eğer bireysel olarak bağımsız değişkenler değerlendirilecek ise minimum örneklem büyüklüğü 104 + k‘tır. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 104 + 8 eşitliğinden 112’dir.
  • Diğer taraftan örneklem büyüklüğü ve bağımsız değişkenin sayısına göre Cohen’in kriterini kullanarak etki büyüklüğünü hesaplayabiliriz. Cohen’in etki büyüklüğü örneklem büyüklüğü ve bağımsız değişken sayısı artıkça etki büyüklüğü azalış göstermektedir. Bu durum istenen bir durumdur. Cohen’in etki büyüklüğü R= k / (N-1) formülü ile hesaplanmaktadır. k burada bağımsız değişken sayısını, N ise örneklem / popülasyon büyüklüğünü / gözlem sayısını göstermektedir. Yukarıdaki veriler kullanılarak örnek vermek gerekirse 8 / ( 112-1) =0,07‘dir. R katsayısının 0 olması etki olmadığı anlamına gelmektedir ki, bu durumda örneklem büyüklüğünün ve değişken sayısının kurulan regresyon modelinde optimal noktaya ulaştığı anlamına gelir.

Veri seti

“warpbreaks” veri setinde bağımlı değişken olan breaks (mola sayısı) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Veri setindeki toplam gözlem sayısı 54, değişken sayısı ise 3’tür. Bu veri setine R programlama yazılımında “warpbreaks” olarak yer verilmiştir. Veri setindeki gözlem sayısı yukarıda verilen asgari örneklem sayılarını karşılamasa da literatürde parametrik testler için önerilen örneklem büyüklüğü ya da gözlem sayısı 30 ve üzeri olduğu için burada kullanılmıştır. Veri setinde değişkenlerin adları anlaşılması adına Türkçe olarak düzenlenmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:

  1. molasayisi (breaks): Veri tipi nicel ve kesikli sayma sayılarından oluşmaktadır.
  2. yuntipi (wool): Veri tipi nitel ve kategorik olup, A ve B kategorilerinden oluşmaktadır.
  3. gerginlik (tension): Veri tipi nitel ve kategorik olup, Düşük, Orta ve Yüksek kategorilerinden oluşmaktadır.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “molasayisi” geri kalan 2 bağımsız değişken kullanılarak tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())
kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","effect","psych","writexl","ggfortify","explore","MASS")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması ve değişkenlerin Türkçe olarak revize edilmesi

veri<-warpbreaks %>% as_tibble() %>% rename(molasayisi=breaks, yuntipi=wool, gerginlik=tension)%>% mutate(gerginlik=recode_factor(gerginlik, L="Dusuk", M="Orta", H="Yuksek"))

Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "veriseti.xlsx")#xlsx dosyası için

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki değişkenlerin görselleştirilmesi
veri %>% explore_all()
 
#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Kategorik değişkenlere göre mola sayılarının dağılımı

ggplot(veri)+
  geom_col(aes(x = molasayisi, y = yuntipi, fill = gerginlik))+
facet_wrap(~gerginlik)+
  theme(axis.text.x = element_text(angle = 90))

Cevap değişkeni Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki kategorik değişkenlere göre mola sayısının dağılımı aşağıdaki grafikte verilmiştir. Aşağıdaki grafik değişkenlere bir bütün olarak yaklaşmanıza katkı sağlamış olacaktır.

Nicel değişkenlerin normal dağılıma uyup uymadığının kontrol edilmesi

Bu kısımda normalitenin testinde her ne kadar Shapiro-Wilk testi kullanılsa da Kolmogorow-Smirnov testinin de kullanılabileceğini ifade etmede fayda bulunmaktadır. Ayrıca verinin normal dağılıma uyup uymadığı kutu diyagramlarda uç değerlere bakılarak ve Cook’un mesafesine bakılarak da görülebilir. Diğer taraftan çarpıklık ve basıklık değerleri de verinin normal dağılıma uyup uymadığı noktasında bizlere önemli ipuçları verebilir, bunları hatırlatmakta fayda var.

#Q-Q plot ile molasayisi değişkeninin normal dağılıma uyumu incelenmiştir.
ggqqplot(veri$molasayisi, ylab = "Mola Sayısı", color="red")
#Normalite testi
shapiro.test(veri$molasayisi)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra molasayisi değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra bağımlı değişkenin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Normalitenin testi için kullanılan Shapiro-Wilk testi sonuçları ise aşağıda verilmiştir. Elde edilen bulgular, p değeri 0,05’ten küçük olduğu için molasayisi değişkeni normal dağılım göstermemektedir.

	Shapiro-Wilk normality test
data:  veri$molasayisi
W = 0.89251, p-value = 0.0001581

Poisson olasılık dağılımına göre değişkenin ortalaması ve varyansı birbirine eşit veya çok yakın olmalıdır. Aşağıda yazılan R kod bloğunda bağımlı değişken olan mola sayısının ortalama ve varyansların eşit veya birbirine yakın olup olmadığına bakalım. Elde edilen bulgulardan şu anki durumda varyans (174.2041) değerinin ortalama (28.14815) değerinin çok üzerinde olduğunu göstermektedir. Bu durum kurulacak modelde aşırı yayılım (overdispersion) endişesini artırmakla birlikte bağımlı değişkenin poisson dağılımda varyansın ortalamaya eşit veya ona yakın olması kuralını ihlal edilmesi anlamına da gelmektedir.

mean(veri$molasayisi);var(veri$molasayisi)#Ortalama ve Varyans Sırasıyla: 28.14815, 174.2041

Aşağıda yazılan R kod bloğu ile bağımlı değişkenin Poisson ve negatif binom dağılımına uyup uymadığına bakmak için hem histogramını çizelim hem de uyum iyiliği (goodness of fit) testlerini yapalım.

#Bağımlı değişkenin histogramı
ggplot(veri, aes(x=molasayisi))+geom_bar(bins=100,binwidth=.5, fill="red")+
xlab("")+
ylab("Sıklık")+
ggtitle("Mola Sayısı Değişkeni Histogramı")+
theme_replace()
#uyum iyiliği testleri
library(vcd)
#poisson dağılımı uyum iyiliği testi
ozet<-table(veri$molasayisi)
uyum <- goodfit(ozet, type = "poisson", method = "MinChisq")
summary(uyum)
#negatif binom dağılımı uyum iyiliği testi
ozet<-table(veri$molasayisi)
uyum <- goodfit(ozet, type = "nbinomial", method = "MinChisq")
summary(uyum)

Yukarıdaki R kod bloğunun ilgili satırı çalıştırıldığında bağımlı değişken olan mola sayısının histogramı aşağıda verilmiştir. Elde edilen grafik mola sayısının poisson dağılımına çok da uyum göstermemiş görünüyor.

Histogram bize net bilgi vermediği için R kod bloğundaki ilgili satırlarda sırasıyla ilk olarak Poisson dağılımı uyum iyiliği test sonuçları aşağıda verilmiştir. Elde edilen sonuçlar istatistiksel olarak anlamlı olduğu için mola sayısı değişkeni Poisson dağılımına uygun değildir (p<0,05).

 Goodness-of-fit test for poisson distribution
           X^2 df P(> X^2)
Pearson 167868 69        0

Değişkenimizin Poisson dağılıma uyum sağlamadığını biliyoruz. Bu yüzden R kod bloğunda ilgili satırı çalıştırarak değişkenin negatif binom dağılımına uygun olup olmadığını test edelim.Elde edilen bulgular istatistiksel olarak anlamlı olmadığı için mola sayısı değişkeni negatif binom dağılımına uygundur (p>0,05).

	 Goodness-of-fit test for nbinomial distribution
             X^2 df  P(> X^2)
Pearson 50.92181 68 0.9394755

Poisson regresyon modelinin kurulması

Kurulan Poisson regresyon modelinde bağımlı değişken molasayisi, diğer değişkenler ise bağımsız olup, regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model1 <-glm(molasayisi ~., data = veri, family = poisson)
summ(model1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir. Çıktıda yer verilen AIC (Akaike information criterion) parametresi kurulan tek bir modelin değerlendirilmesinde çok fazla anlam ifade etmemekle birlikte BIC (Akaike information criterion) parametresinde olduğu gibi ne kadar düşük olursa kurulan modelin o kadar gözlem verisine uyum sağladığını göstermektedir. Bu açıdan bakıldığında aslında bu iki parametrenin kurulan birden fazla modelin performansının değerlendirilmesinde kullanılması daha uygundur.

Call:  glm(formula = molasayisi ~ ., family = poisson, data = veri)
Coefficients:
    (Intercept)         yuntipiB    gerginlikOrta  gerginlikYuksek  
         3.6920          -0.2060          -0.3213          -0.5185  
Degrees of Freedom: 53 Total (i.e. Null);  50 Residual
Null Deviance:	    297.4 
Residual Deviance: 210.4 	AIC: 493.1
[1] 1
MODEL INFO:
Observations: 54
Dependent Variable: molasayisi
Type: Generalized linear model
  Family: poisson 
  Link function: log 
MODEL FIT:
χ²(3) = 86.98, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.80
Pseudo-R² (McFadden) = 0.15
AIC = 493.06, BIC = 501.01 
Standard errors: MLE
----------------------------------------------------
                         Est.   S.E.   z val.      p
--------------------- ------- ------ -------- ------
(Intercept)              3.69   0.05    81.30   0.00
yuntipiB                -0.21   0.05    -3.99   0.00
gerginlikOrta           -0.32   0.06    -5.33   0.00
gerginlikYuksek         -0.52   0.06    -8.11   0.00
----------------------------------------------------

Aşağıda yazılan R kod bloğunda kurulan 1 nolu modelde yayılım (dispersion) olup olmadığına bakalım.

formattable(tibble(Artik_Sapma          = deviance(model1),
     Artik_Serbestlik_Derecesi = df.residual(model1),
     Yayilim_Degeri=deviance(model1)/df.residual(model1),
     Kikare_p_Degeri              = pchisq(deviance(model1), df.residual(model1), lower = F)))
#alternatif adım adım
deger<-deviance(model1)#210.39
sd<-model1$df.residual#artıkların serbestlik derecesi
asiriyayilim<-deger/sd# artıkların serbestlik derecesine bölünmesi sonucu elde edilen değer 1'den büyükse kurulan model veriye uymadığını göstermekte ve aşırı yayılım (overdispersion) olduğunu göstermektedir.
asiriyayilim #4.207838 yani Pearson X2/50 = 4.207838

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen yayılım (dispersion) değeri aşağıda verilmiştir. Literatürde artıkların serbestlik derecesine bölünmesi sonucu elde edilen değer 1’den büyükse kurulan model veriye uymadığını göstermekte ve aşırı yayılım (overdispersion) olduğunu göstermektedir. Elde edilen bulgulara göre yayılım değeri 1’in çok üzerinde olduğu ve istatistiksel olarak anlamlı olduğu için burada aşırı yayılımın olduğunu söyleyebiliriz (Pearson X2/50 = 4.207838, p<0,05). Bu durumda eğer aşırı yayılım varsa negatif binom regresyon yönteminin denenmesi gerekmektedir.

Negatif binom regresyon modelinin kurulması

1 nolu modelde aşırı yayılım olduğu tespit edilmesinden dolayı yazılan aşağıdaki R kod bloğunda 2 nolu negatif binom regresyon modeli kurulmuştur.

model2 <-glm.nb(molasayisi ~., data = veri)
summary(model2)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen negatif binom regresyon model özeti aşağıda verilmiştir.

Call:
glm.nb(formula = molasayisi ~ ., data = veri, init.theta = 9.944385436, 
    link = log)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0144  -0.9319  -0.2240   0.5828   1.8220  
Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)       3.6734     0.0979  37.520  < 2e-16 ***
yuntipiB         -0.1862     0.1010  -1.844   0.0651 .  
gerginlikOrta    -0.2992     0.1217  -2.458   0.0140 *  
gerginlikYuksek  -0.5114     0.1237  -4.133 3.58e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Negative Binomial(9.9444) family taken to be 1)
    Null deviance: 75.464  on 53  degrees of freedom
Residual deviance: 53.723  on 50  degrees of freedom
AIC: 408.76
Number of Fisher Scoring iterations: 1
              Theta:  9.94 
          Std. Err.:  2.56 
 2 x log-likelihood:  -398.764 

Şimdi kurulan 2 nolu modelde aşırı yayılım olup olmadığını aşağıda yazılan R kod bloğu ile test edelim.

model2 <-glm.nb(molasayisi ~., data = veri)
formattable(tibble(Artik_Sapma          = deviance(model2),
     Artik_Serbestlik_Derecesi = df.residual(model2),
     Yayilim_Degeri=deviance(model2)/df.residual(model2),
     Kikare_p_Degeri              = pchisq(deviance(model2), df.residual(model2), lower = F)))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen yayılım (dispersion) değeri aşağıda verilmiştir. Elde edilen bulgulara göre yayılım değeri yaklaşık 1 ve istatistiksel olarak anlamlı olmadığı için burada aşırı yayılımın olmadığı, aksine eşit yayılım olduğunu söyleyebiliriz.

Model karşılaştırmaları

Kurulan modelleri AIC ve BIC değerleri açısından karşılaştıralım. AIC ve BIC değerlerinin düşük olması tahmin edilen değerlerle gözlem verilerine uyum açısından istenen bir durum olduğu daha önce belirtilmişti. Elde edilen sonuçlar Model 2’nin AIC ve BIC değerleri daha düşük olduğundan Model 1’e göre daha iyi tahmin sonuçları ortaya koyduğu söylenebilir.

model1 <-glm(molasayisi ~., data = veri, family = poisson)
model2 <-glm.nb(molasayisi ~., data = veri)
stargazer(model1,model2, scale=F,  type="text", digits=3)
#alternatif
export_summs(model1, model2, scale = F, results = 'asis')

Yukarıdaki R kod bloğu çalıştırıldıktan sonra kurulan modellere ilişkin karşılaştırmalı raporlar aşağıda tablolarda verilmiştir. Ortaya konulan bulgular AIC ve BIC parametrelerinde olduğu gibi 2 nolu model 1 nolu modele göre daha az hata üretmektedir. Dolayısıyla bu bulgulara bakarak 2 nolu modelin daha iyi olduğu ileri sürülebilir.

==============================================
                      Dependent variable:     
                  ----------------------------
                           molasayisi         
                    Poisson       negative    
                                  binomial    
                      (1)           (2)       
----------------------------------------------
yuntipiB           -0.206***      -0.186*     
                    (0.052)       (0.101)     
                                              
gerginlikOrta      -0.321***      -0.299**    
                    (0.060)       (0.122)     
                                              
gerginlikYuksek    -0.518***     -0.511***    
                    (0.064)       (0.124)     
                                              
Constant           3.692***       3.673***    
                    (0.045)       (0.098)     
                                              
----------------------------------------------
Observations          54             54       
Log Likelihood     -242.528       -200.382    
theta                         9.944*** (2.561)
Akaike Inf. Crit.   493.056       408.764     
==============================================
Note:              *p<0.1; **p<0.05; ***p<0.01

Yukarıdaki R kod kod bloğunda ilgili alan çalıştırılınca BIC değerlerinin ve pseudo R^2 olduğu alternatif bir rapor da üretebiliriz. Bu tamamen karar vericiye bağlıdır.

─────────────────────────────────────────────────────
                       Model 1          Model 2      
                  ───────────────────────────────────
  (Intercept)             3.69 ***         3.67 ***  
                         (0.05)           (0.10)     
  yuntipiB               -0.21 ***        -0.19      
                         (0.05)           (0.10)     
  gerginlikOrta          -0.32 ***        -0.30 *    
                         (0.06)           (0.12)     
  gerginlikYuksek        -0.52 ***        -0.51 ***  
                         (0.06)           (0.12)     
                  ───────────────────────────────────
  N                      54               54         
  AIC                   493.06           408.76      
  BIC                   501.01           418.71      
  Pseudo R2               0.80             0.29      
─────────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.            
Column names: names, Model 1, Model 2

Kurulan regresyon modellerine göre regresyon katsayıları

Aşağıda yazılan R kod bloğu ile regresyon katsayı büyüklükleri kurulan modellere göre karşılaştırmalı olarak verilmiştir.

#normalize edilmemiş katsayı büyüklükleri
plot_summs(model1, model2, scale = F, exp = TRUE)+
ggtitle("Modellere Göre Regresyon Katsayıları")
#normalize edilmiş katsayı büyüklükleri
plot_summs(model1, model2, scale = F, exp = TRUE) +
ggtitle("Modellere Göre Normalize Edilmiş Regresyon Katsayıları")

Yukarıdaki R kod bloğunun ilk satırının çalıştırılmasından sonra kurulan regresyon modellerine göre elde edilen regresyon katsayıları aşağıdaki grafikte verilmiştir. Burda Model 1 Poisson regresyon modeli, Model 2 ise negatif regresyon modeli olduğunu tekrar hatırlatmakta fayda var.

Yukarıdaki R kod bloğunun ikinci satırının çalıştırılmasından sonra kurulan regresyon modellerine göre elde edilen normalize edilmiş regresyon katsayıları aşağıdaki grafikte verilmiştir.

Bağımsız değişkenler ile bağımlı değişken arasındaki etkileşim düzeyleri

Kurulan 2 nolu model (negatif binom regresyon)’de bağımsız değişkenlerin her birinin bağımlı değişken üzerindeki etkisini ölçümlemeye yönelik aşağıda yazılan R kod bloğu ile karşılaştırmalı olarak verilmiştir.

plot(Effect(focal.predictors = c("gerginlik", "yuntipi"),model2), main="Gerginlik ve Yün Tipi Değişkenlerinin Etkisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen değişkenlerin etki düzeyleri aşağıdaki grafikte verilmiştir. Burada, yün tipi A olduğu zaman mola sayısındaki artış B’ye göre daha yüksektir. Diğer taraftan, gerginlik seviyesi yükseldikçe mola sayısında düşüş olduğu görülmektedir. Her iki bağımsız değişken birlikte değerlendirildiğinde yün tipinin A ve gerginlik seviyesinin Düşük olduğu durumda mola sayısı en yüksek seviyesine ulaşmıştır.

Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır.

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

R’da Çoklu Doğrusal Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Multiple Linear Regression (MLR) in R

Giriş

Regresyon analizi yöntemlerinden biri olan multiple (çoklu) regresyon analiz (MRA) yöntemi, bağımlı değişkenin ya da cevap değişkeninin
nicel sürekli veya kesikli olduğu 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.
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

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.

  1. 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.
  2. 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 görselin boş bir alt özelliği var; dosya ismi: image-3.png

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms

  • 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.

Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında R programlama dili içerisinde bulunan “mlbench” paketi içerisinde “BostonHousing” veri seti kullanılarak multiple regresyon yöntemiyle regresyon problemi çözülecektir. Bu amaçla bağımlı değişken olan ABD’nin Boston bölgesindeki konutların medyan fiyatları tahmin edilecektir.

Metodoloji ve Uygulama Sonuçları

Çoklu Doğrusal Regresyon Yöntemi

Regresyon modeli aşağıdaki eşitlikteki gibi ifa edilebilir.

Yi01X i12Xi2+…+βkXik +𝜀𝑖𝑗

Burada i=1,2,…n j=1,2,…k şeklinde tanımlanır.

Eşitlikte;
Yi: Bağımlı değişkeninin gözlenen i.inci
değerini
Xij: j.inci bağımsız değişkenin i.inci
düzeyindeki değerini
βj: j.inci regresyon katsayısını
εij: Hata terimini
k: Bağımsız değişken sayısını göstermektedir

Çoklu Doğrusal Regresyon Yöntemi Varsayımları

Çoklu doğrusal regresyon yöntemi gözlemlere en iyi uyum sağlayan regresyon doğrusunu çizmek için en küçük kareler yöntemini kullanır. Hesaplanan en küçük kareler regresyon denklemi regresyon doğrusu ile gözlemler arasındaki minimum kare hataları toplamına veya sapmalara sahiptir. Söylenenleri kafamızda daha da canlandırmak adına en küçük kareler yöntemi (method of least squares)’nin işleyişi Şekil 4’de verilmiştir.

Şekil 4: En Küçük Kareler Yöntemi (Method Of Least Squares)’nin İşleyişi

lsr-residual-diagram

Kaynak: https://www.jmp.com

Değişken tipleri: Bütün bağımsız değişkenler nicel veya kategorik olmalıdır. Bağımlı değişken ise nicel kesikli veya süreklidir.

Varyans: Bağımsız değişkenlerin varyansı 0 olmamalıdır.

Çoklu doğrusal ilişki (Multicollinearity): 2 veya daha çok bağımsız değişken arasında mükemmel (r= 1 veya -1) veya mükemmele yakın (-1 veya 1’e yakın) bir ilişki olmamalıdır. Yani değişkenler arasında çok yüksek bir korelasyon bulunmamalıdır. Eğer kurulan regresyon modelinde değişkenler arasında güçlü bir ilişki varsa değişkenlerin bireysel önem düzeyinin belirlenmesi zorlaşacaktır. Bu ilişkiyi belirlemenin bir yolu da değişkenler arasındaki korelasyonun korelasyon matrisi ile ortaya konulmasıdır. Tabi burada belirtilen korelasyon katsayıların 0,80 ve üzerinde olmasıdır. Yaygın olarak kullanılan ilişki belirleme yöntemi varyans enflasyon faktörü (variance inflation factor) kısa adıyla VIF’tir. VIF de korelasyon matrisi gibi bağımsız değişkenler arasındaki ilişkinin gücünü ortaya koymaktadır. VIF değeri 10’dan büyükse kurulan regresyon modelinde endişe kaynağı olarak görülmelidir. VIF 1 / 1-R2 eşitliği ile hesaplanmaktadır. VIF ölçüm parametresine bağlı olarak hesaplanan tolerans (tolerance) seviyesi de çoklu doğrusal ilişkiyi ortaya koymada yardımcı olabilmektedir. Tolerans seviyesi VIF parametresinin çarpmaya göre tersidir. Diğer bir ifadeyle 1 / VIF eşitliği ile hesaplanmaktadır. 0,1’in altındaki tolerans seviyeleri çoklu doğrusal ilişki açısından gözden geçirilmelidir. Çoklu doğrusal ilşkiyi ortaya koymanın bir yolu da kurulan modelden üretilen varyans oranları ve normalize edilmiş özvektör değerlerinin hesaplanmasıdır.

Homoskedastisite (Homoscedasticity): Bağımsız değişkenlerin her seviyesinde artıklar (residuals)’ın varyansı aynı / sabit kalmalıdır, diğer bir ifadeyle varyanslar homojen olmalıdır. Eğer varyanslar eşit değilse heteroskedastisite (heteroscedasticity) durumu ortaya çıkar. Bu iki durum aşağıdaki grafikte karşılaştırmalı olarak verilmiştir.

Şekil 4: Homoskedastisite ve Heteroskedastisite

Metrics Monday: When Is Heteroskedasticity (Not) a Problem? – Marc ...

Kaynak: https://marcfbellemare.com/

Otokorelasyon: Hataların bağımsızlığı anlamına da gelen otokorelasyon bir gözlemle ilişkili hataların, diğer gözlemlerin hataları arasında korelasyon olmaması gerektiğini ileri sürer. Otokorelasyon testi için artıkların hatalarına bakılır. Bu varsayım Durbin-Watson testi test edilebilir. Test istatistiği 0 ile 4 arasında değişmektedir. 2’den büyük bir değer negatif otokorelasyonu, 2’den küçük değer ise pozitif otokorelasyonu göstermektedir.

Doğrusallık (Linearity): Modellenen ilişkinin doğrusal olması gerektiğini öne sürer. Eğer doğrusal olmayan (non-linear) bir ilişki varsa bulguların genellenebilirliği açısından problem oluşturacaktır.

Kurulan regresyon analiz modellerinde güvenilir bir regresyon modeli kurmak için örneklem büyüklüğünün asgari şartları karşılaması gerekmektedir. Buna göre;

  • Kurulan regresyon modelinin tamamını değerlerdirmek için önerilen minimum örneklem büyüklüğü 50 + 8k‘tır. k burada bağımsız değişkenlerin sayısını göstermektedir. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 50 + 8 X 10 eşitliğinden 130’dur.
  • Eğer bireysel olarak bağımsız değişkenler değerlendirilecek ise minimum örneklem büyüklüğü 104 + k‘tır. Örneğin bağımsız değişkenlerin sayısı 10 ise minimum örneklem büyüklüğü 104 + 8 eşitliğinden 112’dir.
  • Diğer taraftan örneklem büyüklüğü ve bağımsız değişkenin sayısına göre Cohen’in kriterini kullanarak etki büyüklüğünü hesaplayabiliriz. Cohen’in etki büyüklüğü örneklem büyüklüğü ve bağımsız değişken sayısı artıkça etki büyüklüğü azalış göstermektedir. Bu durum istenen bir durumdur. Cohen’in etki büyüklüğü R= k / (N-1) formülü ile hesaplanmaktadır. k burada bağımsız değişken sayısını, N ise örneklem / popülasyon büyüklüğünü / gözlem sayısını göstermektedir. Yukarıdaki veriler kullanılarak örnek vermek gerekirse 8 / ( 112-1) =0,07‘dir. R katsayısının 0 olması etki olmadığı anlamına gelmektedir ki, bu durumda örneklem büyüklüğünün ve değişken sayısının kurulan regresyon modelinde optimal noktaya ulaştığı anlamına gelir.

Veri seti

ABD’nin Boston bölgesinde konutların medyan fiyatları (hedef değişken) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Analizde kullanılan veri seti ABD Nüfus Bürosu tarafından Boston bölgesindeki konutlarla ilgili olarak toplanan verilerden oluşmaktadır. Veri setindeki toplam gözlem sayısı 506, değişken sayısı ise 14’tür. Bu veri setine R programlama yazılımında “mlbench” paketi içerisinde “BostonHousing” olarak yer verilmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:

  1. crim: per capita crime rate by town. Veri tipi nicel ve süreklidir.
  2. zn: proportion of residential land zoned for lots over 25,000 sq.ft. Veri tipi nicel ve kesiklidir.
  3. indus: proportion of non-retail business acres per town. Veri tipi nicel ve süreklidir.
  4. chas: Charles River dummy variable (1 if tract bounds river; 0 otherwise). Veri tipi nitel ve nominal kategoriktir.
  5. nox: nitric oxides concentration (parts per 10 million): Veri tipi nicel ve süreklidir.
  6. rm: average number of rooms per dwelling. Veri tipi nicel ve süreklidir.
  7. age: proportion of owner-occupied units built prior to 1940. Veri tipi nicel ve süreklidir.
  8. dis: weighted distances to five Boston employment centres. Veri tipi nicel ve kesiklidir.
  9. rad: index of accessibility to radial highways. Veri tipi nicel ve süreklidir.
  10. tax: full-value property-tax rate per $10,000. Veri tipi nicel ve kesiklidir.
  11. ptratio: pupil-teacher ratio by town. Veri tipi nicel ve süreklidir.
  12. b: 1000(Bk – 0.63)^2 where Bk is the proportion of blacks by town. Veri tipi nicel ve süreklidir.
  13. lstat: % lower status of the population. Veri tipi nicel ve süreklidir.
  14. medv: Median value of owner-occupied homes in $1000’s. Veri tipi nicel ve süreklidir.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “medv” yani konut fiyatlarının medyan değeri geri kalan 13 bağımsız değişken kullanılarak çoklu doğrusal regresyon analiz yöntemiyle tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Boston Konut Fiyatları Veri Seti İndir

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS","gbm")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması

data(BostonHousing)
veri<-BostonHousing

Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "Bostonkonutfiyatları.xlsx")#xlsx dosyası için

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx uzantılı dosyaya yazdırılmıştır. Elde edilen veri seti dosyası xlsx uzantılı olarak aşağıdan indirilebilir.Boston Konut Fiyatları Veri Setiİndir

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()
#veri setindeki 11,12,13 ve 14. değişkenlerin görselleştirilmesi
veri[,11:14] %>% explore_all()
 
#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 11, 12, 13 ve 14. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Boston Konut Fiyatları veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Değişkenler arasındaki korelasyonun hesaplanması

Kategorik değişkenlerin korelasyon katsayılarını hesaplamak için yazılan R kod bloğu aşağıdadır. Değişkenler arasındaki korelasyonu hesaplamak için Kikare ve Anova testleri kullanılmıştır. Korelasyon katsayısı hesaplanacak her iki değişkenin de nitel ve nominal olmasından dolayı Kikare, korelasyon katsayısı hesaplanacak değişkenlerden biri nicel kesikli ve diğeri nominal olduğundan Anova testleri yapılmıştır. Korelasyon katsayısı hesaplanacak değişkenlerden biri ordinal (sıralı) olsaydı bu durumda Spearman korelasyon (SpearmanRho) katsayısının hesaplanması gerekecekti. Diğer taraftan, eğer her iki değişken nicel (sürekli ve kesikli) olsaydı bu durumda Pearson korelasyon katsayısını hesaplayacaktık.

#Pearson korelasyon matrisi 
cor.plot(veri[,-4], main="Korelasyon Matrisi")#grafik formatında
kormatris<-cor(veri[,-4])#matris formatınta
kormatris
findCorrelation(kormatris, cutoff=0.8,names=TRUE, exact = TRUE)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayılarını hesapladık.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen korelasyon katsayıları matris formatında aşağıda verilmiştir.

              crim         zn      indus        nox         rm        age
crim     1.0000000 -0.2004692  0.4065834  0.4209717 -0.2192467  0.3527343
zn      -0.2004692  1.0000000 -0.5338282 -0.5166037  0.3119906 -0.5695373
indus    0.4065834 -0.5338282  1.0000000  0.7636514 -0.3916759  0.6447785
nox      0.4209717 -0.5166037  0.7636514  1.0000000 -0.3021882  0.7314701
rm      -0.2192467  0.3119906 -0.3916759 -0.3021882  1.0000000 -0.2402649
age      0.3527343 -0.5695373  0.6447785  0.7314701 -0.2402649  1.0000000
dis     -0.3796701  0.6644082 -0.7080270 -0.7692301  0.2052462 -0.7478805
rad      0.6255051 -0.3119478  0.5951293  0.6114406 -0.2098467  0.4560225
tax      0.5827643 -0.3145633  0.7207602  0.6680232 -0.2920478  0.5064556
ptratio  0.2899456 -0.3916785  0.3832476  0.1889327 -0.3555015  0.2615150
b       -0.3850639  0.1755203 -0.3569765 -0.3800506  0.1280686 -0.2735340
lstat    0.4556215 -0.4129946  0.6037997  0.5908789 -0.6138083  0.6023385
medv    -0.3883046  0.3604453 -0.4837252 -0.4273208  0.6953599 -0.3769546
               dis        rad        tax    ptratio          b      lstat
crim    -0.3796701  0.6255051  0.5827643  0.2899456 -0.3850639  0.4556215
zn       0.6644082 -0.3119478 -0.3145633 -0.3916785  0.1755203 -0.4129946
indus   -0.7080270  0.5951293  0.7207602  0.3832476 -0.3569765  0.6037997
nox     -0.7692301  0.6114406  0.6680232  0.1889327 -0.3800506  0.5908789
rm       0.2052462 -0.2098467 -0.2920478 -0.3555015  0.1280686 -0.6138083
age     -0.7478805  0.4560225  0.5064556  0.2615150 -0.2735340  0.6023385
dis      1.0000000 -0.4945879 -0.5344316 -0.2324705  0.2915117 -0.4969958
rad     -0.4945879  1.0000000  0.9102282  0.4647412 -0.4444128  0.4886763
tax     -0.5344316  0.9102282  1.0000000  0.4608530 -0.4418080  0.5439934
ptratio -0.2324705  0.4647412  0.4608530  1.0000000 -0.1773833  0.3740443
b        0.2915117 -0.4444128 -0.4418080 -0.1773833  1.0000000 -0.3660869
lstat   -0.4969958  0.4886763  0.5439934  0.3740443 -0.3660869  1.0000000
medv     0.2499287 -0.3816262 -0.4685359 -0.5077867  0.3334608 -0.7376627
              medv
crim    -0.3883046
zn       0.3604453
indus   -0.4837252
nox     -0.4273208
rm       0.6953599
age     -0.3769546
dis      0.2499287
rad     -0.3816262
tax     -0.4685359
ptratio -0.5077867
b        0.3334608
lstat   -0.7376627
medv     1.0000000

Korelasyon katsayılarının kontrol edilmesi

Bu kısımda pearson korelasyon katsayılarının 0,80 üzerinde olup olmadığı kontrol edilmiş olup, buna ilişkin yazılan R kod bloğuna aşağıda yer verilmiştir.

kormatris<-cor(veri[,-4])
findCorrelation(kormatris, cutoff=0.8,names=TRUE, exact = TRUE)

Yukarıdaki R kod bloğunun run edilmesi ile elde edilen sonuç aşağıda verilmiştir. Tablodan tax değişkeninin korelasyon katsayısının tamamının 0.80’in üzerinde olduğu (r=0,92) olduğu görülmektedir. Bu değişken ilk modelde yer alacaktır ancak kurulacak ikinci modelde yer almayacaktır.

[1] "tax"

Nicel değişkenlerin normal dağılıma uyup uymadığının kontrol edilmesi

#Q-Q plot ile crim değişkeninin normal dağılıma uyumu incelenmiştir.
v1<-ggqqplot(veri$crim, ylab = "crim", color="red")

#Q-Q plot ile zn değişkeninin normal dağılıma uyumu incelenmiştir.
v2<-ggqqplot(veri$zn, ylab = "zn", color="red")

#Q-Q plot ile indus değişkeninin normal dağılıma uyumu incelenmiştir.
v3<-ggqqplot(veri$indus, ylab = "indus", color="red")

#Q-Q plot ile nox değişkeninin normal dağılıma uyumu incelenmiştir.
v4<-ggqqplot(veri$nox, ylab = "crim", color="red")

#Q-Q plot ile rm değişkeninin normal dağılıma uyumu incelenmiştir.
v5<-ggqqplot(veri$rm, ylab = "rm", color="red")

#Q-Q plot ile age değişkeninin normal dağılıma uyumu incelenmiştir.
v6<-ggqqplot(veri$age, ylab = "age", color="red")

#Q-Q plot ile dis değişkeninin normal dağılıma uyumu incelenmiştir.
v7<-ggqqplot(veri$dis, ylab = "dis", color="red")

#Q-Q plot ile rad değişkeninin normal dağılıma uyumu incelenmiştir.
v8<-ggqqplot(veri$rad, ylab = "rad", color="red")

#Q-Q plot ile tax değişkeninin normal dağılıma uyumu incelenmiştir.
v9<-ggqqplot(veri$tax, ylab = "tax", color="red")

#Q-Q plot ile ptratio değişkeninin normal dağılıma uyumu incelenmiştir.
v10<-ggqqplot(veri$ptratio, ylab = "ptratio", color="red")

#Q-Q plot ile b değişkeninin normal dağılıma uyumu incelenmiştir.
v11<-ggqqplot(veri$b, ylab = "b", color="red")

#Q-Q plot ile lstat değişkeninin normal dağılıma uyumu incelenmiştir.
v12<-ggqqplot(veri$lstat, ylab = "lstat", color="red")

#Q-Q plot ile medv değişkeninin normal dağılıma uyumu incelenmiştir.
v13<-ggqqplot(veri$medv, ylab = "medv", color="red")

ggarrange(v1,v2,v3,v4)#ilk dört değişken

ggarrange(v5,v6,v7,v8)#2. ilk dört değişken

ggarrange(v9,v10,v11,v12, v13)#3. ilk beş değişken

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk gruba ait dört değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ikinci grup ilk dört değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra üçüncü gruba ait ilk beş değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Çoklu regresyon modelinin kurulması

Kurulan çoklu regresyon modelinde bağımlı değişken medv, diğer değişkenler ise bağımsız olup, regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model1 <- glm(medv ~. , data = veri)
summ(model1)

#alternatif
model1 <- lm(medv ~. , data = veri)
summary(model1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir. Çıktıda yer verilen AIC (Akaike information criterion) parametresi kurulan tek bir modelin değerlendirilmesinde çok fazla anlam ifade etmemekle birlikte BIC (Akaike information criterion) parametresinde olduğu gibi ne kadar düşük olursa kurulan modelin o kadar gözlem verisine uyum sağladığını göstermektedir. Bu açıdan bakıldığında aslında bu iki parametrenin kurulan birden fazla modelin performansının değerlendirilmesinde kullanılması daha uygundur.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(13) = 31637.51, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.74
Pseudo-R² (McFadden) = 0.19
AIC = 3027.61, BIC = 3091.01 

Standard errors: MLE
-------------------------------------------------
                      Est.   S.E.   t val.      p
----------------- -------- ------ -------- ------
(Intercept)          36.46   5.10     7.14   0.00
crim                 -0.11   0.03    -3.29   0.00
zn                    0.05   0.01     3.38   0.00
indus                 0.02   0.06     0.33   0.74
chas1                 2.69   0.86     3.12   0.00
nox                 -17.77   3.82    -4.65   0.00
rm                    3.81   0.42     9.12   0.00
age                   0.00   0.01     0.05   0.96
dis                  -1.48   0.20    -7.40   0.00
rad                   0.31   0.07     4.61   0.00
tax                  -0.01   0.00    -3.28   0.00
ptratio              -0.95   0.13    -7.28   0.00
b                     0.01   0.00     3.47   0.00
lstat                -0.52   0.05   -10.35   0.00
-------------------------------------------------

Estimated dispersion parameter = 22.52 

Kurulan modelin özetinde eğer güven aralıklarını da verecek olursak aşağıdaki R kod bloğu ile bu mümkündür.

summ(model1, confint = TRUE, digits = 3)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde çoklu regresyon model çıktısına güven aralıkları ile birlikte aşağıda yer verilmiştir.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(13) = 31637.511, p = 0.000
Pseudo-R² (Cragg-Uhler) = 0.741
Pseudo-R² (McFadden) = 0.186
AIC = 3027.609, BIC = 3091.007 

Standard errors: MLE
-----------------------------------------------------------------
                       Est.      2.5%     97.5%    t val.       p
----------------- --------- --------- --------- --------- -------
(Intercept)          36.459    26.457    46.462     7.144   0.000
crim                 -0.108    -0.172    -0.044    -3.287   0.001
zn                    0.046     0.020     0.073     3.382   0.001
indus                 0.021    -0.100     0.141     0.334   0.738
chas1                 2.687     0.998     4.375     3.118   0.002
nox                 -17.767   -25.253   -10.280    -4.651   0.000
rm                    3.810     2.991     4.629     9.116   0.000
age                   0.001    -0.025     0.027     0.052   0.958
dis                  -1.476    -1.866    -1.085    -7.398   0.000
rad                   0.306     0.176     0.436     4.613   0.000
tax                  -0.012    -0.020    -0.005    -3.280   0.001
ptratio              -0.953    -1.209    -0.696    -7.283   0.000
b                     0.009     0.004     0.015     3.467   0.001
lstat                -0.525    -0.624    -0.425   -10.347   0.000
-----------------------------------------------------------------

Estimated dispersion parameter = 22.518 

Regresyon denkleminin yazılması

Değişkenlerin coefficient (katsayı) tahminlerinden yola çıkarak 1 nolu çoklu doğrusal regresyon modelimizin denklemini yazalım.

Medv (y)= intercept + crim*x1 + zn*x2 + indus*x3 + chas1*x4 + nox*x5 + rm*x6 + age*x7 + dis*x8 + rad*x9 + tax*x10 + ptratio*x11 + b*x12 + lstat*x13

Şimdi yukarıda hesaplanan katsayıları denklemde yerine yazalım. Ancak denkleme sadece istatistiksel olarak anlamlı çıkan değişkenleri dahil edelim.

Medv (y)= 36.459 – 0.108*X1 + 0.046*x2 + 2.687*x4 – 17.767*x5 + 3.810*x6 – 1.476*x8 + 0.306*x9 – 0.012*x10 – 0.953*x11 + 0.009*x12 – 0.525*x13

Elde edilen denkleme göre çoklu doğrusal regresyon modelini şöyle yorumlayabiliriz.

1. crim değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0,108 kat azaltmaktadır.

2. zn değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.046 kat artırmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır

3. chas katogorik değişkenindeki bir birimlik değişim 0 kategorisine göre bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 2.687 kat artırmaktadır.

5. nox değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -17.767 kat azaltmaktadır.

6. rm değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 3.810 kat artırmaktadır.

7. dis değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -1.476 kat azaltmaktadır.

8. rad değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.306 kat artırmaktadır.

9. tax değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.012 kat azaltmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır.

10. ptratio değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.953 kat azaltmaktadır.

11. b değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini 0.009 kat artırmaktadır. Etkisi bağımlı değişken üzerinde yok denecek kadar azdır.

12. lstat değişkenindeki bir birimlik değişim bağımlı değişken olan medv (medyan ev fiyatlarını) değişkenini -0.525 kat azaltmaktadır.

13. zn değişkenindeki bir birimlik değişim ise medv (medyan ev fiyatlarını) değişkenini 0.046 artırmaktadır.

Regresyon modelinin raporlanması

Regresyon modelini kurduk ve özetini aldık. Şimdi de kurduğum bu regresyon modelini aşağıda yazdığım R kod bloğu yardımıyla raporlayalım ve xlsx uzantılı bir dosyaya yazdıralım.

export_summs(model1, scale = FALSE, to.file = "xlsx", file.name = "model1.xlsx")#aynı zamanda xlsx uzantılı dosyaya yazdırmak için

export_summs(model1, scale = FALSE, to.file = "docx", file.name = "model1.docx")

Yukarıdaki R kod bloğu çalıştırılması ile hem model xlsx dosyasına yazdırılmış hem de R konsolunda sonuçlarına ulaştık. Model rapor çıktısı aşağıda verilmiştir. Raporda parantez içinde yer alanlar standart hata (S.E)’yı göstermektedir.

─────────────────────────────────────────────────
                                 Model 1         
                        ─────────────────────────
  (Intercept)                         36.46 ***  
                                      (5.10)     
  crim                                -0.11 **   
                                      (0.03)     
  zn                                   0.05 ***  
                                      (0.01)     
  indus                                0.02      
                                      (0.06)     
  chas1                                2.69 **   
                                      (0.86)     
  nox                                -17.77 ***  
                                      (3.82)     
  rm                                   3.81 ***  
                                      (0.42)     
  age                                  0.00      
                                      (0.01)     
  dis                                 -1.48 ***  
                                      (0.20)     
  rad                                  0.31 ***  
                                      (0.07)     
  tax                                 -0.01 **   
                                      (0.00)     
  ptratio                             -0.95 ***  
                                      (0.13)     
  b                                    0.01 ***  
                                      (0.00)     
  lstat                               -0.52 ***  
                                      (0.05)     
                        ─────────────────────────
  N                                  506         
  AIC                               3027.61      
  BIC                               3091.01      
  Pseudo R2                            0.74      
─────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.       

Şimdi de aynı kod bloğunun çalıştırılması ile raporun xlsx dosyasına yazdırılmış versiyonunu verelim. Aşağıdaki linkten raporun xlsx uzantılı versiyonunu indirebilirsiniz.

Kurulan modelin özeti alternatif olarak aşağıda yazılan R kod bloğunun çalıştırılması ile de elde edilebilir.

stargazer(model1, scale=F,  type="text", digits=2)#fonksiyon içerisine out="....txt" yazarsınız özeti txt uzantılı olarak kaydetmek de mümkündür.

Yukarıdaki R kod bloğunun çalıştırılması ile elde edilen model özeti aşağıda verilmiştir.

===============================================
                        Dependent variable:    
                    ---------------------------
                               medv            
-----------------------------------------------
crim                         -0.11***          
                              (0.03)           
                                               
zn                            0.05***          
                              (0.01)           
                                               
indus                          0.02            
                              (0.06)           
                                               
chas1                         2.69***          
                              (0.86)           
                                               
nox                          -17.77***         
                              (3.82)           
                                               
rm                            3.81***          
                              (0.42)           
                                               
age                            0.001           
                              (0.01)           
                                               
dis                          -1.48***          
                              (0.20)           
                                               
rad                           0.31***          
                              (0.07)           
                                               
tax                          -0.01***          
                              (0.004)          
                                               
ptratio                      -0.95***          
                              (0.13)           
                                               
b                             0.01***          
                              (0.003)          
                                               
lstat                        -0.52***          
                              (0.05)           
                                               
Constant                     36.46***          
                              (5.10)           
                                               
-----------------------------------------------
Observations                    506            
R2                             0.74            
Adjusted R2                    0.73            
Residual Std. Error       4.75 (df = 492)      
F Statistic          108.08*** (df = 13; 492)  
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

======
110.24
------

Değişkenlerin modeldeki nispi önem düzeyleri

Kurulan regresyon modelinde nispi önem ağrlıklarını (relative importances) hesaplamak için iki yöntem kullanılmış ve karşılaştırmalı olarak sunulmuştur. Kullanılan yöntemlerinden ilki lmg olup, regresörler arasındaki sıralamalara göre ortalama R ^ 2 katkısını ifade etmektedir. Diğer yöntem ise betasq olup, normalize edilmiş kare katsayını göstermektedir. Nispi önem ağırlıklarını hesaplamak için yazılan R kod bloğu aşağıda verilmiştir.

nispionem<-calc.relimp(model1, type = c("lmg","betasq"), rela = TRUE)
nispionem#lmg ve betasq yöntemleri kullanarak karşılaştırmalı olarak nispi önem ağırlıklarını vermek için

Yukarıdaki R kod bloğunun son satırı çalıştırılmasından sonra lmg ve betasq yöntemlerine göre bağımsız değişkenlerin nispi önem ağırlıkları aşağıda verilmiştir. Elde edilen bulgular en yüksek nispi önem ağırlığına sahip değişkenin lstat değişkeni olduğunu göstermektedir. Bu değişkeni sırasıyla rm ve ptratio değişkenleri izlemiştir.

Response variable: medv 
Total response variance: 84.58672 
Analysis based on 506 observations 

13 Regressors: 
crim zn indus chas nox rm age dis rad tax ptratio b lstat 
Proportion of variance explained by model: 74.06%
Metrics are normalized to sum to 100% (rela=TRUE). 

Relative importance metrics: 

               lmg       betasq
crim    0.03669197 1.597789e-02
zn      0.03349910 2.169676e-02
indus   0.05101231 3.682211e-04
chas    0.02139033 8.620330e-03
nox     0.04511571 7.845783e-02
rm      0.25259867 1.326430e-01
age     0.02975151 7.028187e-06
dis     0.04087946 1.787074e-01
rad     0.03190385 1.314540e-01
tax     0.04967225 7.999602e-02
ptratio 0.10602348 7.875477e-02
b       0.03093651 1.337755e-02
lstat   0.27052485 2.599392e-01

Average coefficients for different model sizes: 

                  1X          2Xs          3Xs           4Xs          5Xs
crim     -0.41519028  -0.27876734  -0.21102769  -0.172845863  -0.14899982
zn        0.14213999   0.09177589   0.06926785   0.058187805   0.05208479
indus    -0.64849005  -0.49907219  -0.39245035  -0.312711078  -0.25044986
chas      6.34615711   6.13625177   5.79137684   5.378363951   4.96039109
nox     -33.91605501 -23.64184669 -17.74630522 -14.537764121 -12.99734886
rm        9.10210898   8.07541798   7.46905711   7.011233964   6.61054979
age      -0.12316272  -0.07450317  -0.04834524  -0.033245015  -0.02390811
dis       1.09161302   0.10952005  -0.47255267  -0.833695790  -1.06499158
rad      -0.40309540  -0.20593927  -0.08194586   0.001678813   0.06198805
tax      -0.02556810  -0.02017034  -0.01665270  -0.014304609  -0.01271040
ptratio  -2.15717530  -1.74062066  -1.52445277  -1.389315454  -1.29154159
b         0.03359306   0.02243776   0.01743324   0.014808955   0.01324295
lstat    -0.95004935  -0.90871002  -0.86922333  -0.830576846  -0.79243771
                 6Xs          7Xs          8Xs           9Xs          10Xs
crim     -0.13318972  -0.12244878  -0.11518841  -0.110479262  -0.107740227
zn        0.04841098   0.04611642   0.04473486   0.044039341   0.043909618
indus    -0.19989046  -0.15740182  -0.12065007  -0.088070978  -0.058531713
chas      4.56663532   4.20812708   3.88683375   3.600046913   3.342756614
nox     -12.49075417 -12.61748098 -13.12577086 -13.860628817 -14.730291533
rm        6.23447431   5.87015426   5.51253464   5.160160375   4.813205720
age      -0.01774178  -0.01339689  -0.01012959  -0.007506479  -0.005261198
dis      -1.21554565  -1.31379414  -1.37739662  -1.417937166  -1.443287731
rad       0.10808364   0.14515543   0.17645934   0.204220581   0.230033618
tax      -0.01163317  -0.01094108  -0.01056128  -0.010452258  -0.010588444
ptratio  -1.21468054  -1.15187362  -1.09982518  -1.056675250  -1.021201281
b         0.01221866   0.01149901   0.01096173   0.010537971   0.010185605
lstat    -0.75484432  -0.71798862  -0.68210391  -0.647421018  -0.614154947
                 11Xs          12Xs          13Xs
crim     -0.106584888  -0.106741334 -1.080114e-01
zn        0.044279575   0.045117684  4.642046e-02
indus    -0.031119628  -0.005017834  2.055863e-02
chas      3.108982366   2.892438686  2.686734e+00
nox     -15.684182425 -16.698441350 -1.776661e+01
rm        4.472316347   4.137922082  3.809865e+00
age      -0.003220995  -0.001266585  6.922246e-04
dis      -1.458920162  -1.468724058 -1.475567e+00
rad       0.255062878   0.280176177  3.060495e-01
tax      -0.010953167  -0.011536415 -1.233459e-02
ptratio  -0.992503316  -0.969873098 -9.527472e-01
b         0.009876605   0.009590626  9.311683e-03
lstat    -0.582502652  -0.552645344 -5.247584e-01

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(model1)
# Summary of marginal effect
margineffect=summary(margineffect) %>% mutate_at(2:7, round, 3) %>% arrange(desc(AME))
formattable(margineffect)
 
#Marjinal etki düzeylerinin grafiği
mgrafik= margins(model1)
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.

Alternatif: Değişkenlerin önem düzeyleri

n<-varImp(model1)
n<-rownames(n)
n<-n %>% as_tibble()
varImp(model1) %>% as_tibble() %>% rename("Onem_Duzeyi"=Overall) %>% add_column("Değişken"=n$value,.before="Onem_Duzeyi") %>% mutate_if(is.numeric, round, 3) %>% arrange(desc(Onem_Duzeyi)) %>% formattable()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

tahmin<-predict(model1, veri)
 
karsilastirma<-tibble("Gözlem"=veri$medv, Tahmin=tahmin)
 
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename("Gözlemİlk_10"="Gözlem", Tahminİlk_10=Tahmin) %>% mutate_if(is.numeric, round, 1)
 
son10<-tail(karsilastirma, 10) %>% rename("GözlemSon_10"="Gözlem", TahminSon_10=Tahmin) %>% mutate_if(is.numeric, round, 1)
 
formattable(cbind(Sıra=seq(1,10),ilk10, son10))

#sonuçların xlsx dokümanına yazdırılması
write_xlsx(karsilastirma, "karsilatirmasonuc.xlsx.")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra çoklu regresyon modelinden elde edilen ilk ve son 10 tahmin değerleri gözlem değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Yukarıdaki R kod bloğundaki son kod satırının çalıştırılması ile kurulan modelden elde edilen elde edilen tahmin sonuçları ile veri setindeki gözlem değerleri karşılaştırmalı olarak xlsx dokümanında verilmiş olup, aşağıdaki linkten indirebilirsiniz.

Regresyon Hata parametreleri

Kurulan modele ait regresyon hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

tahmin<-predict(model1, veri)
regresyonmetrik<-tibble("Gözlem"=veri$medv, Tahmin=tahmin) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 1)
formattable(regresyonmetrik)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra kurulan modele ait hata parametre değerleri aşağıda verilmiştir.

2 Nolu Çoklu Regresyon Modelinin Kurulması

Daha önce belirtildiği üzere tax değişkenine ait korelasyon katsayısının 0,80’in üzerinde çıktığını bahsetmiştik. İki nolu modelde bu değişkeni çıkararak medyan konu fiyatları (medv) değişkenini tahmin edelim. Kurulan regresyon modeline ilişkin R kod bloğu aşağıda verilmiştir.

model2 <- glm(medv ~. , data = veri)

summ(model2)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon model özeti aşağıda verilmiştir.

MODEL INFO:
Observations: 506
Dependent Variable: medv
Type: Linear regression 

MODEL FIT:
χ²(12) = 31395.25, p = 0.00
Pseudo-R² (Cragg-Uhler) = 0.74
Pseudo-R² (McFadden) = 0.18
AIC = 3036.55, BIC = 3095.73 

Standard errors: MLE
-------------------------------------------------
                      Est.   S.E.   t val.      p
----------------- -------- ------ -------- ------
(Intercept)          34.63   5.12     6.76   0.00
crim                 -0.11   0.03    -3.22   0.00
zn                    0.04   0.01     2.69   0.01
indus                -0.07   0.06    -1.21   0.23
chas1                 3.03   0.86     3.51   0.00
nox                 -18.70   3.85    -4.86   0.00
rm                    3.91   0.42     9.29   0.00
age                  -0.00   0.01    -0.05   0.96
dis                  -1.49   0.20    -7.39   0.00
rad                   0.13   0.04     3.26   0.00
ptratio              -0.99   0.13    -7.48   0.00
b                     0.01   0.00     3.52   0.00
lstat                -0.52   0.05   -10.20   0.00
-------------------------------------------------

Estimated dispersion parameter = 22.96 

Model karşılaştırmaları

İlk olarak modelleri AIC ve BIC değerleri açısından karşılaştıralım. AIC ve BIC değerlerinin düşük olması tahmin edilen değerlerle gözlem verilerine uyum açısından istenen bir durum olduğu daha önce belirtilmişti. Elde edilen sonuçlar Model 1’in AIC ve BIC değerleri daha düşük olduğundan Model 2’ye göre daha iyi tahmin sonuçları ortaya koyduğu söylenebilir.

Şimdide R kod bloğu yazarak her iki modelin regresyon metriklerine birlikte bakalım.

tahmin<-predict(model1, veri)

regresyonmetrik<-tibble("Gözlem"=veri$medv, Tahmin=tahmin) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 2) %>% add_column(Model="Model 1", .before="SSE")


tahmin2<-predict(model2, veri[,-10])

regresyonmetrik2<-tibble("Gözlem"=veri$medv, Tahmin=tahmin2) %>% summarise(SSE=sse(Gözlem, Tahmin),MSE=mse(Gözlem, Tahmin),RMSE=rmse(Gözlem, Tahmin), MAE=mae(Gözlem, Tahmin), MAPE=mape(Gözlem, Tahmin)) %>% mutate_if(is.numeric, round, 2)%>% add_column(Model="Model 2", .before="SSE")


formattable(rbind(regresyonmetrik, regresyonmetrik2))

Yukarıdaki R kod bloğu çalıştırıldıktan sonra kurulan modellere ilişkin karşılatırmalı hata metrikleri aşağıdaki tabloda verilmiştir. Ortaya konulan bulgular AIC ve BIC parametrelerinde olduğu gibi 1 nolu model 2 nolu modele göre daha az hata üretmektedir. Dolayısıyla bu bulgulara bakarak 1 nolu modelin daha iyi olduğu ileri sürülebilir.

Anova testi ile her iki modeli karşılaştırma

Anova testi kullanılarak her iki model karşılaştırarak model performansları ortaya konulmuştur. Aşağıdaki R kod bloğu ile her iki model anova test edilerek modellerdeki iyileşmeler verilmiştir.

model1<-lm(medv ~. , data = veri)
model2<-lm(medv ~. , data = veri [,-10])
anova(model2, model1)

Yukarıdaki R kod bloğu çalıştırıldıktan sonra elde edilen model performansları aşağıda verilmiştir. Elde edilen bulgular istatistiksel olarak 1. modelin 2. modele göre daha iyi olduğunu göstermektedir. Anova testinde F rasyosu bize bu iyileşmeyi göstermektedir. Aşağıdaki raporda 1. modelde elde edilen toplam hata (RSS) 11079, 2. modelde elde edilen hata (RSS) ise 11321’dir. Görüleceği üzere 2. modelde hata da yüksektir. Sum of Sq ifadesi 11079-11321=-242.26 göstermektedir.

AAnalysis of Variance Table

Model 1: medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + 
    tax + ptratio + b + lstat
Model 2: medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + 
    ptratio + b + lstat
  Res.Df   RSS Df Sum of Sq      F   Pr(>F)   
1    492 11079                                
2    493 11321 -1   -242.26 10.758 0.001112 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Her iki modelin birlikte raporlanması

Her iki model yazılan aşağıdaki R kod bloğu birlikte karşılaştırma sağlanabilmesi adına raporlanabilir. Kurulan her iki modelde bağımsız değişkenler bağımlı değişken olan medyan ev fiyatlarındaki varyansın % 74’ünü açıklamaktadır.

export_summs(model1,model2 scale = FALSE, results = 'asis')

Yukarıdaki R kod bloğu çalıştırılarak kurulan modellere ilişkin elde edilen karşılaştırmalı rapor aşağıda verilmiştir.

────────────────────────────────────────────────────
                      Model 1          Model 2      
                 ───────────────────────────────────
  (Intercept)           36.46 ***        34.63 ***  
                        (5.10)           (5.12)     
  crim                  -0.11 **         -0.11 **   
                        (0.03)           (0.03)     
  zn                     0.05 ***         0.04 **   
                        (0.01)           (0.01)     
  indus                  0.02            -0.07      
                        (0.06)           (0.06)     
  chas1                  2.69 **          3.03 ***  
                        (0.86)           (0.86)     
  nox                  -17.77 ***       -18.70 ***  
                        (3.82)           (3.85)     
  rm                     3.81 ***         3.91 ***  
                        (0.42)           (0.42)     
  age                    0.00            -0.00      
                        (0.01)           (0.01)     
  dis                   -1.48 ***        -1.49 ***  
                        (0.20)           (0.20)     
  rad                    0.31 ***         0.13 **   
                        (0.07)           (0.04)     
  tax                   -0.01 **                    
                        (0.00)                      
  ptratio               -0.95 ***        -0.99 ***  
                        (0.13)           (0.13)     
  b                      0.01 ***         0.01 ***  
                        (0.00)           (0.00)     
  lstat                 -0.52 ***        -0.52 ***  
                        (0.05)           (0.05)     
                 ───────────────────────────────────
  N                    506              506         
  AIC                 3027.61          3036.55      
  BIC                 3091.01          3095.73      
  Pseudo R2              0.74             0.74      
────────────────────────────────────────────────────
  *** p < 0.001; ** p < 0.01; * p < 0.05.           

Column names: names, Model 1, Model 2

Diagnostik Testler

Bu kısımda kurulan 1 nolu modelin regresyon varsayımları gözden geçirilecektir.

Artıkların normal dağılım gösterdiği varsayımı

library(broom)
diagnostiktest <- augment(model1)
plot(model1, 2)

#alternatif
ggqqplot(diagnostiktest$.resid, ylab = "Std. deviance residuals", color="red")

#alternatif
ggqqplot(model1$residuals, ylab = "Std. deviance residuals", color="blue")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen artıkların grafiği aşağıda verilmiştir. Grafikte normal dağılımı bozan değerler olduğu görülmektedir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen artıkların alternatif grafiği aşağıda verilmiştir.

Çoklu doğrusallık varsayımı

Bu kısımda aşağıda yazdığım R kod bloğu ile varyans enflasyon faktörü (VIF) ve tolerans seviyeleri hesaplanmıştır.

varyanseflasyonfaktoru<-VIF(model1)
vif<-tibble(Değişken=names(VIF(model1)), VIF=varyanseflasyonfaktoru) %>% arrange(desc(VIF)) %>% add_column(sıra=1:13, .before="Değişken") %>% mutate(Tolerans=1/VIF) %>% mutate_if(is.numeric, round,2)

formattable(vif, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`VIF` = color_bar("#00CED1"),
`Tolerans` = color_bar("#00FF7F")
))

Yukarıdaki R kod bloğunun çalıştırılması ile hesaplanan varyans enflasyon faktörü (VIF) ve tolerans seviyeleri aşağıdaki tabloda verilmiştir. Daha önce VIF değerinin 10’dan büyük olmaması ve tolerans seviyesinin ise 0,1’in altına düşmemesi gerektiğini söylemiştir. Elde edilen bulgular VIF ve tolerans değerlerinin kabul edilebilir sınırlar içerisinde kaldığını göstermektedir.

Etkin değerlerin bulunması

Burada etkin değerlerden kasıt Cook’un mesafesi kullanılarak uç (extreme) değerlerin bulunmasıdır. Aşağıda yazılan R kod bloğu ile normal dağılıma uymayan 10 değer Cook’un mesafesi kullanılarak grafiğe yansıtılmıştır.

plot(model1, 4, id.n = 10)
#değerleri de verecek olursak satırlarla birlikte
top10<-diagnostiktest[, -c(15:19,21)] %>%
  top_n(10, wt = .cooksd) %>% mutate_if(is.numeric, round,3)
as.matrix(top10)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Cook’un mesafesini gösteren grafik en yüksek 10 değeri ile birlikte aşağıda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Cook’un mesafesini gösteren tablo matris formatında en yüksek 10 gözlem değeri ile birlikte aşağıda verilmiştir.

  medv   crim     zn  indus   chas nox     rm      age     dis     rad 
 [1,] "23.7" " 0.290" "0" "10.59" "0"  "0.489" "5.412" "  9.8" "3.587" " 4"
 [2,] "21.9" " 3.474" "0" "18.10" "1"  "0.718" "8.780" " 82.9" "1.905" "24"
 [3,] "27.5" " 4.556" "0" "18.10" "0"  "0.718" "3.561" " 87.9" "1.613" "24"
 [4,] "23.1" "13.522" "0" "18.10" "0"  "0.631" "3.863" "100.0" "1.511" "24"
 [5,] "50.0" " 4.898" "0" "18.10" "0"  "0.631" "4.970" "100.0" "1.332" "24"
 [6,] "50.0" " 5.670" "0" "18.10" "1"  "0.631" "6.683" " 96.8" "1.357" "24"
 [7,] "50.0" " 6.539" "0" "18.10" "1"  "0.631" "7.016" " 97.5" "1.202" "24"
 [8,] "50.0" " 9.232" "0" "18.10" "0"  "0.631" "6.216" "100.0" "1.169" "24"
 [9,] "50.0" " 8.267" "0" "18.10" "1"  "0.668" "5.875" " 89.6" "1.130" "24"
[10,] "17.9" "18.811" "0" "18.10" "0"  "0.597" "4.628" "100.0" "1.554" "24"
      tax   ptratio b        lstat   .cooksd
 [1,] "277" "18.6"  "348.93" "29.55" "0.043"
 [2,] "666" "20.2"  "354.55" " 5.29" "0.069"
 [3,] "666" "20.2"  "354.70" " 7.12" "0.067"
 [4,] "666" "20.2"  "131.42" "13.33" "0.045"
 [5,] "666" "20.2"  "375.52" " 3.26" "0.166"
 [6,] "666" "20.2"  "375.33" " 3.73" "0.055"
 [7,] "666" "20.2"  "392.05" " 2.96" "0.044"
 [8,] "666" "20.2"  "366.15" " 9.53" "0.043"
 [9,] "666" "20.2"  "347.88" " 8.88" "0.094"
[10,] "666" "20.2"  " 28.79" "34.37" "0.050"

Alternatif olarak aşağıdaki R kod bloğunda car paketini kullanarak da uç değerleri (outliers) belirleyebiliriz. Burada Bonferroni düzeltilmiş outlier test’ini kullanıyoruz.

library(car)
outlierTest(model1,10)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen uç değerler aşağıda verilmiştir. Bu uç değerler modelden çıkarılırsa daha iyi sonuçlar elde edilmesi mümkündür. Aşağıda solda yer alan numaralar veri setindeki satır numaralarını göstermektedir.

     rstudent unadjusted p-value Bonferroni p
369  5.907411         6.4998e-09   3.2889e-06
372  5.491079         6.4185e-08   3.2478e-05
373  5.322247         1.5617e-07   7.9020e-05
370  3.807609         1.5808e-04   7.9987e-02
413  3.546859         4.2724e-04   2.1618e-01
365 -3.457995         5.9153e-04   2.9932e-01
371  3.367841         8.1712e-04   4.1346e-01
187  3.032720         2.5518e-03           NA
366  2.956763         3.2586e-03           NA
162  2.859666         4.4214e-03           NA

Modelden uç değerlerler çıkarılarak tekrar kurulmuştur. Aşağıda yazılan kod bloğu ile düzeltilmiş R karenin yükseldiği görülmektedir. Bu da bize bağımsız değişkenlerin bağımlı değişkendeki varyansı açıklama oranının yükseldiği göstermektedir.

n<-outlierTest(model1,10)
#küçükten büyüğe doğru satır numaralarını sıralayacak olursak
satir<-sort(names(n$rstudent))#satırlar küçükten büyüğe doğru
#sonuçlar:[1] 162 187 365 366 369 370 371 372 373 413
mmodelucyok<-lm(medv ~. , data = veri[-satir, ])
summary(mmodelucyok)

Yukarıdaki R kod bloğunun çalıştırılması ile uç değerlerin çıkarılmasından sonra elde edilen yeni model özeti aşağıda verilmiştir. Elde edilen bulgular uç değerler çıkartıldığında modelin bağımlı değişkendeki varyansları açıklama gücünün % 73’ten % 81’e çıktığını göstermektedir.

Call:
lm(formula = medv ~ ., data = veri[-satir, ])

Residuals:
     Min       1Q   Median       3Q      Max 
-10.2400  -2.2328  -0.5165   1.7342  18.8761 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  20.430819   4.299288   4.752 2.66e-06 ***
crim         -0.093021   0.026329  -3.533 0.000450 ***
zn            0.033153   0.011037   3.004 0.002806 ** 
indus         0.014326   0.049452   0.290 0.772175    
chas1         1.532408   0.728125   2.105 0.035844 *  
nox         -11.953077   3.091782  -3.866 0.000126 ***
rm            5.467502   0.366377  14.923  < 2e-16 ***
age          -0.026620   0.010737  -2.479 0.013506 *  
dis          -1.175980   0.160622  -7.321 1.04e-12 ***
rad           0.203448   0.053560   3.799 0.000164 ***
tax          -0.012625   0.003014  -4.189 3.33e-05 ***
ptratio      -0.895774   0.105524  -8.489 2.60e-16 ***
b             0.010020   0.002170   4.617 5.01e-06 ***
lstat        -0.303462   0.044016  -6.894 1.70e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.793 on 482 degrees of freedom
Multiple R-squared:  0.8142,	Adjusted R-squared:  0.8092 
F-statistic: 162.5 on 13 and 482 DF,  p-value: < 2.2e-16

Her iki modeli, model 1 ile uç değerlerinin çıkarılarak kurgulandığı yeni modeli karşılaştırmalı olarak aşağıda yazılan R kod bloğu ile de vererek resmi daha yakından görmüş oluruz.

stargazer(model1,mmodelucyok, scale=F,  type="text", digits=2)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra bahsedilen her iki karşılaştırmalı olarak aşağıda verilmiştir.

=====================================================================
                                   Dependent variable:               
                    -------------------------------------------------
                                          medv                       
                              (1)                      (2)           
---------------------------------------------------------------------
crim                        -0.11***                 -0.09***        
                             (0.03)                   (0.03)         
                                                                     
zn                          0.05***                  0.03***         
                             (0.01)                   (0.01)         
                                                                     
indus                         0.02                     0.01          
                             (0.06)                   (0.05)         
                                                                     
chas1                       2.69***                   1.53**         
                             (0.86)                   (0.73)         
                                                                     
nox                        -17.77***                -11.95***        
                             (3.82)                   (3.09)         
                                                                     
rm                          3.81***                  5.47***         
                             (0.42)                   (0.37)         
                                                                     
age                          0.001                   -0.03**         
                             (0.01)                   (0.01)         
                                                                     
dis                         -1.48***                 -1.18***        
                             (0.20)                   (0.16)         
                                                                     
rad                         0.31***                  0.20***         
                             (0.07)                   (0.05)         
                                                                     
tax                         -0.01***                 -0.01***        
                            (0.004)                  (0.003)         
                                                                     
ptratio                     -0.95***                 -0.90***        
                             (0.13)                   (0.11)         
                                                                     
b                           0.01***                  0.01***         
                            (0.003)                  (0.002)         
                                                                     
lstat                       -0.52***                 -0.30***        
                             (0.05)                   (0.04)         
                                                                     
Constant                    36.46***                 20.43***        
                             (5.10)                   (4.30)         
                                                                     
---------------------------------------------------------------------
Observations                  506                      496           
R2                            0.74                     0.81          
Adjusted R2                   0.73                     0.81          
Residual Std. Error     4.75 (df = 492)          3.79 (df = 482)     
F Statistic         108.08*** (df = 13; 492) 162.46*** (df = 13; 482)
=====================================================================
Note:                                     *p<0.1; **p<0.05; ***p<0.01

======
110.24
------

Hataların bağımsızlığı testi

Kurulan regresyon modelinde hataların bağımsızlığını testi için literatürde genellikle Durbin Watson istatistiğinin kullanıldığı görülmektedir. Regresyon modellerinde hatalar bağımsız olması gerekli olup, Durbin Watson değerinin 1 ile 3 arasında olması istenmektedir. Aşağıda yazılan R kod bloğu ile 1 nolu modelin Durbin Watson istatistiği verilmiştir.

lmtest::dwtest(model1)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen Durbin Watson istatistiği aşağıdaki verilmiştir. Elde edilen bulgular Durbin-Watson test istatistiği değerinin referans değerler aralığında kaldığını ve bu sonucun istatistiksel olarak anlamlı olduğunu göstermektedir.

	Durbin-Watson test

data:  model1
DW = 1.0784, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0

Yapılan bu çalışma ile özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunulacağı düşünülmektedir.

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

R’da Multinominal Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Multinominal Logistic Regression in R

Lojistik regresyon analizi yöntemlerinden biri olan multinominal lojistik regresyon analiz yöntemi, bağımlı değişkenin ya da cevap değişkeninin 2’den fazla 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 multinominal olmasından kasıt kategorik değişkenin ikiden fazla cevap seçeneği olduğu anlaşılmalıdır. Multinominal kategorik değişken tipi ile binary (iki: binomial ya da dikotomik) değişken tipi karıştırılmamalı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.

  1. 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.
  2. 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.

  1. 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.
  2. 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 multinominal 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.

1972 yılından bu yana Genel Sosyal Araştırma (GSS) kapsamında, Amerikan toplumunun tutumları, davranışları ve bunlardaki eğilimleri ve değişimleri belirli aralıklarla izlenerek yüz yüze (face to face) yapılan görüşmelerle veri toplanmaktadır. Araştırmada kullanılan veri seti de Genel Sosyal Araştırma (GSS) kapsamında üretilen 2018 yılı verilerini içermektedir.

Veri seti stata uzantılı olarak aşağıda verilen resmi web sitesinden indirilmiştir. Analizde kullanılan veri setini dta (stata) uzantılı olarak aşağıdaki linkten indirebilirsiniz.

http://gss.norc.org/Documents/stata/2018_stata.zip

Veri setinde belirlenen değişkenlerle Amerikan toplumunun siyasi eğilimleri özgün bu çalışmaya tahmin edilmeye çalışılmıştır. Veri setindeki gözlem sayısı 2348, değişken sayısı ise 9’dur. Veri setinde değişkenler şöyledir:

  1. age: Cevaplayıcının yaşını göstermekte olup, değişken tipi nicel ve kesiklidir.
  2. sex: Cevaplayıcının cinsiyetini göstermekte olup, değişken tipi nitel ve dikotomik kategoriktir.
  3. wrkstat: Cevaplayıcının çalışma durumunu göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 10’a kadar kodlanmıştır.
  4. region: Cevaplayıcının bulunduğu bölgeyi göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 9’a kadar kodlanmıştır.
  5. marital: Cevaplayıcının bulunduğu medeni durumunu göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 5’e kadar kodlanmıştır.
  6. childs: Cevaplayıcının sahip olduğu çocuk sayısını göstermekte olup, değişken tipi nicel ve kesiklidir.
  7. degree: Cevaplayıcının eğitim düzeyini göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 5’e kadar kodlanmıştır.
  8. relig: Cevaplayıcının dini görüşünü göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 13’e kadar kodlanmıştır.
  9. polviews: Cevaplayıcının siyasi görüşünü göstermekte olup, değişken tipi nitel ve kategoriktir. Cevap kategorileri 1’den 7’ye kadar 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","writexl","car", "nnet", "caret", "forcats"), 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.

#stata (dta) uzantılı veri setinin okunması
df <-  read.dta13("GSS2018.dta") %>%  select(age, sex,wrkstat,region,marital,childs, degree, relig, polviews)
formattable(head(df,10))

#veri setinin "xlsx" uzantılı dosyaya yazdırılması
write_xlsx(df, "analizsurveydata2018.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.

Keşifsel Veri Analizi

Veri setinin yapısı

Aşağıdaki kod bloğu ile veri setinin yapısı gözden geçirilmiştir.

glimpse(veri)
#alternatif
str (veri)

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 2348 gözlem ve 9 değişkenden oluşmaktadır. Modelde bağımlı değişken olarak yer alan değişken “polviews” olup, kalan değişkenler bağımsız (predictor) değişkenlerdir.

Observations: 2,348
Variables: 9
$ age      <int> 43, 74, 42, 63, 71, 67, 59, 43, 62, 55, 59, 34, 61, 44,...
$ sex      <fct> male, female, male, female, male, female, female, male,...
$ wrkstat  <fct> "temp not working", "retired", "working fulltime", "wor...
$ region   <fct> new england, new england, new england, new england, new...
$ marital  <fct> never married, separated, married, married, divorced, w...
$ childs   <int> 0, 3, 2, 2, 0, 2, 6, 0, 4, 2, 2, 3, 2, 2, 2, 4, 0, 2, 2...
$ degree   <fct> junior college, high school, bachelor, bachelor, gradua...
$ relig    <fct> christian, catholic, none, protestant, catholic, cathol...
$ polviews <fct> conservative, NA, slghtly conservative, moderate, extrm...

Veri setinden eksik gözlemlerin (NAs) çıkarılması

tamveri<-df %>% drop_na()

Değişken bazlı görselleştirme

#veri setindeki ilk 3 değişkenin görselleştirilmesi
tamveri[,1:3] %>% explore_all()
#veri setindeki 4,5 ve 6. değişkenlerin görselleştirilmesi
tamveri[,4:6] %>% explore_all()
#veri setindeki 7 ve 8. değişkenlerin görselleştirilmesi
tamveri[,c(7,8)] %>% explore_all()
#veri setindeki 9. değişkenlerin görselleştirilmesi
tamveri %>% explore(polviews)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen değişken bazlı grafikler aşağıda verilmiştir. İlk olarak veri setindeki ilk 3 değişken görselleştirilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setindeki 4, 5 ve 6. değişken görselleştirilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setindeki 7 ve 8. değişkenler görselleştirilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen veri setindeki 9. değişken görselleştirilmiştir.

Bağımlı değişkene göre gruplandırılmış görselleştirme

#cinsiyete göre siyasi görüşler
agg <- count(tamveri, sex, polviews)
  ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
  facet_wrap(sex~.)+
  theme(axis.text.x = element_text(angle = 90))

#alternatif grafik: üst üste bağımlı değişken seviyelerinin eklenmesi
ggplot(agg) +
geom_col(aes(x = sex, y = n, fill = polviews), position = "fill")
#yaş gruplarına göre siyasi tercihleri
yas<-tamveri %>% mutate(agegroup=cut(tamveri$age,breaks=5,dig.lab=2, labels=c("19-32","33-46","47-61","62-75","76-89")))
agg <- count(yas, agegroup, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(agegroup~.)+
  theme(axis.text.x = element_text(angle = 90))
#çalışma durumuna göre siyasi tercihleri
agg <- count(tamveri, wrkstat, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(~wrkstat)+
  theme(axis.text.x = element_text(angle = 90))
#Bölgeye göre siyasi tercihleri
agg <- count(tamveri, region, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(region~.)+
  theme(axis.text.x = element_text(angle = 90))
#Medeni duruma göre siyasi tercihleri
agg <- count(tamveri, marital, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(marital~.)+
  theme(axis.text.x = element_text(angle = 90))
#Çocuk sayısına göre siyasi tercihleri
agg <- count(tamveri, childs, polviews)
ggplot(agg)+
  geom_col(aes(x = n, y = polviews, fill = polviews))+
facet_wrap(childs~.)+
  theme(axis.text.x = element_text(angle = 90))
#Eğitim düzeyine göre siyasi tercihleri
agg <- count(tamveri, degree, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(degree~.)+
  theme(axis.text.x = element_text(angle = 90))
#Dini görüşüne düzeyine göre siyasi tercihleri
agg <- count(tamveri, relig, polviews)
ggplot(agg)+
  geom_col(aes(x = polviews, y = n, fill = polviews))+
facet_wrap(relig~.)+
  theme(axis.text.x = element_text(angle = 90))

Bağımlı değişkene göre gruplandırılmış görselleştirme: Waffle grafik örneği

count(tamveri, polviews)
waffle(c("extremely liberal"=round(121/10,0), liberal=round(275/10,0), "slightly liberal"=round(254/10,0), moderate=round(844/10,0), "slghtly conservative"=round(283/10,0),conservative=round(351/10,0),"extrmly conservative"=round(97/10,0)), rows = 10, title = "Siyasi Görüşlerin Dağılımı")  
#kadın ve erkeklerin siyasi görüşlerinin dağılımı
say<-count(tamveri, sex, polviews)
filter(say, sex=="female")#erkek için filter(say, sex=="male")
iron(waffle(c("extremely liberal"=round(65/10,0), liberal=round(161/10,0), "slightly liberal"=round(130/10,0), moderate=round(483/10,0), "slghtly conservative"=round(152/10,0),conservative=round(182/10,0),"extrmly conservative"=round(51/10,0)), rows = 6,glyph_size = 6,
title = "Siyasi Görüşlerin Dağılımı: Kadın"),  
waffle(c("extremely liberal"=round(56/10,0), liberal=round(114/10,0), "slightly liberal"=round(124/10,0), moderate=round(361/10,0), "slghtly conservative"=round(131/10,0),conservative=round(169/10,0),"extrmly conservative"=round(46/10,0)), rows = 6,glyph_size = 6,
title = "Siyasi Görüşlerin Dağılımı:Erkek")) 

Kategorik değişkenlerin sıklıkları (n) ve yüzdeleri (%)

tamveri %>% describe_num(age)
tamveri %>% describe(sex)
tamveri %>% describe(wrkstat)
tamveri %>% describe(region)
tamveri %>% describe(marital)
tamveri %>% describe(childs)
tamveri %>% describe(degree)
tamveri %>% describe(relig)
tamveri %>% describe(polviews)

Yaş (age) değişkenine göre tanımlayıcı istatistikler

variable = age
type     = integer
na       = 0 of 2 225 (0%)
unique   = 72
min|max  = 18 | 89
q05|q95  = 22 | 79
q25|q75  = 34 | 63
median   = 48
mean     = 48.97124

Cinsiyet (sex) değişkenine göre tanımlayıcı istatistikler

variable = sex
type     = factor
na       = 0 of 2 225 (0%)
unique   = 2
 male    = 1 001 (45%)
 female  = 1 224 (55%)

Çalışma durumu (wrkstat) değişkenine göre tanımlayıcı istatistikler

variable = wrkstat
type     = factor
na       = 0 of 2 225 (0%)
unique   = 8
 working fulltime = 1 080 (48.5%)
 working parttime = 250 (11.2%)
 temp not working = 50 (2.2%)
 unempl, laid off = 72 (3.2%)
 retired          = 428 (19.2%)
 school           = 76 (3.4%)
 keeping house    = 225 (10.1%)
 other            = 44 (2%)

Bölge (region) değişkenine göre tanımlayıcı istatistikler

variable = region
type     = factor
na       = 0 of 2 225 (0%)
unique   = 9
 new england     = 113 (5.1%)
 middle atlantic = 216 (9.7%)
 e. nor. central = 377 (16.9%)
 w. nor. central = 118 (5.3%)
 south atlantic  = 485 (21.8%)
 e. sou. central = 150 (6.7%)
 w. sou. central = 264 (11.9%)
 mountain        = 175 (7.9%)
 pacific         = 327 (14.7%)

Medeni durum (marital) değişkenine göre tanımlayıcı istatistikler

variable = marital
type     = factor
na       = 0 of 2 225 (0%)
unique   = 5
 married       = 953 (42.8%)
 widowed       = 188 (8.4%)
 divorced      = 382 (17.2%)
 separated     = 69 (3.1%)
 never married = 633 (28.4%)

Çocuk sayısı (childs) değişkenine göre tanımlayıcı istatistikler

variable = childs
type     = integer
na       = 0 of 2 225 (0%)
unique   = 9
       0 = 632 (28.4%)
       1 = 329 (14.8%)
       2 = 595 (26.7%)
       3 = 363 (16.3%)
       4 = 160 (7.2%)
       5 = 69 (3.1%)
       6 = 42 (1.9%)
       7 = 21 (0.9%)
       8 = 14 (0.6%)

Eğitim düzeyi (degree) değişkenine göre tanımlayıcı istatistikler

variable = degree
type     = factor
na       = 0 of 2 225 (0%)
unique   = 5
 lt high school = 230 (10.3%)
 high school    = 1 115 (50.1%)
 junior college = 188 (8.4%)
 bachelor       = 450 (20.2%)
 graduate       = 242 (10.9%)

Dini görüş (relig) değişkenine göre tanımlayıcı istatistikler

variable = relig
type     = factor
na       = 0 of 2 225 (0%)
unique   = 13
 protestant           = 1 099 (49.4%)
 catholic             = 465 (20.9%)
 jewish               = 38 (1.7%)
 none                 = 512 (23%)
 other                = 31 (1.4%)
 buddhism             = 19 (0.9%)
 hinduism             = 8 (0.4%)
 other eastern        = 1 (0%)
 moslem/islam         = 15 (0.7%)
 orthodox-christian   = 6 (0.3%)

Siyasi görüş (polviews) değişkenine göre tanımlayıcı istatistikler

variable = polviews
type     = factor
na       = 0 of 2 225 (0%)
unique   = 7
 extremely liberal    = 121 (5.4%)
 liberal              = 275 (12.4%)
 slightly liberal     = 254 (11.4%)
 moderate             = 844 (37.9%)
 slghtly conservative = 283 (12.7%)
 conservative         = 351 (15.8%)
 extrmly conservative = 97 (4.4%)

Bağımsız değişkenlerin bağımlı değişkene göre sıklıkları (n) ve yüzdeleri

Bu kısımda bağımsız değişkenlerin bağımlı değişken olan siyasi görüş (polviews) değişkenine göre sıklıkları (n) ve yüzdeleri verilmiştir. Aşağıdaki R kod bloğunda her çift değişkene ilişkin bu istatistikler sırasıyla verilmiş, kod bloğundan sonra ise değişken çiftlerine ilişkin ilk 10 gözlem tablolara yansıtılmıştır.

yas<-tamveri %>% mutate(agegroup=cut(tamveri$age,breaks=5,dig.lab=2, labels=c("19-32","33-46","47-61","62-75","76-89")))
yt<-yas %>% group_by(agegroup,polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))#%>% slice(yüzde, n = 10)
formattable(head(yt,10))

#cinsiyet (sex)
cinsiyet<-tamveri %>% group_by(sex, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde)) #%>% slice(yüzde, n = 10)
formattable(head(cinsiyet,10))

#çalışma durumu (wrkstat)
cd<-tamveri %>% group_by(wrkstat, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde)) #%>% slice(yüzde, n = 10)
formattable(head(cd,10))

#bölge (region)
rg<-tamveri %>% group_by(region, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))#%>% slice(yüzde, n = 10)
formattable(head(rg,10))

#medeni durum (marital)

md<-tamveri %>% group_by(marital, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))
formattable(head(md,10))

#çocuk sayısı (childs)

cs<-tamveri %>% group_by(childs, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))
formattable(head(cs,10))

#eğitim düzeyi (degree)

ed<-tamveri %>% group_by(degree, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))
formattable(head(ed,10))

#dini görüş (relig)

dg<-tamveri %>% group_by(relig, polviews) %>% summarise(n=n())%>% mutate("yüzde"=round(n/sum(n)*100,1))%>% arrange(desc(yüzde))
formattable(head(dg,10))

Yaş (kategorize edilmiş) değişkenine göre siyasi görüşler

Cinsiyet (sex) değişkenine göre siyasi görüşler

Çalışma durumu (wrkstat) değişkenine göre siyasi görüşler

Bölge (region) değişkenine göre siyasi görüşler

Medeni durum (marital) değişkenine göre siyasi görüşler

Çocuk sayısı (childs) değişkenine göre siyasi görüşler

Eğitim düzeyi (degree) değişkenine göre siyasi görüşler

Dini görüş (relig) değişkenine göre siyasi görüşler

Değişkenler arasındaki korelasyonun hesaplanması

Kategorik değişkenlerin korelasyon katsayılarını hesaplamak için yazılan R kod bloğu aşağıdadır. Değişkenler arasındaki korelasyonu hesaplamak için Kikare ve Anova testleri kullanılmıştır. Korelasyon katsayısı hesaplanacak her iki değişkenin de nitel ve nominal olmasından dolayı Kikare, korelasyon katsayısı hesaplanacak değişkenlerden biri nicel kesikli ve diğeri nominal olduğundan Anova testleri yapılmıştır. Korelasyon katsayısı hesaplanacak değişkenlerden biri ordinal (sıralı) olsaydı bu durumda Spearman korelasyon (SpearmanRho) katsayısının hesaplanması gerekecekti. Diğer taraftan, eğer her iki değişken nicel (sürekli ve kesikli) olsaydı bu durumda Pearson korelasyon katsayısını hesaplayacaktık.

df1<-tamveri %>% droplevels()

#Kikare Testleri
p<-data.frame(lapply(df1[,-1], function(x) chisq.test(table(x,df1$polviews), simulate.p.value = TRUE)$p.value))

pvalue<-p %>% as_tibble() %>% pivot_longer(cols = sex:polviews, names_to="Degisken", values_to = "p") %>% mutate(Sonuc=ifelse(p<0.05,"Anlamlı", "Anlamlı Değil")) %>% mutate_if(is.numeric, round, 4)

chi<-data.frame(lapply(df1[,-1], function(x) chisq.test(table(x,df1$polviews), simulate.p.value = TRUE)$statistic))
chivalue<-chi %>% as_tibble() %>% pivot_longer(cols = sex:polviews, names_to="Degisken", values_to = "Kikare Test İstatistiği")%>% mutate_if(is.numeric, round, 2)

formattable(cbind(chivalue, pvalue[,-1]))

#Anova testi
#Veri tipi nicel kesikli olan bir değişken ile nominal veri tipine sahip değişken arasındaki ilişki ortaya konulduğundan Anova testi kullanılmıştır.
anova<-summary(aov(df1$age~df1$polviews))
anova

Yukarıdaki R kod bloğunun çalıştırılmasından sonra nominal veri tipine sahip değişkenlerin Kikare test istatistikleri aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun son satırında veri tipi nicel kesikli olan bir değişken ile nominal veri tipine sahip değişken arasındaki ilişki Anova testi ile ortaya konulmuş olup, sonuçlar aşağıda verilmiştir. Elde edilen bulgular age (yaş) değişkeni ile siyasi görüş arasında istatistiksel olarak anlamlı bir fark olduğunu göstermektedir.

               Df Sum Sq Mean Sq F value   Pr(>F)    
df1$polviews    6  18004  3000.6   9.505 2.46e-10 ***
Residuals    2218 700197   315.7                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Nicel kesikli değişkenin normal dağılıma uyup uymadığının kontrol edilmesi

#Q-Q plot ile yaş değişkeninin normal dağılıma uyumu incelenmiştir.
ggqqplot(df1$age, ylab = "age", color="red")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra kesikli yaş (age) değişkeninin normal dağılıma uyup uymadığını ortaya koymak için çizilen Q-Q grafiği aşağıda verilmiştir.

Multinominal lojistik regresyon (MLR) modelinin oluşturulması

#olağandışı seviyelerin dışarıda bırakılması
tamveri<-tamveri %>% droplevels()

#Referan Kategorisi Oluşturma
tamveri$polviews2= relevel(tamveri$polviews, ref = "moderate")
tamveri

#Multinominal lojistik regresyon modelinin kurulması
mnmodel<-multinom(polviews2 ~ ., data=tamveri[,-9])
summary(mnmodel)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde multinominal lojistik regresyon model çıktısına aşağıda yer verilmiştir. Çıktıda yer verilen AIC (Akaike information criterion) parametresi kurulan tek bir modelin değerlendirilmesinde çok fazla anlam ifade etmemekle birlikte BIC (Akaike information criterion) parametresinde olduğu gibi ne kadar düşük olursa kurulan modelin o kadar gözlem verisine uyum sağladığını göstermektedir. Bu açıdan bakıldığında aslında bu iki parametrenin kurulan birden fazla modelin performansının değerlendirilmesinde kullanılması daha uygundur.

# weights:  280 (234 variable)
initial  value 4329.650082 
iter  10 value 3831.869309
iter  20 value 3664.489568
iter  30 value 3583.538601
iter  40 value 3574.274551
iter  50 value 3572.174882
iter  60 value 3570.652143
iter  70 value 3570.015918
iter  80 value 3569.720026
iter  90 value 3569.629772
iter 100 value 3569.593444
final  value 3569.593444 
stopped after 100 iterations
Call:
multinom(formula = polviews2 ~ ., data = tamveri[, -9])

Coefficients:
                     (Intercept)          age  sexfemale
extremely liberal      -1.781055  0.005910691 -0.1333435
liberal                -1.221537  0.002270619  0.1618255
slightly liberal       -2.201346 -0.001389145 -0.1942267
slghtly conservative   -1.156245  0.007939849 -0.1221374
conservative           -1.907110  0.020809416 -0.2710894
extrmly conservative   -2.795112  0.024111685 -0.1799307
                     wrkstatworking parttime wrkstattemp not working
extremely liberal                  0.4588744               0.7519384
liberal                            0.3868059              -1.5356292
slightly liberal                  -0.1584033              -0.8047907
slghtly conservative              -0.1421631               0.1367354
conservative                       0.4450416              -0.2253727
extrmly conservative               0.1740380              -0.7799903
                     wrkstatunempl, laid off wrkstatretired wrkstatschool
extremely liberal                 0.74371035     0.46069782     0.3741055
liberal                           0.55439226     0.55837113     0.6985156
slightly liberal                 -0.07994692     0.40385492    -0.1067726
slghtly conservative             -0.02156486     0.06982105     0.2061969
conservative                     -0.07487960     0.17601685    -0.1283045
extrmly conservative             -0.23313938     0.03959420     0.2835348
                     wrkstatkeeping house wrkstatother regionmiddle atlantic
extremely liberal               0.6853264   -0.7188634            0.01074032
liberal                         0.1750060    0.1817457           -0.04034211
slightly liberal                0.2212480   -1.6536568            0.37296325
slghtly conservative           -0.1545760   -1.4130541           -0.52427178
conservative                    0.3797224    0.2306858            0.25323521
extrmly conservative            0.1912571   -1.2323626            0.69383354
                     regione. nor. central regionw. nor. central
extremely liberal              -0.25404993          -1.194124729
liberal                        -0.32520490          -0.691807051
slightly liberal                0.53354844           0.231318101
slghtly conservative            0.09977572          -0.009891193
conservative                    0.12340841           0.007035935
extrmly conservative            0.28179743           0.912692010
                     regionsouth atlantic regione. sou. central
extremely liberal              -0.1358998            -0.2015682
liberal                        -0.5708286            -0.2922345
slightly liberal                0.2811713             0.7635301
slghtly conservative           -0.2275224            -0.1726452
conservative                    0.2988351             0.2678516
extrmly conservative            0.5741333             0.4550126
                     regionw. sou. central regionmountain regionpacific
extremely liberal              -0.42650996    -0.09817787     0.0373986
liberal                        -0.50956245    -0.66829266    -0.0174256
slightly liberal                0.32129965     0.64376764     0.3833209
slghtly conservative            0.03881327    -0.31662255    -0.5504044
conservative                    0.31174426     0.25843852     0.2372300
extrmly conservative            0.19145088    -0.48667751     0.5706989
                     maritalwidowed maritaldivorced maritalseparated
extremely liberal       -0.07011156      0.08209546       0.42415246
liberal                 -0.18462234     -0.24046203      -0.21630928
slightly liberal         0.20439901      0.10404778       0.15159236
slghtly conservative    -0.40363303     -0.36305074      -0.16856326
conservative            -0.77914907     -0.62345753      -0.30536149
extrmly conservative    -0.97263232     -0.18171354      -0.03363137
                     maritalnever married       childs degreehigh school
extremely liberal              0.06472947 -0.084127078        -0.8748119
liberal                       -0.05189592 -0.075530020        -0.4295016
slightly liberal               0.43263316  0.015616245         0.2852313
slghtly conservative          -0.30005125 -0.021040642         0.3220330
conservative                  -0.27704987  0.006577674         0.1975295
extrmly conservative          -0.45602523 -0.079193655        -0.1769595
                     degreejunior college degreebachelor degreegraduate
extremely liberal              -1.1832487    -0.02676944      0.2704660
liberal                        -0.2226313     0.39224324      0.9735811
slightly liberal                0.3494094     0.95399223      0.8097130
slghtly conservative            0.1323961     0.55525103      0.6328583
conservative                    0.2727731     0.48194094      0.3352982
extrmly conservative           -0.4099729    -0.85835109      0.2178098
                     religcatholic  religjewish  relignone  religother
extremely liberal      -1.43925263  0.728170247  0.8567975 -10.3273872
liberal                -0.37279618  0.992652090  0.8647175   0.7327783
slightly liberal       -0.01359356 -0.622900777  0.2971319  -0.2099243
slghtly conservative   -0.14023655 -0.941110243 -0.5740601  -0.6073292
conservative           -0.38400936  0.001007363 -0.8000609  -2.0197220
extrmly conservative   -0.53719058 -0.812113026 -1.0571556  -9.6322742
                     religbuddhism relighinduism religother eastern
extremely liberal        1.8525294   -10.9666421          -1.724592
liberal                  1.6925155    -0.5523906          15.249595
slightly liberal         1.2089028    -0.6896704          -1.335510
slghtly conservative    -7.9315793   -12.1433213          -1.224771
conservative             0.3793666   -12.6426342          -2.451906
extrmly conservative    -7.4214176   -11.5256348          -2.012006
                     religmoslem/islam religorthodox-christian
extremely liberal          -10.5995933              -6.7326504
liberal                     -0.3737873              -7.8583228
slightly liberal            -0.2483495               0.5506598
slghtly conservative       -11.1283531               0.8097191
conservative                -0.2645441               0.1686029
extrmly conservative       -10.0526416              -6.6225117
                     religchristian relignative american
extremely liberal        0.13357335            -1.073439
liberal                 -0.47233178            -3.343673
slightly liberal        -1.33302959            -5.646808
slghtly conservative    -1.00222797            -6.578869
conservative             0.04962471            -5.251041
extrmly conservative    -0.52576354            -3.867512
                     religinter-nondenominational
extremely liberal                       -2.633177
liberal                                 -5.351359
slightly liberal                        -4.194009
slghtly conservative                    -5.734080
conservative                            -7.643212
extrmly conservative                    -3.799506

Std. Errors:
                     (Intercept)         age sexfemale
extremely liberal      0.7233285 0.008957709 0.2126684
liberal                0.5213076 0.006624797 0.1534045
slightly liberal       0.5921547 0.006665665 0.1524650
slghtly conservative   0.5228057 0.006202656 0.1470326
conservative           0.5123799 0.005659438 0.1389007
extrmly conservative   0.8848568 0.009407843 0.2306779
                     wrkstatworking parttime wrkstattemp not working
extremely liberal                  0.3323578               0.5107674
liberal                            0.2385692               0.7661197
slightly liberal                   0.2634735               0.6302954
slghtly conservative               0.2489135               0.4150855
conservative                       0.2121887               0.4784841
extrmly conservative               0.3600841               1.0432543
                     wrkstatunempl, laid off wrkstatretired wrkstatschool
extremely liberal                  0.5298788      0.3585109     0.5432450
liberal                            0.3859357      0.2630175     0.3472929
slightly liberal                   0.4215255      0.2625651     0.4121903
slghtly conservative               0.4058658      0.2419826     0.4304514
conservative                       0.4226209      0.2203254     0.5106840
extrmly conservative               0.7613984      0.3499976     0.7766461
                     wrkstatkeeping house wrkstatother regionmiddle atlantic
extremely liberal               0.3457320    1.0526695             0.5202780
liberal                         0.2732873    0.5254631             0.3560433
slightly liberal                0.2597759    1.0335050             0.4388225
slghtly conservative            0.2679951    0.7530973             0.3923364
conservative                    0.2295483    0.3992324             0.3823219
extrmly conservative            0.3949556    1.0492660             0.6900124
                     regione. nor. central regionw. nor. central
extremely liberal                0.4984969             0.8481745
liberal                          0.3398264             0.4676760
slightly liberal                 0.4110672             0.4967742
slghtly conservative             0.3315777             0.3992429
conservative                     0.3584127             0.4304242
extrmly conservative             0.6642710             0.7100160
                     regionsouth atlantic regione. sou. central
extremely liberal               0.4753587             0.5959194
liberal                         0.3333234             0.4125389
slightly liberal                0.4101605             0.4538988
slghtly conservative            0.3309178             0.4044922
conservative                    0.3458008             0.4072637
extrmly conservative            0.6383835             0.7303768
                     regionw. sou. central regionmountain regionpacific
extremely liberal                0.5455188      0.5344561     0.4856008
liberal                          0.3713177      0.3976170     0.3297321
slightly liberal                 0.4355096      0.4398608     0.4181391
slghtly conservative             0.3472286      0.3930438     0.3638416
conservative                     0.3651717      0.3917122     0.3632049
extrmly conservative             0.6894718      0.8434987     0.6645007
                     maritalwidowed maritaldivorced maritalseparated
extremely liberal         0.4291298       0.2967404        0.5359200
liberal                   0.3085405       0.2224439        0.4611628
slightly liberal          0.3034937       0.2178886        0.4502206
slghtly conservative      0.2860078       0.2015107        0.4239529
conservative              0.2607239       0.1907283        0.3798894
extrmly conservative      0.4618231       0.2883806        0.5718139
                     maritalnever married     childs degreehigh school
extremely liberal               0.2802580 0.07315676         0.3142326
liberal                         0.2015505 0.05449600         0.2538245
slightly liberal                0.2055867 0.05198222         0.2799284
slghtly conservative            0.2046726 0.04957249         0.2645797
conservative                    0.1923968 0.04450023         0.2319102
extrmly conservative            0.3412632 0.07532249         0.3465538
                     degreejunior college degreebachelor degreegraduate
extremely liberal               0.5151006      0.3492843      0.3999911
liberal                         0.3431002      0.2797062      0.3089430
slightly liberal                0.3654581      0.3057678      0.3628079
slghtly conservative            0.3536759      0.2963213      0.3393943
conservative                    0.3046753      0.2640001      0.3149962
extrmly conservative            0.4966326      0.4741018      0.4521798
                     religcatholic religjewish relignone   religother
extremely liberal        0.4212281   0.6271805 0.2327484 1.480395e-05
liberal                  0.2184262   0.4673383 0.1799625 4.716166e-01
slightly liberal         0.1932956   0.7845526 0.1859720 6.509197e-01
slghtly conservative     0.1741356   0.7794009 0.2063630 6.495092e-01
conservative             0.1684722   0.5056191 0.2057652 1.043551e+00
extrmly conservative     0.2820126   1.0689695 0.3793453 3.154641e-05
                     religbuddhism relighinduism religother eastern
extremely liberal     0.7995995940  8.029968e-06       5.419618e-09
liberal               0.6931823829  9.013806e-01       7.576152e-08
slightly liberal      0.7282224050  1.126501e+00       4.301253e-09
slghtly conservative  0.0003205968  4.313696e-06       3.684150e-09
conservative          0.7854453653  3.620553e-06       2.219957e-09
extrmly conservative  0.0002137204  5.227826e-06       6.483847e-09
                     religmoslem/islam religorthodox-christian
extremely liberal         1.000699e-05            0.0005659433
liberal                   8.328414e-01            0.0003234143
slightly liberal          8.186326e-01            1.2500144651
slghtly conservative      1.106865e-05            1.0274835968
conservative              7.062654e-01            1.2392106117
extrmly conservative      1.131282e-05            0.0005891459
                     religchristian relignative american
extremely liberal         0.7873163         2.755389e-03
liberal                   0.7796096         2.406257e-04
slightly liberal          1.0490001         5.704922e-05
slghtly conservative      0.7711007         2.435787e-05
conservative              0.4840948         5.890693e-05
extrmly conservative      1.0569571         2.680461e-04
                     religinter-nondenominational
extremely liberal                    6.497791e-04
liberal                              6.951759e-05
slightly liberal                     1.638623e-04
slghtly conservative                 5.006574e-05
conservative                         1.433041e-05
extrmly conservative                 3.624374e-04

Residual Deviance: 7139.187 
AIC: 7607.187 

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(mnmodel, type="text", out="mnmodel.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:                                        
                             ---------------------------------------------------------------------------------------------------
                             extremely liberal  liberal  slightly liberal slghtly conservative conservative extrmly conservative
                                    (1)           (2)          (3)                (4)              (5)              (6)         
--------------------------------------------------------------------------------------------------------------------------------
age                                0.006         0.002        -0.001             0.008           0.021***         0.024**       
                                  (0.009)       (0.007)      (0.007)            (0.006)          (0.006)          (0.009)       
                                                                                                                                
sexfemale                         -0.133         0.162        -0.194             -0.122          -0.271*           -0.180       
                                  (0.213)       (0.153)      (0.152)            (0.147)          (0.139)          (0.231)       
                                                                                                                                
wrkstatworking parttime            0.459         0.387        -0.158             -0.142          0.445**           0.174        
                                  (0.332)       (0.239)      (0.263)            (0.249)          (0.212)          (0.360)       
                                                                                                                                
wrkstattemp not working            0.752       -1.536**       -0.805             0.137            -0.225           -0.780       
                                  (0.511)       (0.766)      (0.630)            (0.415)          (0.478)          (1.043)       
                                                                                                                                
wrkstatunempl, laid off            0.744         0.554        -0.080             -0.022           -0.075           -0.233       
                                  (0.530)       (0.386)      (0.422)            (0.406)          (0.423)          (0.761)       
                                                                                                                                
wrkstatretired                     0.461        0.558**       0.404              0.070            0.176            0.040        
                                  (0.359)       (0.263)      (0.263)            (0.242)          (0.220)          (0.350)       
                                                                                                                                
wrkstatschool                      0.374        0.699**       -0.107             0.206            -0.128           0.284        
                                  (0.543)       (0.347)      (0.412)            (0.430)          (0.511)          (0.777)       
                                                                                                                                
wrkstatkeeping house              0.685**        0.175        0.221              -0.155           0.380*           0.191        
                                  (0.346)       (0.273)      (0.260)            (0.268)          (0.230)          (0.395)       
                                                                                                                                
wrkstatother                      -0.719         0.182        -1.654            -1.413*           0.231            -1.232       
                                  (1.053)       (0.525)      (1.034)            (0.753)          (0.399)          (1.049)       
                                                                                                                                
regionmiddle atlantic              0.011        -0.040        0.373              -0.524           0.253            0.694        
                                  (0.520)       (0.356)      (0.439)            (0.392)          (0.382)          (0.690)       
                                                                                                                                
regione. nor. central             -0.254        -0.325        0.534              0.100            0.123            0.282        
                                  (0.498)       (0.340)      (0.411)            (0.332)          (0.358)          (0.664)       
                                                                                                                                
regionw. nor. central             -1.194        -0.692        0.231              -0.010           0.007            0.913        
                                  (0.848)       (0.468)      (0.497)            (0.399)          (0.430)          (0.710)       
                                                                                                                                
regionsouth atlantic              -0.136        -0.571*       0.281              -0.228           0.299            0.574        
                                  (0.475)       (0.333)      (0.410)            (0.331)          (0.346)          (0.638)       
                                                                                                                                
regione. sou. central             -0.202        -0.292        0.764*             -0.173           0.268            0.455        
                                  (0.596)       (0.413)      (0.454)            (0.404)          (0.407)          (0.730)       
                                                                                                                                
regionw. sou. central             -0.427        -0.510        0.321              0.039            0.312            0.191        
                                  (0.546)       (0.371)      (0.436)            (0.347)          (0.365)          (0.689)       
                                                                                                                                
regionmountain                    -0.098        -0.668*       0.644              -0.317           0.258            -0.487       
                                  (0.534)       (0.398)      (0.440)            (0.393)          (0.392)          (0.843)       
                                                                                                                                
regionpacific                      0.037        -0.017        0.383              -0.550           0.237            0.571        
                                  (0.486)       (0.330)      (0.418)            (0.364)          (0.363)          (0.665)       
                                                                                                                                
maritalwidowed                    -0.070        -0.185        0.204              -0.404         -0.779***         -0.973**      
                                  (0.429)       (0.309)      (0.303)            (0.286)          (0.261)          (0.462)       
                                                                                                                                
maritaldivorced                    0.082        -0.240        0.104             -0.363*         -0.623***          -0.182       
                                  (0.297)       (0.222)      (0.218)            (0.202)          (0.191)          (0.288)       
                                                                                                                                
maritalseparated                   0.424        -0.216        0.152              -0.169           -0.305           -0.034       
                                  (0.536)       (0.461)      (0.450)            (0.424)          (0.380)          (0.572)       
                                                                                                                                
maritalnever married               0.065        -0.052       0.433**             -0.300           -0.277           -0.456       
                                  (0.280)       (0.202)      (0.206)            (0.205)          (0.192)          (0.341)       
                                                                                                                                
childs                            -0.084        -0.076        0.016              -0.021           0.007            -0.079       
                                  (0.073)       (0.054)      (0.052)            (0.050)          (0.045)          (0.075)       
                                                                                                                                
degreehigh school                -0.875***      -0.430*       0.285              0.322            0.198            -0.177       
                                  (0.314)       (0.254)      (0.280)            (0.265)          (0.232)          (0.347)       
                                                                                                                                
degreejunior college             -1.183**       -0.223        0.349              0.132            0.273            -0.410       
                                  (0.515)       (0.343)      (0.365)            (0.354)          (0.305)          (0.497)       
                                                                                                                                
degreebachelor                    -0.027         0.392       0.954***            0.555*           0.482*          -0.858*       
                                  (0.349)       (0.280)      (0.306)            (0.296)          (0.264)          (0.474)       
                                                                                                                                
degreegraduate                     0.270       0.974***      0.810**             0.633*           0.335            0.218        
                                  (0.400)       (0.309)      (0.363)            (0.339)          (0.315)          (0.452)       
                                                                                                                                
religcatholic                    -1.439***      -0.373*       -0.014             -0.140          -0.384**         -0.537*       
                                  (0.421)       (0.218)      (0.193)            (0.174)          (0.168)          (0.282)       
                                                                                                                                
religjewish                        0.728        0.993**       -0.623             -0.941           0.001            -0.812       
                                  (0.627)       (0.467)      (0.785)            (0.779)          (0.506)          (1.069)       
                                                                                                                                
relignone                        0.857***      0.865***       0.297            -0.574***        -0.800***        -1.057***      
                                  (0.233)       (0.180)      (0.186)            (0.206)          (0.206)          (0.379)       
                                                                                                                                
religother                      -10.327***       0.733        -0.210             -0.607          -2.020*         -9.632***      
                                 (0.00001)      (0.472)      (0.651)            (0.650)          (1.044)         (0.00003)      
                                                                                                                                
religbuddhism                     1.853**       1.693**       1.209*           -7.932***          0.379          -7.421***      
                                  (0.800)       (0.693)      (0.728)            (0.0003)         (0.785)          (0.0002)      
                                                                                                                                
relighinduism                   -10.967***      -0.552        -0.690           -12.143***       -12.643***       -11.526***     
                                 (0.00001)      (0.901)      (1.127)           (0.00000)        (0.00000)        (0.00001)      
                                                                                                                                
religother eastern               -1.725***     15.250***    -1.336***          -1.225***        -2.452***        -2.012***      
                                  (0.000)      (0.00000)     (0.000)            (0.000)          (0.000)          (0.000)       
                                                                                                                                
religmoslem/islam               -10.600***      -0.374        -0.248           -11.128***         -0.265         -10.053***     
                                 (0.00001)      (0.833)      (0.819)           (0.00001)         (0.706)         (0.00001)      
                                                                                                                                
religorthodox-christian          -6.733***     -7.858***      0.551              0.810            0.169          -6.623***      
                                  (0.001)      (0.0003)      (1.250)            (1.027)          (1.239)          (0.001)       
                                                                                                                                
religchristian                     0.134        -0.472        -1.333             -1.002           0.050            -0.526       
                                  (0.787)       (0.780)      (1.049)            (0.771)          (0.484)          (1.057)       
                                                                                                                                
relignative american             -1.073***     -3.344***    -5.647***          -6.579***        -5.251***        -3.868***      
                                  (0.003)      (0.0002)      (0.0001)          (0.00002)         (0.0001)         (0.0003)      
                                                                                                                                
religinter-nondenominational     -2.633***     -5.351***    -4.194***          -5.734***        -7.643***        -3.800***      
                                  (0.001)      (0.0001)      (0.0002)           (0.0001)        (0.00001)         (0.0004)      
                                                                                                                                
Constant                         -1.781**      -1.222**     -2.201***           -1.156**        -1.907***        -2.795***      
                                  (0.723)       (0.521)      (0.592)            (0.523)          (0.512)          (0.885)       
                                                                                                                                
--------------------------------------------------------------------------------------------------------------------------------
Akaike Inf. Crit.                7,607.187     7,607.187    7,607.187          7,607.187        7,607.187        7,607.187      
================================================================================================================================
Note:                                                                                                *p<0.1; **p<0.05; ***p<0.01

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modelin özetini word dosyası olarak aşağıdaki linkten indirebilirsiniz.

Odds Rasyolarının (OR) raporlanması

oddratio<-exp(coef(mnmodel))

stargazer(mnmodel, type="text", coef=list(oddratio), p.auto=FALSE, out="mnmodelor.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:                                            
                             ----------------------------------------------------------------------------------------------------------
                             extremely liberal     liberal      slightly liberal slghtly conservative conservative extrmly conservative
                                    (1)              (2)              (3)                (4)              (5)              (6)         
---------------------------------------------------------------------------------------------------------------------------------------
age                                1.006            1.002            0.999              1.008           1.021***         1.024**       
                                  (0.009)          (0.007)          (0.007)            (0.006)          (0.006)          (0.009)       
                                                                                                                                       
sexfemale                          0.875            1.176            0.823              0.885            0.763*           0.835        
                                  (0.213)          (0.153)          (0.152)            (0.147)          (0.139)          (0.231)       
                                                                                                                                       
wrkstatworking parttime            1.582            1.472            0.854              0.867           1.561**           1.190        
                                  (0.332)          (0.239)          (0.263)            (0.249)          (0.212)          (0.360)       
                                                                                                                                       
wrkstattemp not working            2.121           0.215**           0.447              1.147            0.798            0.458        
                                  (0.511)          (0.766)          (0.630)            (0.415)          (0.478)          (1.043)       
                                                                                                                                       
wrkstatunempl, laid off            2.104            1.741            0.923              0.979            0.928            0.792        
                                  (0.530)          (0.386)          (0.422)            (0.406)          (0.423)          (0.761)       
                                                                                                                                       
wrkstatretired                     1.585           1.748**           1.498              1.072            1.192            1.040        
                                  (0.359)          (0.263)          (0.263)            (0.242)          (0.220)          (0.350)       
                                                                                                                                       
wrkstatschool                      1.454           2.011**           0.899              1.229            0.880            1.328        
                                  (0.543)          (0.347)          (0.412)            (0.430)          (0.511)          (0.777)       
                                                                                                                                       
wrkstatkeeping house              1.984**           1.191            1.248              0.857            1.462*           1.211        
                                  (0.346)          (0.273)          (0.260)            (0.268)          (0.230)          (0.395)       
                                                                                                                                       
wrkstatother                       0.487            1.199            0.191              0.243*           1.259            0.292        
                                  (1.053)          (0.525)          (1.034)            (0.753)          (0.399)          (1.049)       
                                                                                                                                       
regionmiddle atlantic              1.011            0.960            1.452              0.592            1.288            2.001        
                                  (0.520)          (0.356)          (0.439)            (0.392)          (0.382)          (0.690)       
                                                                                                                                       
regione. nor. central              0.776            0.722            1.705              1.105            1.131            1.326        
                                  (0.498)          (0.340)          (0.411)            (0.332)          (0.358)          (0.664)       
                                                                                                                                       
regionw. nor. central              0.303            0.501            1.260              0.990            1.007            2.491        
                                  (0.848)          (0.468)          (0.497)            (0.399)          (0.430)          (0.710)       
                                                                                                                                       
regionsouth atlantic               0.873            0.565*           1.325              0.797            1.348            1.776        
                                  (0.475)          (0.333)          (0.410)            (0.331)          (0.346)          (0.638)       
                                                                                                                                       
regione. sou. central              0.817            0.747            2.146*             0.841            1.307            1.576        
                                  (0.596)          (0.413)          (0.454)            (0.404)          (0.407)          (0.730)       
                                                                                                                                       
regionw. sou. central              0.653            0.601            1.379              1.040            1.366            1.211        
                                  (0.546)          (0.371)          (0.436)            (0.347)          (0.365)          (0.689)       
                                                                                                                                       
regionmountain                     0.906            0.513*           1.904              0.729            1.295            0.615        
                                  (0.534)          (0.398)          (0.440)            (0.393)          (0.392)          (0.843)       
                                                                                                                                       
regionpacific                      1.038            0.983            1.467              0.577            1.268            1.770        
                                  (0.486)          (0.330)          (0.418)            (0.364)          (0.363)          (0.665)       
                                                                                                                                       
maritalwidowed                     0.932            0.831            1.227              0.668           0.459***         0.378**       
                                  (0.429)          (0.309)          (0.303)            (0.286)          (0.261)          (0.462)       
                                                                                                                                       
maritaldivorced                    1.086            0.786            1.110              0.696*          0.536***          0.834        
                                  (0.297)          (0.222)          (0.218)            (0.202)          (0.191)          (0.288)       
                                                                                                                                       
maritalseparated                   1.528            0.805            1.164              0.845            0.737            0.967        
                                  (0.536)          (0.461)          (0.450)            (0.424)          (0.380)          (0.572)       
                                                                                                                                       
maritalnever married               1.067            0.949           1.541**             0.741            0.758            0.634        
                                  (0.280)          (0.202)          (0.206)            (0.205)          (0.192)          (0.341)       
                                                                                                                                       
childs                             0.919            0.927            1.016              0.979            1.007            0.924        
                                  (0.073)          (0.054)          (0.052)            (0.050)          (0.045)          (0.075)       
                                                                                                                                       
degreehigh school                0.417***           0.651*           1.330              1.380            1.218            0.838        
                                  (0.314)          (0.254)          (0.280)            (0.265)          (0.232)          (0.347)       
                                                                                                                                       
degreejunior college              0.306**           0.800            1.418              1.142            1.314            0.664        
                                  (0.515)          (0.343)          (0.365)            (0.354)          (0.305)          (0.497)       
                                                                                                                                       
degreebachelor                     0.974            1.480           2.596***            1.742*           1.619*           0.424*       
                                  (0.349)          (0.280)          (0.306)            (0.296)          (0.264)          (0.474)       
                                                                                                                                       
degreegraduate                     1.311           2.647***         2.247**             1.883*           1.398            1.243        
                                  (0.400)          (0.309)          (0.363)            (0.339)          (0.315)          (0.452)       
                                                                                                                                       
religcatholic                    0.237***           0.689*           0.986              0.869           0.681**           0.584*       
                                  (0.421)          (0.218)          (0.193)            (0.174)          (0.168)          (0.282)       
                                                                                                                                       
religjewish                        2.071           2.698**           0.536              0.390            1.001            0.444        
                                  (0.627)          (0.467)          (0.785)            (0.779)          (0.506)          (1.069)       
                                                                                                                                       
relignone                        2.356***          2.374***          1.346             0.563***         0.449***         0.347***      
                                  (0.233)          (0.180)          (0.186)            (0.206)          (0.206)          (0.379)       
                                                                                                                                       
religother                      0.00003***          2.081            0.811              0.545            0.133*         0.0001***      
                                 (0.00001)         (0.472)          (0.651)            (0.650)          (1.044)         (0.00003)      
                                                                                                                                       
religbuddhism                     6.376**          5.433**           3.350*           0.0004***          1.461           0.001***      
                                  (0.800)          (0.693)          (0.728)            (0.0003)         (0.785)          (0.0002)      
                                                                                                                                       
relighinduism                   0.00002***          0.576            0.502            0.00001***       0.00000***       0.00001***     
                                 (0.00001)         (0.901)          (1.127)           (0.00000)        (0.00000)        (0.00001)      
                                                                                                                                       
religother eastern               0.178***      4,195,801.000***     0.263***           0.294***         0.086***         0.134***      
                                  (0.000)         (0.00000)         (0.000)            (0.000)          (0.000)          (0.000)       
                                                                                                                                       
religmoslem/islam               0.00002***          0.688            0.780            0.00001***         0.768          0.00004***     
                                 (0.00001)         (0.833)          (0.819)           (0.00001)         (0.706)         (0.00001)      
                                                                                                                                       
religorthodox-christian          0.001***         0.0004***          1.734              2.247            1.184           0.001***      
                                  (0.001)          (0.0003)         (1.250)            (1.027)          (1.239)          (0.001)       
                                                                                                                                       
religchristian                     1.143            0.624            0.264              0.367            1.051            0.591        
                                  (0.787)          (0.780)          (1.049)            (0.771)          (0.484)          (1.057)       
                                                                                                                                       
relignative american             0.342***          0.035***         0.004***           0.001***         0.005***         0.021***      
                                  (0.003)          (0.0002)         (0.0001)          (0.00002)         (0.0001)         (0.0003)      
                                                                                                                                       
religinter-nondenominational     0.072***          0.005***         0.015***           0.003***        0.0005***         0.022***      
                                  (0.001)          (0.0001)         (0.0002)           (0.0001)        (0.00001)         (0.0004)      
                                                                                                                                       
Constant                          0.168**          0.295**          0.111***           0.315**          0.149***         0.061***      
                                  (0.723)          (0.521)          (0.592)            (0.523)          (0.512)          (0.885)       
                                                                                                                                       
---------------------------------------------------------------------------------------------------------------------------------------
Akaike Inf. Crit.                7,607.187        7,607.187        7,607.187          7,607.187        7,607.187        7,607.187      
=======================================================================================================================================
Note:                                                                                                       *p<0.1; **p<0.05; ***p<0.01

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modelin üstel beta (exp(B)) özetini word dosyası olarak aşağıdaki linkten indirebilirsiniz.

AIC ve BIC parametrelerinin hesaplanması

AIC değerinde ilk olarak kurulan modelin serbestlik derecesi 2 ile çarpılır. Ardından modelden elde edilen sapmalar (2 X log olasılıkları (LL) hesaplanır. Daha sonra 1. işlemden ikinci işlem çıkarılarak AIC değeri hesaplanır. Formülize edilirse 2 X Serbestlik Derecesi – 2 X Model Sapması eşitliği şeklinde ifade edilebilmekle birlikte literatürdeki notasyonuna uygun yazacak olursak aşağıdaki gibi bir eşitlik kullanmış oluruz.

AIC=2 X k – 2 X LL

Schwarz’ın Bayesçi kriteri (SBC) olarak da bilinen BIC değerinde ilk olarak kurulan modelden elde edilen sapmaların (2*log olasılıkları) hesaplanır. Ardından kurulan modelin uyum değerlerinin veya modele sokulan gözlem sayısının logaritması alınarak kurulan modelin serbestlik derecesiyle çarpılır. Literatürdeki notasyonuna uygun yazacak olursak BIC değeri aşağıda aşağıdaki eşitlik yardımıyla hesaplanmaktadır.

BIC = −2 X LL+k X (n)

Önceki kısımda model özetinde AIC değeri hesaplansa da aşağıdaki R kod bloğunda BIC değeri ile birlikte hesaplanma şekli sonuçlarıyla gösterilecektir.

#AIC değerini hesaplama
#AIC değerinde ilk olarak kurulan modelin serbestlik derecesi 2 ile çarpılır. Ardından modelden elde edilen sapmalar (2*log olasılıkları) hesaplanır. Daha sonra 1. işlemden ikinci işlem çıkarılarak AIC değeri hesaplanır. 
#formülize edilirse 2*Serbestlik Drecesi-2*Model Sapması
#modelin serbestlik derecesi:mnmodel$edf=234
2*234-2*logLik(mnmodel)#AIC=7607.187
2*mnmodel$edf-2*logLik(mnmodel)#AIC=7607.187
2*(mnmodel$edf-logLik(mnmodel))#AIC=7607.187

#BIC (Bayesian Information Criterion) değerini hesaplama
#BIC değerinde ilk olarak kurulan modelden elde edilen sapmaların (2*log olasılıkları) hesaplanır. Ardından kurulan modelin uyum değerlerinin gözlem sayısının logaritmasının alınarak kurulan modelin serbestlik derecesiyle çarpılır.
#-modelsapması+model serbestlik derecesi*log(model uyumdeğerlerindeki gözlem sayısı)
-2*logLik(mnmodel)+mnmodel$edf*log(NROW(mnmodel$fitted.values)) ##8942.745
BIC(mnmodel)#8942.745: Doğrulamak için 
AIC(mnmodel)#7607.187: Doğrulamak için 

Pseudo R Karelerin ve 2 X LL’nin hesaplanması

Pseudo R Kareler ve 2 X 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=mnmodel$deviance# yada deviance(mnmodel)
nd=deviance(update(mnmodel, . ~ 1, trace=F))
l=length(mnmodel$fitted.values)
llm=logLik(mnmodel)#model log olasılıkları
lln=logLik(update(mnmodel, . ~ 1, trace=F))#null model log olasılıkları (sadece intersept değerini içerir)
x0=2*logLik(mnmodel)#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))#etiket ve değer vektörlerinden tablo oluşturulması

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 önem düzeyleri

n<-varImp(mnmodel)
n<-rownames(n)
n<-n %>% as_tibble()
varImp(mnmodel)%>% as_tibble() %>% rename("Onem_Duzeyi"=Overall) %>% add_column("Değişken"=n$value,.before="Onem_Duzeyi") %>% mutate_if(is.numeric, round, 3) %>% arrange(desc(Onem_Duzeyi)) %>% slice(1:10) %>% formattable()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra bağımsız değişkenlerin bağımlı değişken (admit) üzerindeki önem düzeyleri en yüksek olan ilk 10 kayıt aşağıdaki tabloda verilmiştir.

Tahmin edilen olasılıkların (predicted probabilities) hesaplanması

tahminolasilik <- as_tibble(predict(mnmodel, type = "probs")) %>% add_column(id=1:NROW(tamveri), .before="moderate")
o<-tahminolasilik %>% slice(1:10)
formattable(round(o,3))

Hesaplanan tahmin olasılıklarının ilk 10 kaydı aşağıda verilmiştir.

Artıklar (residuals)’ın hesaplanması

artik <- as_tibble(residuals(mnmodel)) %>%  #calculate residuals
  setNames(paste('resid.', names(.), sep = "")) %>% #değişken adlarını artıklara göre update etme
  add_column(id=1:NROW(tamveri), .before="resid.moderate")

a<-artik %>% slice(1:10)
formattable(round(a,3))

Hesaplanan artıkların ilk 10 kaydı aşağıda verilmiştir.

Veri setine tahmin edilen olasılıkların ve artıkların eklenmesi

gv<-cbind(tamveri, tahminolasilik,artik)
gv %>% glimpse()

Yukarıdaki R kod bloğu çalıştırıldıktan sonra aşağıda görüleceği üzere veri setinde değişken sayısı artmış ve sağa doğru veri seti genişlemiştir.

Observations: 2,225
Variables: 26
$ age                          <int> 43, 42, 63, 71, 67, 59, 43, 62, 59,...
$ sex                          <fct> male, male, female, male, female, f...
$ wrkstat                      <fct> "temp not working", "working fullti...
$ region                       <fct> new england, new england, new engla...
$ marital                      <fct> never married, married, married, di...
$ childs                       <int> 0, 2, 2, 0, 2, 6, 0, 4, 2, 3, 2, 2,...
$ degree                       <fct> junior college, bachelor, bachelor,...
$ relig                        <fct> christian, none, protestant, cathol...
$ polviews                     <fct> conservative, slghtly conservative,...
$ polviews2                    <fct> conservative, slghtly conservative,...
$ id                           <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
$ moderate                     <dbl> 0.5838392, 0.2880576, 0.2899059, 0....
$ `extremely liberal`          <dbl> 1.004563e-01, 1.205577e-01, 5.10348...
$ liberal                      <dbl> 1.936053e-02, 2.822772e-01, 1.47536...
$ `slightly liberal`           <dbl> 0.01568601, 0.10839992, 0.06482509,...
$ `slghtly conservative`       <dbl> 9.198692e-02, 1.190447e-01, 2.22417...
$ conservative                 <dbl> 0.17720300, 0.07557168, 0.19982598,...
$ `extrmly conservative`       <dbl> 1.146804e-02, 6.091201e-03, 2.44544...
$ id                           <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
$ resid.moderate               <dbl> -0.5838392, -0.2880576, 0.7100941, ...
$ `resid.extremely liberal`    <dbl> -1.004563e-01, -1.205577e-01, -5.10...
$ resid.liberal                <dbl> -1.936053e-02, -2.822772e-01, -1.47...
$ `resid.slightly liberal`     <dbl> -0.01568601, -0.10839992, -0.064825...
$ `resid.slghtly conservative` <dbl> -9.198692e-02, 8.809553e-01, -2.224...
$ resid.conservative           <dbl> 0.82279700, -0.07557168, -0.1998259...
$ `resid.extrmly conservative` <dbl> -1.146804e-02, -6.091201e-03, -2.44...

Gözlem ve tahmin değerlerinin karşılaştırılması ve doğruluk oranı

gv<-gv[, !duplicated(colnames(gv))]#tekrarlı değişkenlerin veri setinden çıkarılması (örneğin id gibi)

gv <- gv %>% mutate(tahmin  = predict(mnmodel, type = "class"))

#modelin doğruluk oranı
paste("Doğruluk oranı: %",round(accuracy(gv$polviews2, gv$tahmin)*100,2))

#elde edilen gözlem değerleri ve tahmin değerlerinin xlsx uzantılı dosyaya yazdırılması
write_xlsx(gv, "karsilastirmafullmodel.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra modele ait elde edilen doğruluk (accuracy) oranı % 39,1 olup, aşağıda verilmiştir.

[1] "Doğruluk oranı: % 39.1"

Yukarıdaki R kod bloğunun çalıştırılmasından sonra modele ait elde edilen tahmin değerleri gözlem değerleri ile birlikte karşılaştırmalı olarak aşağıda verilmiş olup, buradaki linkten indirebilirsiniz.

Sınıflandırma tablosunun oluşturulması

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.

Tablo 1: Karışıklık Matrisi

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.
st<-gv %>% 
  count(polviews, tahmin, .drop = FALSE) %>%
  pivot_wider(names_from = tahmin, values_from = n)
formattable(st)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen sınıflandırma tablosu aşağıda verilmiştir. Tabloda satırlar gözlemleri, sütunlar ise tahminleri göstermektedir.

Model etki testi (Parametre Tahminleri)

Anova testi yardımıyla kurulan modelin etkisi test edilmiştir.

Anova(mnmodel, type=c("II","III", 2, 3),
    test.statistic=c("LR", "Wald", "F"),
    error, error.estimate=c("pearson", "dispersion", "deviance"),)

#yada
Anova(mnmodel)

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: polviews2
        LR Chisq Df Pr(>Chisq)    
age       19.512  6   0.003381 ** 
sex        8.150  6   0.227284    
wrkstat   54.046 42   0.100714    
region    50.427 48   0.377735    
marital   35.746 24   0.058085 .  
childs     4.606  6   0.595309    
degree    84.048 24   1.36e-08 ***
relig    206.960 72   5.51e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Üstel Beta (Exponential Beta: Odds Ratio (OR)) Katsayıları

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.

ga <- confint(mnmodel) # güven aralığı (CI:Confidence Interval)
## OR and CI (Üstel Beta ve Güven Düzeyleri)
exp(cbind(OR = coef(mnmodel), ga))

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.

           (Intercept)       age sexfemale wrkstatworking parttime
extremely liberal     0.16846040 1.0059282 0.8751644               1.5822920
liberal               0.29477660 1.0022732 1.1756551               1.4722708
slightly liberal      0.11065417 0.9986118 0.8234712               0.8535055
slghtly conservative  0.31466559 1.0079715 0.8850268               0.8674797
conservative          0.14850901 1.0210274 0.7625484               1.5605552
extrmly conservative  0.06110804 1.0244047 0.8353281               1.1901008
                     wrkstattemp not working wrkstatunempl, laid off
extremely liberal                  2.1211076               2.1037266
liberal                            0.2153202               1.7408827
slightly liberal                   0.4471815               0.9231653
slghtly conservative               1.1465247               0.9786660
conservative                       0.7982186               0.9278552
extrmly conservative               0.4584105               0.7920432
                     wrkstatretired wrkstatschool wrkstatkeeping house
extremely liberal          1.585180     1.4536904            1.9844193
liberal                    1.747823     2.0107656            1.1912533
slightly liberal           1.497587     0.8987300            1.2476328
slghtly conservative       1.072316     1.2289952            0.8567783
conservative               1.192458     0.8795855            1.4618787
extrmly conservative       1.040388     1.3278151            1.2107707
                     wrkstatother regionmiddle atlantic
extremely liberal       0.4873058             1.0107982
liberal                 1.1993091             0.9604608
slightly liberal        0.1913489             1.4520310
slghtly conservative    0.2433988             0.5919863
conservative            1.2594635             1.2881862
extrmly conservative    0.2916028             2.0013732
                     regione. nor. central regionw. nor. central
extremely liberal                0.7756531             0.3029690
liberal                          0.7223793             0.5006705
slightly liberal                 1.7049716             1.2602601
slghtly conservative             1.1049231             0.9901576
conservative                     1.1313464             1.0070607
extrmly conservative             1.3255102             2.4910194
                     regionsouth atlantic regione. sou. central
extremely liberal               0.8729301             0.8174478
liberal                         0.5650570             0.7465934
slightly liberal                1.3246805             2.1458379
slghtly conservative            0.7965046             0.8414361
conservative                    1.3482873             1.3071532
extrmly conservative            1.7755910             1.5761933
                     regionw. sou. central regionmountain regionpacific
extremely liberal                0.6527834      0.9064877     1.0381067
liberal                          0.6007584      0.5125830     0.9827254
slightly liberal                 1.3789187      1.9036396     1.4671488
slghtly conservative             1.0395763      0.7286057     0.5767165
conservative                     1.3658054      1.2949065     1.2677327
extrmly conservative             1.2110053      0.6146652     1.7695033
                     maritalwidowed maritaldivorced maritalseparated
extremely liberal         0.9322898       1.0855594        1.5282946
liberal                   0.8314182       0.7862645        0.8054861
slightly liberal          1.2267876       1.1096535        1.1636858
slghtly conservative      0.6678892       0.6955511        0.8448778
conservative              0.4587962       0.5360877        0.7368570
extrmly conservative      0.3780865       0.8338402        0.9669279
                     maritalnever married    childs degreehigh school
extremely liberal               1.0668704 0.9193144         0.4169404
liberal                         0.9494277 0.9272519         0.6508334
slightly liberal                1.5413107 1.0157388         1.3300697
slghtly conservative            0.7407803 0.9791792         1.3799303
conservative                    0.7580167 1.0065994         1.2183890
extrmly conservative            0.6337978 0.9238610         0.8378137
                     degreejunior college degreebachelor degreegraduate
extremely liberal               0.3062821      0.9735857       1.310575
liberal                         0.8004099      1.4802977       2.647408
slightly liberal                1.4182296      2.5960530       2.247263
slghtly conservative            1.1415603      1.7423783       1.882985
conservative                    1.3136022      1.6192142       1.398357
extrmly conservative            0.6636683      0.4238604       1.243351
                     religcatholic religjewish relignone   religother
extremely liberal        0.2371049   2.0712872 2.3556047 3.272448e-05
liberal                  0.6888056   2.6983813 2.3743352 2.080854e+00
slightly liberal         0.9864984   0.5363862 1.3459928 8.106456e-01
slghtly conservative     0.8691526   0.3901944 0.5632340 5.448040e-01
conservative             0.6811251   1.0010079 0.4493016 1.326924e-01
extrmly conservative     0.5843877   0.4439191 0.3474427 6.557774e-05
                     religbuddhism relighinduism religother eastern
extremely liberal     6.3759261119  1.726823e-05       1.782457e-01
liberal               5.4331308367  5.755722e-01       4.195801e+06
slightly liberal      3.3498073235  5.017414e-01       2.630241e-01
slghtly conservative  0.0003592186  5.323810e-06       2.938248e-01
conservative          1.4613586298  3.231274e-06       8.612923e-02
extrmly conservative  0.0005983004  9.873711e-06       1.337201e-01
                     religmoslem/islam religorthodox-christian
extremely liberal         2.492615e-05            0.0011913712
liberal                   6.881233e-01            0.0003865216
slightly liberal          7.800872e-01            1.7343969290
slghtly conservative      1.468986e-05            2.2472766422
conservative              7.675558e-01            1.1836500548
extrmly conservative      4.307182e-05            0.0013300860
                     religchristian relignative american
extremely liberal         1.1429051          0.341831029
liberal                   0.6235466          0.035307028
slightly liberal          0.2636772          0.003528762
slghtly conservative      0.3670607          0.001389419
conservative              1.0508766          0.005242058
extrmly conservative      0.5911039          0.020910336
                     religinter-nondenominational         ga
extremely liberal                    0.0718498528 0.04081309
liberal                              0.0047417046 0.98842146
slightly liberal                     0.0150856874 0.57685405
slghtly conservative                 0.0032338570 0.82486547
conservative                         0.0004792865 0.77946515
extrmly conservative                 0.0223818325 0.74465586

Yapılan bu çalışmayla özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması öngörülmektedir.

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

R’da Binary Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Binary Logistic Regression in R

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.

  1. 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.
  2. 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.

  1. 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.
  2. 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:

  1. gre: öğrencinin GRE (Graduate Record Exam) skorlarını göstermektedir. Değişken tipi nicel ve kesiklidir.
  2. gpa: Değişken sürekli veri tipine sahip olup, öğrencinin mezuniyet ortalamasını göstermektedir.
  3. 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.
  4. 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:

  1. 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).
  2. 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.
  3. 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).
  4. 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).
  5. 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).
  6. 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

Testing Regression Significance in R

http://gim.unmc.edu/dxtests/roc3.htm

https://dss.princeton.edu/training/LogitR101.pdf.

Logistic Regression | Stata Data Analysis Examples

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/

Main Landing Page

https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks

Topluluk Öğrenme Algoritmalarından Gradyan Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Gradient Boosting Algorithm from Ensemble Learning Algorithms

Giriş

Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.

  1. Torbalama (Bagging: Bootsrap Aggregating)
  2. Yükseltme (Boosting)
    • AdaBoost
    • Gradient Boosting
    • XGBoost
    • LightGBM
  3. İstif (Stacking)

Topluluk (ensemble) öğrenme ve yükseltme algoritmalarından biri olan gradyan yükseltme, ingilizce ifadeyle gradient boosting, temel olarak Leo Breiman tarafından 1997 yılında geliştirilen sınıflandırma, regresyon ve sıralama problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Gradyan yükseltme algoritmaları yinelemeli olarak çalışır. Bu yöntemde her bir yinelemede yeni bir zayıf öğrenici ilave edilerek güçlü bir öğrenici oluşturulur. Diğer bir ifadeyle, zayıf öğrenicilerin bir araya gelmesiyle güçlü bir öğrenici oluşturulur. Bu yöntemde her ağaç bir öncekinden ardışık düzende öğrenerek sığ ağaçlardan oluşan bir topluluk oluşturulur. Bu topluluk oluşturmak için yeni modellerin eklendiği yinelemeli (iteratif) bir süreçten oluşur. Bu bir anlamda adaptiftir. Algoritmanın her yeni yinelenmesinde, yeni modeller önceki yinelemelerde yapılan hataların üstesinden gelmek için inşa edilir. Bu yöntemde, sonraki her bir modelin önceki modeldeki hataları düzeltmeye çalıştığı sıralı (sequential) bir işlem yapılır. Yani sonraki modeller önceki modele bağımlıdır. Bu yöntem çok çeşitli sorunlara en uygun çözümleri bulabilen çok genel bir optimizasyon algoritmasıdır. Gradyan algortimasının temel fikri, maliyet fonksiyonunu en aza indirmek için parametreleri tekrarlamaktır. Ağaç eklerken kaybı en aza indirmek için gradyan iniş prosedürü kullanılır. Gradyan yükseltme üç unsur içerir:

  1. Optimize edilecek bir kayıp (loss) fonksiyonu.
  2. Tahmin yapmak için zayıf bir öğrenici.
  3. Kayıp fonksiyonu en aza indirmek için zayıf öğrenicilere eklenecek için bir katkı modeli.

Yükseltme algoritmasının işleyiş süreci Şekil 1’de verilmiştir.

Şekil 1: Gradyan Yükseltme (Gradient Boosting) Algoritmasının İşleyiş Süreci

Kaynak: https://www.akira.ai

Yükseltme algoritmaları topluluk üyelerinin her biri birbirine bağımlıdır. Torbalama algoritmaları paralel düzende, yükseltme algoritmaları ise ardışık (sequential) düzende çalışmaktadır.

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Yükseltme algoritmaları ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Yükselme (Boosting: AdaBoost) algoritması kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms

  • 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.

Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında gradyan yükseltme algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.

Metodoloji ve Uygulama Sonuçları

Bu bölümde gradyan algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak gradyan yükseltme (gradient boosting) algoritmasıyla analiz edilmiştir.

  1. Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  2. Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  3. Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  4. Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  5. Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  6. Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  7. Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  8. Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  9. Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  10. Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak yükseltme (boosting) algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS","gbm")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]

Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.

Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Veri setinin eğitilecek veri setine ve test veri setine ayrılması

Bu kısımda aşağıdaki R kod bloğunda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.

set.seed(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]

Gradyan Yükseltme (Gradient Boosting) modelinin kurulması

model <- gbm(Class ~., data=train, shrinkage=0.01, distribution="multinomial", cv.folds=3, n.trees=5000)
print(model)

Değişkenlerin önem düzeyleri

onem0<-summary(model)

onemduzey0<-tibble("Değişken"=onem0$var,"Önem Düzeyi"=as.numeric(round(onem0$rel.inf,2)))

formattable(onemduzey0, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#00FF00")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin nispi önem düzeyleri (%) değerleriyle birlikte büyükten küçüğe doğru aşağıdaki tabloda verilmiştir.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

#en iyi parametre değerine göre tahmin sonuçlarını elde etme
(eniyi <- gbm.perf(model, plot.it=FALSE, method="cv"))
tahmin<-predict(model, test, n.trees=eniyi, type="response")[,,1]
tahmin<-as.factor(colnames(tahmin)[max.col(tahmin)])

karsilastirmatest<-tibble("Gözlem"=test$Class, Tahmin=tahmin)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirmatest, 10) %>% rename(Gozlemİlk_10=Gözlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirmatest, 10) %>% rename(GozlemSon_10=Gözlem, TahminSon_10=Tahmin)
formattable(cbind("Sıra"=seq(1,10),ilk10, son10))

#sonuçların xlsx dokümanına yazdırılması
karsilatirmasonuctest<-tibble("Gözlem"=test$Class, Tahmin=tahmin)
write_xlsx(karsilatirmasonuctest, "karsilatirmasonuctest.xlsx.")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra gradyan yükseltme modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Yukarıdaki R kod bloğundaki son kod satırının çalıştırılması ile kurulan modelden elde edilen elde edilen sınıflandırma tahmin sonuçları ile test veri setindeki sınıflandırma sonuçları karşılaştırmalı olarak xlsx dokümanında verilmiş olup, aşağıdaki linkten indirebilirsiniz.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

(eniyi <- gbm.perf(model, plot.it=FALSE, method="cv"))
tahmin<-predict(model, test, n.trees=eniyi, type="response")[,,1]

tahmin<-as.factor(colnames(tahmin)[max.col(tahmin)])

(cm <- table(tahmin, test$Class))

#Doğruluk (Acccuracy) oranı (%)
paste("Doğruluk Oranı: %", round(100*(sum(diag(cm))/sum(cm)),1)) 

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

tahmin      benign malignant
  benign       139         7
  malignant      0        59

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen doğruluk oranı % 96,6 olup aşağıda verilmiştir. Burada model test verisi ile karşılaştırılmış olup elde edilen sonuçlar test verisine ilişkin sonuçlardır.

"Doğruluk Oranı: % 96.6"

Sınıflandırma Hata parametreleri

Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm0<-confusionMatrix(tahmin, test$Class)

cm0

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Gradyan yükseltme algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 92 (0,92) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       139         7
  malignant      0        59
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.678           
    P-Value [Acc > NIR] : < 2e-16         
                                          
                  Kappa : 0.9195          
                                          
 Mcnemar's Test P-Value : 0.02334         
                                          
            Sensitivity : 1.0000          
            Specificity : 0.8939          
         Pos Pred Value : 0.9521          
         Neg Pred Value : 1.0000          
             Prevalence : 0.6780          
         Detection Rate : 0.6780          
   Detection Prevalence : 0.7122          
      Balanced Accuracy : 0.9470          
                                          
       'Positive' Class : benign    

Çapraz performans testi (Cross validation test)

Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Çapraz performans testinde aşağıdaki fonksiyonda görüleceği üzere v=10 yerine v=3 olarak alınmasının nedeni performans testinin kısa sürmesinin sağlanmak istenmesinden kaynaklanmaktadır. Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

per<-gbm(Class ~., data=tamveri, shrinkage=0.01, distribution="multinomial", cv.folds=3, n.trees=5000)
bestiter<-gbm.perf(per, method = "cv")

tamveritahmin<-predict(model, tamveri, n.trees=bestiter, type="response")[,,1]

tamveritahmin<-as.factor(colnames(tamveritahmin)[max.col(tamveritahmin)])

tamverikarsilastirma<-tibble("Sıra"=seq(1, NROW(tamveri)), "Gözlem"=tamveri$Class,Tahmin=tamveritahmin)
tamverikarsilastirma

confusionMatrix(tamverikarsilastirma$Gözlem, tamverikarsilastirma$Tahmin)

##tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılması
write_xlsx(tamverikarsilastirma, "tumverisetikarsilatirma.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, gradyan yükseltme algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,2 doğruluk oranı ve % 3,8 hata oranı ile tahmin ettiğini göstermektedir. Uyumu gösteren Kappa katsayı ise yaklaşık % 92 olup, mükemmele yakın bir uyum elde edildiğini göstermektedir.

             Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       434        10
  malignant     16       223
                                         
               Accuracy : 0.9619         
                 95% CI : (0.9447, 0.975)
    No Information Rate : 0.6589         
    P-Value [Acc > NIR] : <2e-16         
                                         
                  Kappa : 0.9158         
                                         
 Mcnemar's Test P-Value : 0.3268         
                                         
            Sensitivity : 0.9644         
            Specificity : 0.9571         
         Pos Pred Value : 0.9775         
         Neg Pred Value : 0.9331         
             Prevalence : 0.6589         
         Detection Rate : 0.6354         
   Detection Prevalence : 0.6501         
      Balanced Accuracy : 0.9608         
                                         
       'Positive' Class : benign      

Yukarıdaki R kod bloğunun son satırı çalıştırılmasından sonra tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılmıştır. Gözlem ve tahmin sınıflandırma değerlerine karşılaştırmalı olarak aşağıdaki xlsx dokümanını indirerek ulaşabilirsiniz.

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan gradyan yükseltme (gradient boosting) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin gradyan yükseltme (gradient boosting) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.

Gradyan yükseltme algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini yaklaşık % 96,6 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini yaklaşık % 96,2 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden tüm verisi setinde % 3,8’dir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

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

Topluluk Öğrenme Algoritmalarından Yükseltme Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Boosting Algorithm from Ensemble Learning Algorithms

Giriş

Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.

  1. Torbalama (Bagging: Bootsrap Aggregating)
  2. Yükseltme (Boosting)
    • AdaBoost
    • Gradient Boosting
    • XGBoost
    • LightGBM
  3. İstif (Stacking)

Topluluk (ensemble) öğrenme algoritmalarından biri olan yükseltme, ingilizce ifadeyle boosting, Schapire tarafından 1990 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Yükseltme algoritmaları temel olarak şu soruya cevap bulmak için geliştirilmiştir: bir zayıf öğrenici setinden tek bir güçlü öğrenici oluşturabilir mi? Bu algoritmalar yinelemeli olarak çalışır. Bu yöntemde her bir yinelemede yeni bir zayıf öğrenici ilave edilerek güçlü bir öğrenici oluşturulur. Diğer bir ifadeyle, zayıf öğrenicilerin bir araya gelmesiyle güçlü bir öğrenici oluşturulur. Bireysel modeller, tüm veri kümesinde iyi performans göstermez, ancak veri kümesinin bir kısmı için iyi çalışır. Bu nedenle, her model aslında topluluğun performansını artırır.

En iyi bilinen ve en başarılı yükseltme algoritmalarından biri Freund ve Shapire tarafından 1996 yılında geliştirilen AdaBoost (Adaptive Boosting) algoritmasıdır. Bir topluluk oluşturmak için yeni modellerin eklendiği yinelemeli (iteratif) bir süreçten oluşur. Bu bir anlamda adaptiftir. Algoritmanın her yeni yinelenmesinde, yeni modeller önceki yinelemelerde yapılan hataların üstesinden gelmek için inşa edilir. Bu yöntemde, sonraki her bir modelin önceki modeldeki hataları düzeltmeye çalıştığı sıralı (sequential) bir işlem yapılır. Yani sonraki modeller önceki modele bağımlıdır. AdaBoost algoritması temel olarak sınıflandırma problemlerinin çözümü için geliştirilse de regresyon problemlerinin çözümünde de kullanılabilir. Yükseltme algoritmasının nasıl çalıştığını aşağıda adım adım verelim.

  1. Orijinal veri kümesinden bir alt küme oluşturulur.
  2. Başlangıçta, tüm veri noktalarına eşit ağırlık verilir.
  3. Bu alt kümede bir baz model oluşturulur.
  4. Bu model, tüm veri kümesi üzerinde tahminler yapmak için kullanılır.
  5. Hatalar, gözlem ve tahmin değerleri kullanılarak hesaplanır.
  6. Yanlış tahmin edilen gözlemlere daha yüksek ağırlık verilir.
  7. Başka bir model oluşturulur ve veri kümesinde tahminler yapılır.
  8. Benzer şekilde, her biri bir önceki modelin hatalarını düzelten birden çok model oluşturulur.
  9. Nihai model (güçlü öğrenen) tüm modellerin (zayıf öğrenenler) ağırlıklı ortalamasıdır.

Yukarıdaki adımları özetlemesi açısından Yükseltme algoritmasının işleyiş süreci Şekil 1’de verilmiştir.

Şekil 1: Yükseltme (Boosting) Algoritmasının İşleyiş Süreci

Kaynak: https://iq.opengenus.org

Yükseltme algoritmaları topluluk üyelerinin her biri birbirine bağımlıdır. Torbalama algoritmaları paralel düzende, yükseltme algoritmaları ise ardışık (sequential) düzende çalışmaktadır.

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu, diğer bir ifadeyle yüksek kesinlik (precision)-yüksek doğruluk (accuracy) hedefliyoruz. Diğer bir deyişle kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük (yüksek kesinlik (precision)) tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyans yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias=yüksek doğruluk (accuracy) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Yükseltme algoritması ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

  • 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.

Sınıflandırma hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eşitliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında yükseltme algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.

Metodoloji ve Uygulama Sonuçları

Bu bölümde torpalama algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak yükseltme (boosting) algoritmasıyla analiz edilmiştir.

  1. Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  2. Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  3. Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  4. Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  5. Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  6. Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  7. Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  8. Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  9. Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  10. Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak yükseltme (boosting) algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS", "adabag", "rpart")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]

Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.

Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Veri setinin eğitilecek veri setine ve test veri setine ayrılması

Bu kısımda aşağıdaki R kod bloğunda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.

set.seed(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]

Yükseltme (Boosting) modelinin kurulması

model <- boosting(Class ~., data=tamveri, mfinal=500)

Değişkenlerin önem düzeyleri

#önem düzeyi grafiği
importanceplot(model)
önem düzeyi değerleri tablosu
onem<-model$importance
degisken<-names(onem)
agirlik<-as_tibble(as.numeric(onem))
onemduzey<-tibble("Değişken"=degisken, "Önem Düzeyi"=round(agirlik$value,2))

formattable(onemduzey, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#FF6347")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri büyükten küçüğe doğru aşağıdaki grafikte verilmiştir.

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri değerleriyle birlikte aşağıdaki tabloda verilmiştir. Aşağıdaki tablo yukarıdaki grafiğe göre daha anlamlı olduğu söylenebilir.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- boosting(Class ~., data=tamveri, mfinal=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$Class, Tahmin=tahmin$class)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gozlemİlk_10=Gozlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GozlemSon_10=Gozlem, TahminSon_10=Tahmin)
formattable(cbind("Sıra"=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra yükseltme (boosting) modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

cm<-tahmin$confusion
plot(cm, type = "heatmap", main="Karışıklık Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

               Observed Class
Predicted Class benign malignant
      benign       128         4
      malignant      3        70

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Sınıflandırma Hata parametreleri

Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gozlem)
cm

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Yükseltme (Boosting) algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 93 (0,93) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       128         4
  malignant      3        70
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.639           
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9258          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9771          
            Specificity : 0.9459          
         Pos Pred Value : 0.9697          
         Neg Pred Value : 0.9589          
             Prevalence : 0.6390          
         Detection Rate : 0.6244          
   Detection Prevalence : 0.6439          
      Balanced Accuracy : 0.9615          
                                          
       'Positive' Class : benign  

Çapraz performans testi (Cross validation test)

Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Çapraz performans testinde aşağıdaki fonksiyonda görüleceği üzere v=10 yerine v=2 olarak alınmasının nedeni performans testinin kısa sürmesinin sağlanmak istenmesinden kaynaklanmaktadır. v=10 olarak alınsaydı performans testi işlemi 1 günümüzü alabilirdi. Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

cv<-boosting.cv(Class ~., v=2, data=tamveri, mfinal=500)

#tüm veri seti sınıflandırma tablosu (karışıklık matrisi)
cv$confusion

#doğruluk (accuracy) ve hata (error) oranı
dogrulukvehataorani<-paste("Doğruluk Oranı: %",round((1-cv[-1]$error)*100,1),"ve","Hata Oranı: %",round(cv[-1]$error*100,1))
dogrulukvehataorani

#tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılması
tümverisetitahminkarsilatirma<-tibble(Sıra=1:683, Gözlem=tamveri$Class, Tahmin=as.factor(cv$class))
write_xlsx(tümverisetitahminkarsilatirma, "tümverisetitahminkarsilatirma.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, yükseltme algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,2 doğruluk oranı ve % 3,8 hata oranı ile tahmin ettiğini göstermektedir.

               Observed Class
Predicted Class benign malignant
      benign       428        10
      malignant     16       229

 "Doğruluk Oranı: % 96.2 ve Hata Oranı: % 3.8"

Yukarıdaki R kod bloğunun son 4 satırı çalıştırılmasından sonra tüm veri seti tahminlerini gözlem değerleriyle birlikte xlsx dokümanına yazdırılmıştır. Gözlem ve tahmin sınıflandırma değerlerine karşılaştırmalı olarak aşağıdaki xlsx dokümanını indirerek ulaşabilirsiniz.

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan yükseltme (boosting) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin yükseltme (boosting) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.

Yükseltme algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini yaklaşık % 96,2 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden tüm verisi setinde % 3,8’dir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

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

Topluluk Öğrenme Algoritmalarından Torbalama Algoritması İle Konut Fiyatlarının Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Housing Prices Using Bagging Algorithm from Ensemble Learning Algorithms

Giriş

Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.

  1. Torbalama (Bagging: Bootsrap Aggregating)
  2. Artırma (Boosting)
  3. İstif (Stacking)

Topluluk (ensemble) öğrenme algoritmalarından biri olan torpalama, ingilizce ifadeyle Bagging, Breiman tarafından 1994 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Torbalama algoritmasının işleyiş süreci Şekil 1’de verilmiştir.

Şekil 1: Torbalama (Bagging) Algoritmasının İşleyiş Süreci

Şekil 1’de belirtilen torbalama algoritmasının işleyiç sürecini adım adım şöyle özetleyebiliriz.

  1. Popülasyon (N) birimlerini eğitilecek (training) veri setine ve test edilecek (testing) veri setine basit tekrarsız tesadüfi örnekleme (simple random sampling without replacement) yöntemiyle ayrılır. Burada literatürde genellikle eğitilecek veri seti seti için popülasyonun % 70’i alınsa da bu oran veri setinin ya da popülasyonun büyüklüğüne göre değişkenlik gösterebilmektedir. Bu oran 70:30 olabileceği gibi, 60:40 veya 80:20 oranı şeklinde de olabilir.
  2. Eğitilecek veri setini belirledikten sonra basit tekrarlı tesadüfi örnekleme yoluyla torbalara (1’den n’e kadar) örneklem birimleri (sample units) atanır.
  3. Örneklem birimleri kurulan modellerde eğitilir.
  4. Regresyon problemini çözüyorsak kurulan modellerden elde edilen sonuçların ortalaması alınarak bağımlı değişken (y) belirlenir. Sınıflandırma problemi çözüyorsak kurulan modellerden elde edilen çoğunluk oylama sonuçlarına göre karar verip y’yi, diğer bir ifadeyle bağımlı değişkeni (dependent variable) tahmin etmiş oluruz.

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu hedefliyoruz. Diğer bir ifadeyle, kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyan yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Torbalama yöntemi ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

  • 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.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında torbalama algoritmasıyla regresyon problemi çözülecektir. Bu amaçla ABD’nin Boston bölgesi konut fiyatları veri seti kullanılarak bağımlı değişken olan konutların medyan fiyatları tahmin edilecektir.

Metodoloji ve Uygulama Sonuçları

Bu bölümde torbalama algoritması kullanılarak ABD’nin Boston bölgesinde konutların medyan fiyatları (hedef değişken) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada regresyon problemi çözmüş olacağız. Analizde kullanılan veri seti ABD Nüfus Bürosu tarafından Boston bölgesindeki konutlarla ilgili olarak toplanan verilerden oluşmaktadır. Veri setindeki toplam gözlem sayısı 506, değişken sayısı ise 14’tür. Bu veri setine R programlama yazılımında “mlbench” paketi içerisinde “BostonHousing” olarak yer verilmiştir. R programlama dili kullanılarak torbalama (bagging) algoritmasıyla analiz edilmiştir. Veri setinde yer alan değişkenler ve değişkenlerin veri tipleri şöyledir:

  1. crim: per capita crime rate by town. Veri tipi nicel ve süreklidir.
  2. zn: proportion of residential land zoned for lots over 25,000 sq.ft. Veri tipi nicel ve kesiklidir.
  3. indus: proportion of non-retail business acres per town. Veri tipi nicel ve süreklidir.
  4. chas: Charles River dummy variable (1 if tract bounds river; 0 otherwise). Veri tipi nitel ve nominal kategoriktir.
  5. nox: nitric oxides concentration (parts per 10 million): Veri tipi nicel ve süreklidir.
  6. rm: average number of rooms per dwelling. Veri tipi nicel ve süreklidir.
  7. age: proportion of owner-occupied units built prior to 1940. Veri tipi nicel ve süreklidir.
  8. dis: weighted distances to five Boston employment centres. Veri tipi nicel ve kesiklidir.
  9. rad: index of accessibility to radial highways. Veri tipi nicel ve süreklidir.
  10. tax: full-value property-tax rate per $10,000. Veri tipi nicel ve kesiklidir.
  11. ptratio: pupil-teacher ratio by town. Veri tipi nicel ve süreklidir.
  12. b: 1000(Bk – 0.63)^2 where Bk is the proportion of blacks by town. Veri tipi nicel ve süreklidir.
  13. lstat: % lower status of the population. Veri tipi nicel ve süreklidir.
  14. medv: Median value of owner-occupied homes in $1000’s. Veri tipi nicel ve süreklidir.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “medvyani konut fiyatlarının medyan değeri geri kalan 13 bağımsız değişken kullanılarak torbalama algoritmasıyla tahmin edilecektir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR", "metrics","caret", "mlbench", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore", "rattle","yardstick","MASS", "ipred", "performanceEstimation")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması

data(BostonHousing)
veri<-BostonHousing

Ver setinin xlsx dosyasına yazdırılması

write_xlsx(veri, "Bostonkonutfiyatları.xlsx")#xlsx dosyası için

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx uzantılı dosyaya yazdırılmıştır. Elde edilen veri seti dosyası xlsx uzantılı olarak aşağıdan indirilebilir.

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()
#veri setindeki 11,12,13 ve 14. değişkenlerin görselleştirilmesi
veri[,11:14] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Pearson korelasyon matrisi 
cor.plot(veri[,-4], main="Korelasyon Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 11, 12, 13 ve 14. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra Boston Konut Fiyatları veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayılarını hesapladık.

Veri setinin eğitilecek veri setine ve test veri setine ayrılması

Bu kısımda aşağıdaki R kod bloğunda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.

set.seed(1461)
orneklem<- sample(1:NROW(veri), NROW(veri)*0.7)
train <- veri[orneklem, ]  
test <- veri[-orneklem, ]

Torpalama (Bagging) modelinin kurulması

model<-bagging(medv ~ ., data=train, coob=TRUE, nbagg=500)
print(model)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde kurulan modele ait özet çıktı aşağıda verilmiştir.

Bagging regression trees with 500 bootstrap replications 

Call: bagging.data.frame(formula = medv ~ ., data = train, coob = TRUE, 
    nbagg = 500)

Out-of-bag estimate of root mean squared error:  4.3542 

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- bagging(medv ~ ., data=train, coob=TRUE, nbagg=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$medv, Tahmin=round(tahmin,1))
#ilk ve son 10 tahmin değerini gözlem değerleriyle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gozlemİlk_10=Gozlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GozlemSon_10=Gozlem, TahminSon_10=Tahmin)
formattable(cbind("Sıra"=seq(1,10),ilk10, son10))

#karşılaştırmalı sonuçların xlsx dosyasına yazdırılması
write_xlsx(karsilastirma, "karsılastirma_sonuçları.xlsx")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen ilk ve son 10 tahmin değerleri gözlem değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda xlsx dosyasına yazdırılmıştır. Buradan dosyayı indirerek sonuçları karşılaştırmalı olarak görebilirsiniz.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin grafik üzerinde karşılaştırılması

ggplot(karsilastirma, aes(Gozlem, Tahmin)) +
  geom_point() +
  geom_abline(intercept = 0, slope = 1, size=1.5, color="red")+
  ggtitle("Gözlem Değerleri ve Tahmin Edilen Bagging Regresyon Değerleri")+
  theme_minimal()

#alternatif grafik
ggplot(karsilastirma, aes(Gozlem, Tahmin)) +
  geom_point() +
  geom_abline(intercept = 0, slope = 1, color="red", size=1.5)+
  ggtitle("Gözlem Değerleri ve Tahmin Edilen Bagging Regresyon Değerleri")+
  theme_gray()

Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda şekil üzerinde verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen konut fiyatları tahmin değerleri ile test veri setindeki gözlem değerleri aşağıda alternatif olarak şekil üzerinde verilmiştir.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin regresyon hata metrikleri açısından değerlendirilmesi

Kurulan modele ait regresyon hata metriklerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

mse<-MSE(karsilastirma$Gozlem, karsilastirma$Tahmin)
mape<-MAPE(karsilastirma$Gozlem, karsilastirma$Tahmin)
rmse<-RMSE(karsilastirma$Gozlem, karsilastirma$Tahmin)
sse<-sse(karsilastirma$Gozlem, karsilastirma$Tahmin)
mae<-mae(karsilastirma$Gozlem, karsilastirma$Tahmin)

formattable(round(tibble(SSE=sse, MSE=mse, RMSE=rmse, MAE=mae, MAPE=mape),2))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen regresyon hata metrikleri bir bütün olarak aşağıda verilmiştir. Torbalama (bagging) algoritmasıyla kurulan model test veri seti ile karşılaştırıldığında konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 3,5 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.

Performans Testleri

Bu bölümde kurulan model iki yöntemle tüm veri seti üzerinde test edilmiştir. Kullanılan performans test yöntemleri sırasıyla şöyledir:

  1. Çapraz performans testi (Cross validation test)
  2. Hold out yöntemi

Çapraz performans testi (Cross validation test)

Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve hata oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir.

errorest(medv ~ ., data=veri, model=lm, est.para=control.errorest(random=FALSE))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans metriği aşağıda verilmiştir.Torbalama (bagging) algoritmasıyla kurulan model tüm veri seti ile karşılaştırıldığında konut fiyatlarını yaklaşık % 5,88 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.

Call:
errorest.data.frame(formula = medv ~ ., data = veri, model = lm, 
    est.para = control.errorest(random = FALSE))

	 10-fold cross-validation estimator of root mean squared error

Root mean squared error:  5.877

Hold out yöntemi

Burada modelin performansı Holdout yöntemi ile testi yapılarak tüm veri seti üzerinde test edilir ve hata oranları verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir.

set.seed(61)
bs<- performanceEstimation(
  PredTask(medv ~ ., veri),
    workflowVariants(learner="bagging", learner.pars=list(coob=TRUE, nbagg=500)),
 EstimationTask(metrics = c("mse","rmse", "mae"),
                method = Holdout(nReps=3,hldSz=0.3)))
summary(bs)
plot(bs)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans hata metrikleri aşağıda verilmiştir. Bulgular, torbalama algoritmasının tüm veri seti üzerinde test edildiğinde konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 4,1 kök ortalama kare hatası (RMSE) ile tahmin ettiğini göstermektedir.



##### PERFORMANCE ESTIMATION USING  HOLD OUT  #####

** PREDICTIVE TASK :: veri.medv

++ MODEL/WORKFLOW :: bagging 
Task for estimating  mse,rmse,mae  using
 3 x 70 % / 30 % Holdout
	 Run with seed =  1234 
Iteration :  1  2  3

== Summary of a  Hold Out Performance Estimation Experiment ==

Task for estimating  mse,rmse,mae  using
 3 x 70 % / 30 % Holdout
	 Run with seed =  1234 

* Predictive Tasks ::  veri.medv
* Workflows  ::  bagging 

-> Task:  veri.medv
  *Workflow: bagging 
              mse      rmse       mae
avg     16.855399 4.0947040 2.6861979
std      3.011187 0.3649621 0.2642337
med     16.443337 4.0550385 2.5892506
iqr      2.989967 0.3633419 0.2505401
min     14.071462 3.7511948 2.4841314
max     20.051396 4.4778786 2.9852116
invalid  0.000000 0.0000000 0.0000000

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans hata metrikleri aşağıda şekil üzerinde gösterilmiştir.

Sonuç

Bu çalışmada regresyon (regression) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan torbalama (bagging) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, regresyon probleminin torbalama (bagging) algoritması ile çok başarılı bir şekilde, diğer bir ifadeyle düşük hata oranlarıyla çözüme kavuşturulduğunu göstermektedir.

Torbalama algoritması test verisi üzerinde test edildiğinde konut fiyatlarını yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 3,5 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir. Diğer taraftan kurulan model tüm veri seti üzerinde çapraz performans testi ile test edildiğinde ise konut fiyatlarını yaklaşık % 5,88 kök ortalama kare hatası (RMSE) ile tahmin ediyor iken, kurulan model tüm veri seti üzerinde Hold out yöntemi ile test edildiğinde ise konut fiyatlarını yaklaşık yaklaşık % 2,7 ortalama mutlak hata (MAE) ve yaklaşık % 4,1 kök ortalama kare hatası (RMSE) ile tahmin ettiği görülmektedir.

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

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

Topluluk Öğrenme Algoritmalarından Torbalama Algoritması İle Gögüs Kanserinin Tahmini Üzerine Bir Vaka Çalışması: A Case Study on the Prediction of Breast Cancer Using Bagging Algorithm from Ensemble Learning Algorithms

Giriş

Topluluk (ensemble) öğrenme algoritmaları tahmine dayalı analitik çalışmalarda en başarılı yaklaşımlardan biridir. Bu algoritmalar somut bir problemi çözmek için bir araya gelen modeller setinden oluşmaktadır. Amaç modeller setinin ürettiği tahminleri birleştirerek doğruluğu (accuracy) artırmaktır. Topluluk algoritmaları kendi içerisinde üç grupta ele alınır.

  1. Torbalama (Bagging: Bootsrap Aggregating)
  2. Artırma (Boosting)
  3. İstif (Stacking)

Topluluk (ensemble) öğrenme algoritmalarından biri olan torpalama, ingilizce ifadeyle Bagging, Breiman tarafından 1994 yılında geliştirilen hem sınıflandırma hem de regresyon problemlerinin çözümünde kullanılan makine öğrenmesine dayanan topluluk algoritmasıdır. Torbalama algoritmasının işleyiş süreci Şekil 1’de verilmiştir.

Şekil 1: Torbalama (Bagging) Algoritmasının İşleyiş Süreci

Şekil 1’de belirtilen torbalama algoritmasının işleyiç sürecini adım adım şöyle özetleyebiliriz.

  1. Popülasyon (N) birimlerini eğitilecek (training) veri setine ve test edilecek (testing) veri setine basit tekrarsız tesadüfi örnekleme (simple random sampling without replacement) yöntemiyle ayrılır. Burada literatürde genellikle eğitilecek veri seti seti için popülasyonun % 70’i alınsa da bu oran veri setinin ya da popülasyonun büyüklüğüne göre değişkenlik gösterebilmektedir. Bu oran 70:30 olabileceği gibi, 60:40 veya 80:20 oranı şeklinde de olabilir.
  2. Eğitilecek veri setini belirledikten sonra basit tekrarlı tesadüfi örnekleme yoluyla torbalara (1’den n’e kadar) örneklem birimleri (sample units) atanır.
  3. Örneklem birimleri kurulan modellerde eğitilir.
  4. Regresyon problemini çözüyorsak kurulan modellerden elde edilen sonuçların ortalaması alınarak bağımlı değişken (y) belirlenir. Sınıflandırma problemi çözüyorsak kurulan modellerden elde edilen çoğunluk oylama sonuçlarına göre karar verip y’yi, diğer bir ifadeyle bağımlı değişkeni (dependent variable) tahmin etmiş oluruz.

Modeller oluşturulurken temel amaç, bias ve varyans dengesinin kurulmasıdır. Bu uyumu sağlarsak iyi model uyumu (good-fit) elde etmiş oluruz. Makine öğrenme ve derin öğrenme problemlerinin çözümünde modelleme hatalarına bağlı olarak varyans ve bias değişiklik göstermektedir. Bu iki durum şöyle ele alınabilir:

  1. Eksik model uyumu (under-fitting): Kurulan modelde elde edilen tahmin değerleri gözlem verisine yeterince uyum göstermediğinde ortaya çıkar. Bu durumda varyans düşükken bias yüksektir. Buradan şunu anlamak gerekir: gözlem verisi ile tahmin edilen veri arasındaki fark büyükse, diğer bir deyişle kurulan modelle bağımlı değişken iyi tahmin edilemiyorsa bu durumda under-fitting oluşur. Under-fitting sonraki kısımlarında anlatılan sınıflandırma ve regresyon hata metrikleri ile kolaylıkla ortaya konulabilir.
  2. Aşrı model uyumu (over-fitting): Kurulan modelde eğitilen veri seti (training data set)’yle gözlem verisine aşırı uyum gösterdiğinde ortaya çıkar. Bu durumda varyans yüksekken bias düşüktür.

Bahsedilen bu iki durumu kafamızda daha da canlı tutmak için bias ve varyans ilişkisi Şekil 2’de verilmiştir. Şekil’de biz modeli kurgularken olması gereken durumu gösteren Düşük Varyans-Düşük Bias uyumunu hedefliyoruz. Diğer bir ifadeyle, kurguladığımız model (Şekil 2 1 nolu model) ile gözlem değerlerini olabildiğince en yüksek doğruluk oranı ile tahmin ederken aynı zamanda varyansı düşük tutmayı hedefliyoruz. Buna başardığımızda aslında iyi model uyumunu (good-fit) sağlamış ve iyi bir model kurmuş oluyoruz. Eksik model uyumu (under-fitting)’nda ise Şekil 2’de 3 nolu modelde görüleceği üzere elde edilen tahmin değerleri gözlem değerleri (kırmızı alan)’nden uzaklaşmakla birlikte hala tahmin değerleri ile gözlem değerleri arasında farklar, diğer bir deyişle varyans düşüktür. Aşırı model uyumu (over-fitting)’da ise Şekil 2’de 2 nolu modelde görüleceği üzere varyan yüksek iken bias düşüktür. 2 nolu modelde doğru değerler (gözlem değerleri)’i kurulan modelde yüksek doğrulukla (düşük bias) tahmin edilse de gözlem değerleri ile tahmin değerleri arasındaki varyans yüksektir.

Şekil 2: Bias-Varyans İlişkisi

Veri Tipleri

Torbalama yöntemi ile sınıflandırma problemi çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi nitel ve kategoriktir. Ancak, bu yöntem ile regresyon problemini çözüyorsak bağımlı değişkenin ya da cevap değişkeninin veri tipi niceldir. Veri tipleri kendi içerisinde 4 farklı alt sınıfta ele alınabilir. Bu veri tipleri alt sınıflarıyla birlikte Şekil 3’te verilmiştir.

Şekil 3: Veri Tipleri

Nicel Veri (Quantitative Data)

Şekil 3’te 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.

  1. Sürekli veri (Continous data): 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.
  2. Kesikli veri (Discrete Data): 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 3’te verilen 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 şöyledir:

  1. 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.
  2. 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 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. 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 etkisini tahmin etmeye çalışıyoruz. Buradaki temel felsefeyi anlamak son derece önemlidir. Çünkü bu durum sizin belirleyeceğiniz analiz yöntemini de değiştirecektir.

Kullanılan analiz yöntemi ile kurulan modelde ya sınıflandırma problemini ya da regresyon problemini çözdüğümüzü ifade etmiştik. Ancak kurulan modellerde çözülen problemin sınıflandırma ya da regresyon oluşuna göre performans değerlendirmesi farklılaşmaktadır. Sınıflandırma problemlerinde kullanılan hata metrikleri ile regresyon hata metrikleri aynı değildir. Bu bağlamda ilk olarak sınıflandırma problemlerinin çözümünde kullanılan hata metriklerini ele alalım.

Sınıflandırma Problemlerinde Hata Metrikleri

Karışıklık matrisi (confusion matrix) olarak olarak adlandırılan bu matris 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 metotlarının değerlendirilmesinde sıklıkla kullanıldığı görülmektedir. Tablo 1’de hata metriklerinin hesaplanmasına esas teşkil eden karışıklık matrisi (confisioun matrix) 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.

Tablo 1: Karışıklık Matrisi (Confusion Matrix)

Kaynak: Stanford Üniversitesi

Tablo 1’de TP: Doğru Pozitifleri, FN: Yanlış Negatifleri, FP: Yanlış Pozitifleri ve TN: Doğru Negatifleri göstermektedir.

Şekil 3’te de yer verildiği üzere literatürde sınıflandırma modellerinin performansını değerlendirmede aşağıdaki hata metriklerinden yaygın bir şekilde yararlanıldığı görülmektedir. Sınıflandırma problemlerinin çözümüne yönelik Rastgele Orman Algoritması (RF) kullanarak R’da yapmış olduğum çalışmanın linkini ilgilenenler için aşağıda veriyorum.

R Programlama Diliyle Sınıflandırma Problemlerinin Çözümünde Rastgele Orman Algoritması Üzerine Bir Vaka Çalışması: A Case Study on Random Forest (RF) Algorithm in Solving Classification Problems with R Programming Language

  • 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.

Regresyon Problemlerinde Hata Metrikleri

Regresyon modellerinin performansını değerlendirmede literatürde aşağıdaki hata metriklerinden yaygın bir şekilde yararlanılmaktadır. Regresyon metrikleri eştiliklerinin verilmesi yerine sade bir anlatımla neyi ifade ettiği anlatılacaktır. Böylece formüllere boğulmamış olacaksınız.

  • SSE (Sum of Square Error): Tahmin edilen değerler ile gözlem değerleri arasındaki farkların kareleri toplamını ifade eder.
  • MSE (Mean Square Error): Ortalama kare hatası olarak adlandırılan bu hata tahmin edilen değerler ile gözlem değerleri arasındaki farkların karelerinin ortalamasını ifade eder.
  • RMSE (Root Mean Square Error): Kök ortalama kare hatası olarak adlandırılan bu hata ortalama kare hatasının karekökünü ifade etmektedir.
  • MAE (Mean Absolute Error): Ortalama mutlak hata olarak adlandırılan bu hata türü ise tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerlerinin ortalamasını ifade etmektedir.
  • MAPE (Mean Absolute Percentage Error): Ortalama mutlak yüzdesel hata olarak adlandırılan bu hata türünde ilk olarak tahmin edilen değerler ile gözlem değerleri arasındaki farkların mutlak değerleri hesaplanır. Daha sonra hesaplanan farkları mutlak değerleri mutlak değerleri alınan gözlem değerlerine bölünür. En son durumda ise elde edilen bu değerlerin ortalaması alınır.
  • Bias: Tahmin edilen değerler ile gözlem değerleri arasındaki farkların ortalamasıdır. Bu yönüyle ortalama mutlak hata (MAE)’ya benzemektedir.

Regresyon hata metriklerini anlattıktan sonra daha kalıcı olması ve öğrenilmesi adına hazırladığım excel üzerinde bahsedilen bu metriklerin nasıl hesaplandığı gösterilmiştir. Excel dosyasını aşağıdaki linkten indirebilirsiniz.

Regresyon Metrikleri İndir

Çalışma kapsamında torpalama algoritmasıyla sınıflandırma problemi çözülecektir. Bu amaçla Wisconsin Üniversitesi Hastanesinden alınan Meme Kanseri veri seti kullanılarak bağımlı değişken olan meme kanserinin tipi tahmin edilecektir.

Metodoloji ve Uygulama Sonuçları

Bu bölümde torpalama algoritması kullanılarak meme kanserinin türü (iyi huylu: benign, kötü huylu: malign) tahmin edilmiştir. Diğer bir ifadeyle, bu çalışmada sınıflandırma problemi çözmüş olacağız. Analizde kullanılan veri seti Wisconsin Üniversitesi Hastanelerinde 15 Temmuz 1992 tarihine kadar tedavi görmüş hastalardan alınan meme biyopsi verilerini içermektedir. Biyopsi’den bahsetmişken ne anlama geldiğini de açıklayalım. Biyopsi, vücudun farklı bölgelerinden mikroskop yardımıyla inceleme ve farklı tetkikler yaparak hastalık şüphesi bulunan bölgeden tanı amaçlı hücre ya da doku alma işlemidir. Veri setinde 15 Temmuz 1992’ye kadar 699 hastaya ait meme tümör biyopsi gözlemleri bulunmaktadır. Veri setindeki toplam gözlem sayısı 699, değişken sayısı ise 10 (ID numarası hariç)’dur. Bu veri setine R programlama yazılımında “MASS” paketi içerisinde “biopsy” olarak yer verilmiştir. Ancak veri setinde değişkenlerin adları tam olarak yazılmadığı için R programlama dilinde revize edilmiş ve R programlama dili kullanılarak torpalama (bagging) algoritmasıyla analiz edilmiştir.

  1. Cl.thickness: Kitlenin kalınlığını (clump thickness) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  2. Cell.size: Hücre büyüklüğünün homojenliğini (uniformity of cell size) göstermektedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  3. Cell.shape: Hücre şeklinin bütünlüğünü (uniformity of cell shape) göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  4. Marg.adhesion: Marjinal yapışmayı göstermektedir. Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  5. Epith.c.size Epitel hücre büyüklüğünü (single epithelial cell size) göstermektedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  6. Bare.nuclei: Sitoplazma (hücrenin geri kalanı) ile çevrili olmayan çekirdekler için kullanılan bir terimdir. Bunlar tipik olarak iyi huylu tümörlerde görülür.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  7. Bl.cromatin: Benign (iyi huylu) hücrelerde görülen çekirdeğin muntazam bir “dokusunu” açıklar (bland chromatin). Kanser hücrelerinde kromatin daha kaba olma eğilimindedir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  8. Normal.nucleoli: Nükleoller, çekirdekte görülen küçük yapılardır. Kanser hücrelerinde nükleoller daha belirgin hale gelir.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  9. Mitoses: Mitotik aktivite, hücrelerin ne kadar hızlı bölündüğünün bir ölçüsüdür. Yüksek mitotik aktivite tipik olarak malign tümörlerde görülür.Cevap değişkenleri 1’den 10’a kadar bir ölçekte puanlanmıştır. Veri tipi nicel ve kesiklidir.
  10. Class: Meme kanserinin tipini (iyi huylu mu yoksa kötü huylu mu) göstermektedir. Değişken kategorileri “benign” ve “malignant“, diğer bir deyişle iyi ve kötü huyludur.Veri tipi nitel ve nominal kategoriktir.

Bu kapsamda cevap değişkeni (bağımlı değişken) olan “Class” yani meme kanserinin türü geri kalan 9 bağımsız değişken kullanılarak torpalama algoritmasıyla tahmin edilecektir.Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Şimdi veri setini tanıdıktan sonra adım adım (step by step) analize başlayabiliriz. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Yüklenecek R kütüphaneleri

rm(list=ls())

kütüphaneler = c("dplyr","tibble","tidyr","ggplot2","formattable","readr","readxl","xlsx", "pastecs","fpc", "DescTools","e1071", "DMwR","caret", "viridis","GGally","ggpurr","psych","writexl","ggfortify","explore","MASS", "adabag", "rpart")
 
sapply(kütüphaneler, require, character.only = TRUE)

Ver setinin okunması ve değişkenlerin adlandırılması

veri<-biopsy %>% rename(Cl.thickness=V1, Cell.size=V2, Cell.shape=V3, Marg.adhesion=V4,  Epith.c.size=V5, Bare.nuclei=V6, Bl.cromatin=V7, Normal.nucleoli=V8, Mitoses=V9, Class=class)
veri<-veri[,-1]

Ver setinin xlsx ve csv uzantılı dosyalara yazdırılması

write.csv(veri, "gögüskanseriveriseti.csv")#csv dosyası için
write_xlsx(veri, "gögüskanseriveriseti.xlsx")#xlsx dosyası için

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri seti xlsx ve csv uzantılı dosyalara yazdırılmıştır. Elde edilen veri seti dosyası sadece xlsx uzantılı olarak aşağıdan indirilebilir. Sitem csv dosya yüklemesini desteklemediği için csv uzantılı dosya aşağıda verilememiştir. Ancak yukarıdaki R kod bloğu çalıştırabilir ve csv uzatılı dosya rmd dosyasının bulunduğu klasör içine otomatik olarak kaydedilebilir.

Veri setinin görselleştirilmesi ve tanımlayıcı istatistikler

#veri setindeki ilk 3 değişkenin görselleştirilmesi
veri[,1:3] %>% explore_all()
#veri setindeki 4,5,6 ve 7. değişkenlerin görselleştirilmesi
veri[,4:7] %>% explore_all()
#veri setindeki 8,9 ve 10. değişkenlerin görselleştirilmesi
veri[,8:10] %>% explore_all()

#veri setindeki ilk 10 gözlem
formattable(head(veri,10))

#Eksik gözlemler çıkarıldıktan sonra Pearson korelasyon matrisi 
tamveri<-na.omit(veri)
cor.plot(tamveri[,-10], main="Korelasyon Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 3 değişkenin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 4,5,6 ve 7. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere sadece Bare.nuclei değişkende 16 eksik gözlem (missing data: NA) bulunmaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki 8,9 ve 10. değişkenlerin grafiği aşağıda verilmiştir. Grafikte görüleceği üzere eksik gözlem (missing data: NA) bulunmamaktadır.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki ilk 10 gözlem aşağıdaki tabloda verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra meme kanseri veri setindeki eksik gözlemlerin olduğu 16 satır çıkarılmış, ardından nicel ve kesikli değişkenlere ait Pearson korelasyon matrisi aşağıdaki şekilde verilmiştir. Bağımlı değişken dışındaki değişken çiftleri nicel (sürekli ve kesikli) olduğu için Pearson korelasyon katsayısını hesapladık.

Bağımlı değişken olan tümörün tipi (Class)’ne görer değişkenler arasındaki ilişki

tamveri %>% ggplot(aes(x = Cl.thickness, y = Cell.size, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Cell.shape, y = Marg.adhesion, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Epith.c.size, y = Bare.nuclei, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid( ~Class)

tamveri %>% ggplot(aes(x = Bl.cromatin, y = Normal.nucleoli, color = Class))+
        geom_point(position = position_dodge(0.9)) +
        facet_wrap(Mitoses~Class )

Yukarıdaki R kod bloğunun çalıştırılmasından sonra ilk iki değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 3. ve 4. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 5. ve 6. değişkenin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra 7, 8 ve 9. değişkenlerin tümörün tipine göre kendi aralarındaki ilişki aşağıdaki grafikte verilmiştir.

Veri setinin eğitilecek veri setine ve test veri setine ayrılması

Bu kısımda aşağıdaki R kod bloğunda basit tekrarsız tesadüfi örnekleme (SRS without replacement) yöntemi kullanılarak veri setindeki gözlemlerin % 70’i eğitilecek veri setine, % 30 ise test edilecek veri setine atanmıştır. Veri setinin eğitilecek veri seti ve test veri setine ayrılmasında genel olarak 70:30 kuralı uygulansa da bu kuralın mutlak olmadığı unutulmamalıdır. Veri setindeki gözlem sayısına göre 70:30 kuralı değişiklik gösterebilmektedir. Veri setindeki gözlem sayısı çok azsa 60:40, veri setindeki gözlem sayısı çok fazla ise 80:20 ve hatta 90:10 olabilmektedir. Şimdi soru burada şu olabilir; neden biz 80:20 veya 90:10 olarak belirliyoruz? Genel olarak buna verilebileceğim cevap şu: Eğer çok yüksek gözlem sayıları ile çalışıyorsanız bilgisayar işlemcisine bağlı olarak bu işlemin çok uzun sürmesi kuvvetle muhtemeldir ki bu durumda test veri setinin oranını düşürmek analizinizi hızlandırır ve daha çabuk sonuç alırsınız.

set.seed(1461)
orneklem<- sample(1:NROW(tamveri), NROW(tamveri)*0.7)
train <- tamveri[orneklem, ]  
test <- tamveri[-orneklem, ]

Torpalama (Bagging) modelinin kurulması

model <- bagging(Class ~., data=tamveri, mfinal=500)

Değişkenlerin önem düzeyleri

#önem düzeyi grafiği
importanceplot(model)
önem düzeyi değerleri tablosu
onem<-model$importance
degisken<-names(onem)
agirlik<-as_tibble(as.numeric(onem))
onemduzey<-tibble("Değişken"=degisken, "Önem Düzeyi"=round(agirlik$value,2))

formattable(onemduzey, 
            list(formatter(
              "span", style = ~ style(color = "grey",font.weight = "bold")),
`Önem Düzeyi` = color_bar("#FF6347")
))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri büyükten küçüğe doğru aşağıdaki grafikte verilmiştir.

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen modeldeki değişkenlerin önem düzeyleri değerleriyle birlikte aşağıdaki tabloda verilmiştir. Aşağıdaki tablo yukarıdaki grafiğe göre daha anlamlı olduğu söylenebilir.

Tahmin edilen değerler ile test veri setindeki gözlem değerlerinin karşılaştırılması

model <- bagging(Class ~., data=train, mfinal=500)
tahmin<-predict(model, test)
karsilastirma<-tibble(Gozlem=test$Class, Tahmin=tahmin$class)
#ilk ve son 10 tahmin değerini gerçek değerle karşılaştırma 
ilk10<-head(karsilastirma, 10) %>% rename(Gozlemİlk_10=Gozlem, Tahminİlk_10=Tahmin)
son10<-tail(karsilastirma, 10) %>% rename(GozlemSon_10=Gozlem, TahminSon_10=Tahmin)
formattable(cbind("Sıra"=seq(1,10),ilk10, son10))

Yukarıdaki R kod bloğunun çalıştırılmasından sonra torbalama (bagging) modelinden elde edilen ilk ve son 10 tahmin sınıflandırma değerleri gözlem sınıflandırma değerleri ile birlikte aşağıdaki tabloda karşılaştırmalı olarak verilmiştir.

Karışıklık matrisi (confusion matrix)’nin oluşturulması

cm<tahmin$confusion
plot(cm, type = "heatmap", main="Karışıklık Matrisi")

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisi aşağıda verilmiştir.

             Observed Class
Predicted Class benign malignant
      benign       127         3
      malignant      4        71

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen karışıklık matrisinin grafiği ise aşağıda verilmiştir.

Sınıflandırma Hata parametreleri

Kurulan modele ait hata parametrelerinin elde edilmesine yönelik yazılan R kod bloğu aşağıda verilmiştir.

cm<-confusionMatrix(karsilastirma$Tahmin, karsilastirma$Gozlem)
cm

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen hata metrikleri bir bütün olarak aşağıda verilmiştir. Torbalama (bagging) algoritmasıyla kurulan model meme kanseri türlerini yaklaşık % 97 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı ise 100-97 eşitliğinden yola çıkarak % 3 buluruz. Uyumu gösteren Kappa katsayısı ise bu modelde yaklaşık % 93 (0,93) olup, tahmin edilen tümör türleri ile gözlemlenen tümör türleri arasında mükemmele yakın bir uyum olduğu görülmektedir. Bu bulgu aynı zamanda doğruluk oranını da destekler niteliktedir.

Confusion Matrix and Statistics

           Reference
Prediction  benign malignant
  benign       127         3
  malignant      4        71
                                          
               Accuracy : 0.9659          
                 95% CI : (0.9309, 0.9862)
    No Information Rate : 0.639           
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9262          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9695          
            Specificity : 0.9595          
         Pos Pred Value : 0.9769          
         Neg Pred Value : 0.9467          
             Prevalence : 0.6390          
         Detection Rate : 0.6195          
   Detection Prevalence : 0.6341          
      Balanced Accuracy : 0.9645          
                                          
       'Positive' Class : benign    

Çapraz performans testi (Cross validation test)

Burada modelin performansı çapraz performans testi yapılarak tüm veri seti üzerinde test edilir ve doğruluk oranı verilir. Bu işleme ilişkin yazılan R kod bloğu aşağıda verilmiştir. Bu kısım Bilgisayar işlemcisine bağlı olarak biraz uzun sürebilmektedir. Bu yüzden sabırlı olmakta fayda var 🙂 . Yukarıda karışıklık matrisine göre verilen metrikler test verisine göre elde edilen hata metrikleridir. Yani yukarıda eğitim verisine göre kurulan model test verisi ile karşılaştırılmıştır. Buradaki ayrımı iyi yapmak gerekir.

tamvericv<-bagging.cv(Class ~., data=tamveri, v = 2, mfinal = 500, control=rpart.control(cp=0.01))
tamvericv[-1]
#doğruluk ve hata oranı
dogrulukvehataorani<-paste("Doğruluk Oranı: %",round((1-tamvericv[-1]$error)*100,1),"ve","Hata Oranı: %",round(tamvericv[-1]$error*100,1))
dogrulukvehataorani

Yukarıdaki R kod bloğunun çalıştırılmasından sonra model tüm veri seti üzerinde test edilmiş ve performans parametre değerleri karışıklık matrisi ile birlikte aşağıda verilmiştir. Bulgular, torbalama algoritmasının tüm veri seti üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk oranı ve % 3,5 hata oranı ile tahmin ettiğini göstermektedir.

$confusion
               Observed Class
Predicted Class benign malignant
      benign       429         9
      malignant     15       230

$error
[1] 0.03513909

[1] "Doğruluk Oranı: % 96.5 ve Hata Oranı: % 3.5"

Sonuç

Bu çalışmada sınıflandırma (classification) probleminin çözümüne yönelik topluluk öğrenme algoritmalarından biri olan torbalama (bagging) algoritması kullanılarak ayrıntılı deneysel bir çalışma yapılmıştır. Ortaya konulan bulgular, sınıflandırma probleminin torbalama (bagging) algoritması tarafından çok başarılı bir şekilde, diğer bir ifadeyle çok yüksek bir doğruluk (accuracy) oranıyla çözüme kavuşturulduğu görülmektedir.

Torbalama algoritması test verisi üzerinde test edildiğinde meme kanseri türlerini % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Diğer taraftan tüm veri seti üzerinde test edildiğinde ise meme kanseri türlerini benzer şekilde yaklaşık % 96,5 doğruluk (accuracy) oranı ile tahmin etmektedir. Hata oranı (error rate) 1-Doğruluk Oranı eşitliğinden hem test verisinde hemde tüm verisi setinde % 3,5’tir . Bu hata sınıflandırma hatası (classification error) olarak da nitelendirilebilir.

Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.

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

Ordinal Lojistik Regresyon Üzerine Bir Vaka Çalışması: A Case Study on Ordinal Logistic Regression

Lojistik regresyon analizi yöntemlerinden biri olan ordinal (sıralı) regresyon analiz yöntemi, bağımlı değişkenin ya da cevap değişkeninin
ordinal (sıralı) kategorik 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 ordinal olmasından kasıt kategorik değişkenin bir sıra veya derece belirtmesi anlaşılmalıdır. Ordinal değişken tipi ile nominal değişken tipi karıştılmamalıdır. Ordinal veriler sıra belirtirken nominal verilerde bu tür sıra düzeni bulunmamaktadı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.

  1. 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.
  2. 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.

  1. 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.
  2. 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ı 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 ordinal lojistik regresyon analizi yapılacaktır. Analizde R programlama dili kullanarak analiz adımları R kod bloklarında verilmiştir.

Veri seti Oklahoma Üniversitesinden Mike Crowson’ın kişisel web sitesinden indirilmiştir. Analizde kullanılan veri setini aşağıdaki linkten indirebilirsiniz.

Veri setindeki değişkenlerle öğrenci ilgisinin tahmincileri bulunmaya çalışılmıştır. Ancak bu veri seti senaryo niteliği taşımaktadır. 200 öğrencinin cevaplarından oluşmaktadır. Veri setinde değişkenler şöyledir:

  1. pass: öğrencinin konu testini geçip geçmediğini göstermektedir. Cevap kategorileri iki cevap seçeneğinden oluşmakta olup, öğrenci başarılı ise 1, başarısız ise 0 olarak kodlanmıştır.
  2. masteryg: Değişken sürekli veri tipine sahip olup, öğrencinin yüksek puanlar alması master hedeflerine daha yakın olduğunu göstermektedir.
  3. fearfail: Değişken sürekli veri tipine sahip olup, öğrencinin kaybetme korkusunu göstermektedir. Öğrencinin yüksek puanlar alması kaybetme korkusunu daha da artırmaktadır.
  4. genderid: cinsiyet değişkeni olup dikotomik nominal veri tipine sahiptir. Erkek 0, kadın 1 olarak kodlanmıştır.
  5. interestlev: cevap değişkeni (bağımlı değişken) olan bu değişken ordinal veri tipindedir. interestlev öğrencilerin derse ilgi düzeylerini göstermektedir. Cevap kategorilerinde 1 = düşük ilgi, 2 = orta ilgi, 3 = yüksek ilgi düzeyi olarak kodlanmıştır.

Yüklenecek R kütüphaneleri

gereklipaketler=c("dplyr","tibble","tidyr","ggplot2","readr","readxl","xlsx","officer","aod", "DescTools", "reshape2","MASS", "effects","caret","stargazer", "car")
sapply(gereklipaketler, require, character.only = TRUE)

Ver setinin okunması

Bu kısımda ilk olarak spss uzantılı (vav) veri seti okunmuştur. Ardından cevap değişkeni olan “interestlev” değişkeni ordinal veri türüne dönüştürülmüştür. Veri setinde nitel olması gereken bağımsız değişkenler nominal veri türüne dönüştürülmüştür.

df<- read_csv("olrexample.csv") %>% as_tibble() 
df<-df[, 1:5] %>% mutate(pass=as.factor(pass),masteryg=as.numeric(masteryg), fearfail=as.numeric(fearfail), genderid=as.factor(genderid),interestlev=as.ordered(interestlev))
df

Veri setinin yapısı

Aşağıdaki kod bloğu ile veri setinin yapısı gözden geçirilmiştir.

str (df)#alternatif
glimpse(df)

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 200 gözlem ve 5 değişkenden oluşmaktadır. Modelde bağımlı değişken olarak yer alan değişken “interestlev” olup, kalan değişkenler bağımsız (predictor) değişkenlerdir.

Observations: 200
Variables: 5
$ pass        <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
$ masteryg    <dbl> 79.23879, 91.04159, 113.28733, 67.03985, 90.32525, 8...
$ fearfail    <dbl> 105.00000, 85.76007, 94.69049, 82.00000, 100.01866, ...
$ genderid    <fct> 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0...
$ interestlev <ord> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Kategorik değişkenlerin sıklıkları (n)

freq<-df %>% as_tibble() %>% group_by(genderid, pass, interestlev) %>% 
            summarise(n = n()) %>% spread(key = interestlev, value = n)
formattable(freq)

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. Tablodaki son 3 sütun ilgi düzeyi (interestlev) düzeyi kategorilerini göstermektedir.

genderidpass123
00253116
0181419
1011910
1171931

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.

#veri setindeki kategorik değişkenlerin cevap seçeneklerine etiket ataması yapılması
df1<-df %>% mutate(genderid= ifelse(genderid == 0, "Male", "Female"), pass= ifelse(pass == 0, "Failed", "Passed"),interestlev=ifelse(interestlev==1,"Low", ifelse(interestlev==2,"Medium","High")))
df1

#veri setinin görselleştirlmesi
df1 %>% ggplot(aes(x = fearfail, y = masteryg, color = interestlev))+
        geom_point(position = position_dodge(0.9)) +
        facet_grid(genderid + pass ~ interestlev)

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(df$pass, df$interestlev)#iki kategorik değişken arasındaki ilişki
chisq.test(df$pass, df$genderid)#iki kategorik değişken arasındaki ilişki
chisq.test(df$interestlev, df$genderid)#iki kategorik değişken arasındaki ilişki
SpearmanRho(df$masteryg, df$interestlev)#çıktı değişkeni ordinal kategorik olduğu için
SpearmanRho(df$fearfail, df$interestlev)#çıktı değişkeni ordinal kategorik olduğu için
#sürekli değişken için pearson korelasyon katsayısı hesaplanması
cor.test(df$masteryg, df$fearfail, method="pearson")

#ilişkinin grafik üzerinde gösterimi
ggscatter(df, x = "masteryg", y = "fearfail", 
          add = "reg.line", conf.int = TRUE, 
          cor.coef = TRUE, cor.method = "pearson",
          xlab = "masteryg", ylab = "fearfail")

#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(df$masteryg, ylab = "masteryg")

f<-ggqqplot(df$fearfail, ylab = "fearfail")

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:  df$pass and df$interestlev
X-squared = 16.824, df = 2, p-value = 0.0002222


	Pearson's Chi-squared test with Yates' continuity correction

data:  df$pass and df$genderid
X-squared = 15.661, df = 1, p-value = 7.577e-05


	Pearson's Chi-squared test

data:  df$interestlev and df$genderid
X-squared = 5.5583, df = 2, p-value = 0.06209

[1] 0.2433652
[1] -0.2154034

	Pearson's product-moment correlation

data:  df$masteryg and df$fearfail
t = -2.4893, df = 198, p-value = 0.01362
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.30555780 -0.03633905
sample estimates:
       cor 
-0.1742018 

Sürekli 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.

Ordinal lojistik regresyon (OLR) modelinin oluşturulması

model <- polr(interestlev ~., data = df, Hess=TRUE)#çarpı işareti fonksiyon içerisinde varsa etkileşimleri göstermektedir.
summary(model)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde ordinal lojistik regresyon model çıktısına aşağıda yer verilmiştir.

Call:
polr(formula = interestlev ~ ., data = df, Hess = TRUE)

Coefficients:
             Value Std. Error t value
pass1      0.81999   0.298159   2.750
masteryg   0.02627   0.009369   2.804
fearfail  -0.01523   0.009708  -1.569
genderid1  0.23225   0.287085   0.809

Intercepts:
    Value   Std. Error t value
1|2  0.5216  1.4353     0.3634
2|3  2.2852  1.4439     1.5826

Residual Deviance: 403.3534 
AIC: 415.3534 

Elde edilen sonuçlara göre ordinal lojistik regresyon modeli şöyle yazılabilir.

logit(P(Y≤1))=0.52-0,82∗pass1-(0.03)∗ masteryg -(-0.02)∗ fearfail-(0,23)∗ genderid1

logit(P(Y≤2))=2,29-0,82∗pass1-(0.03)∗ masteryg -(-0.02)∗ fearfail-(0,23)∗ genderid1

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(model, 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:    
             ---------------------------
                     interestlev        
----------------------------------------
pass1                 0.820***          
                       (0.298)          
                                        
masteryg              0.026***          
                       (0.009)          
                                        
fearfail               -0.015           
                       (0.010)          
                                        
genderid1               0.232           
                       (0.287)          
                                        
----------------------------------------
Observations             200            
========================================
Note:        *p<0.1; **p<0.05; ***p<0.01

Modelin güven aralığı

Modeldeki bağımsız değişkenlerin olasılık katsayılarının güven aralığı alt ve üst limit değerlerinin hesaplanması ve bu güven aralığının grafikle çizilmesine yönelik yazılan kod bloğu aşağıdadır.

modelpr<- profile(model)
confint(modelpr)
plot(modelpr)
pairs(modelpr)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modeldeki bağımsız değişkenlerin olasılık katsayıları (-2 Log Likehood) (-2LL)) güven düzeyleri ile birlikte aşağıda verilmiştir.

               2.5 %      97.5 %
pass1      0.238680184 1.409736409
masteryg   0.008100699 0.044916876
fearfail  -0.034434531 0.003705836
genderid1 -0.331557153 0.795942445

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modeldeki bağımsız değişkenlerin olasılık katsayıları güven aralığı ile birlikte aşağıdaki şekilde verilmiştir.

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen modeldeki bağımsız değişkenlerin olasılık katsayıları güven aralığı ile birlikte alternatif olarak aşağıdaki şekilde verilmiştir.

Tahmin edilen olasılık değerleri

model$fitted.values
#yada

model$probs
#yada
predict(model, df, type = "p")

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         2          3
1   0.50972229 0.3487315 0.14154618
2   0.31079693 0.4137674 0.27543564
3   0.22360103 0.4032683 0.37313062
4   0.44444877 0.3790867 0.17646452
5   0.41867790 0.3890649 0.19225719
6   0.50465968 0.3513150 0.14402527
7   0.35731264 0.4070171 0.23567028
8   0.19341534 0.3897166 0.41686803
9   0.27683277 0.4138655 0.30930171
10  0.48207029 0.3623987 0.15553097
11  0.43612937 0.3824463 0.18142437
12  0.27267736 0.4135482 0.31377446
13  0.48970620 0.3587356 0.15155820
14  0.44724076 0.3779310 0.17482827
15  0.26022956 0.4121213 0.32764913
16  0.35651741 0.4071877 0.23629494
17  0.50521330 0.3510342 0.14375246
18  0.34266510 0.4098689 0.24746604
19  0.47369771 0.3663128 0.15998947
20  0.47287768 0.3666903 0.16043205
21  0.39896596 0.3957903 0.20524372
22  0.58528083 0.3064074 0.10831174
23  0.50553599 0.3508704 0.14359363
24  0.23294279 0.4062458 0.36081138
25  0.35192189 0.4081385 0.23993958
26  0.44384967 0.3793329 0.17681746
27  0.49338423 0.3569402 0.14967553
28  0.31600903 0.4133630 0.27062797
29  0.62133002 0.2840778 0.09459223
30  0.50866005 0.3492765 0.14206344
31  0.15239343 0.3595198 0.48808682
32  0.49620528 0.3555498 0.14824487
33  0.44161394 0.3802458 0.17814030
34  0.21754850 0.4010497 0.38140177
35  0.19885748 0.3926407 0.40850180
36  0.36751008 0.4046765 0.22781342
37  0.14239406 0.3496232 0.50798273
38  0.16119885 0.3673396 0.47146160
39  0.17769277 0.3799386 0.44236859
40  0.11592388 0.3174751 0.56660101
41  0.13762508 0.3444965 0.51787841
42  0.13407445 0.3404998 0.52542578
43  0.28969928 0.4143734 0.29592730
44  0.24278818 0.4088299 0.34838194
45  0.11817038 0.3205742 0.56125540
46  0.15089677 0.3581093 0.49099397
47  0.08007606 0.2566985 0.66322546
48  0.20279576 0.3946182 0.40258609
49  0.12691553 0.3319532 0.54113128
50  0.15081222 0.3580288 0.49115894
51  0.10901680 0.3074704 0.58351283
52  0.44286158 0.3797375 0.17740097
53  0.27610273 0.4138153 0.31008193
54  0.27197607 0.4134870 0.31453697
55  0.34910085 0.4086924 0.24220674
56  0.35726375 0.4070276 0.23570863
57  0.29756926 0.4143478 0.28808294
58  0.60627061 0.2935538 0.10017556
59  0.15347118 0.3605205 0.48600832
60  0.27388158 0.4136481 0.31247032
61  0.50059145 0.3533654 0.14604314
62  0.23394931 0.4065355 0.35951520
63  0.47812287 0.3642577 0.15761944
64  0.38774826 0.3992332 0.21301852
65  0.34520858 0.4094186 0.24537285
66  0.38319173 0.4005473 0.21626100
67  0.22199855 0.4027037 0.37529779
68  0.39346020 0.3975164 0.20902337
69  0.37963491 0.4015380 0.21882709
70  0.45830055 0.3732178 0.16848163
71  0.60830302 0.2922870 0.09941000
72  0.42412252 0.3870643 0.18881319
73  0.46686921 0.3694230 0.16370777
74  0.44474393 0.3789652 0.17629088
75  0.17092354 0.3750752 0.45400125
76  0.35091902 0.4083381 0.24074291
77  0.17549425 0.3784043 0.44610150
78  0.23617420 0.4071549 0.35667094
79  0.26562913 0.4128300 0.32154084
80  0.35346811 0.4078253 0.23870662
81  0.21737225 0.4009816 0.38164615
82  0.30874803 0.4138998 0.27735218
83  0.43710905 0.3820573 0.18083366
84  0.36293521 0.4057613 0.23130345
85  0.29791149 0.4143411 0.28774737
86  0.42650258 0.3861711 0.18732628
87  0.52488044 0.3407910 0.13432855
88  0.34567056 0.4093347 0.24499473
89  0.46678588 0.3694605 0.16375361
90  0.27627616 0.4138275 0.30989636
91  0.20937450 0.3976717 0.39295378
92  0.19067206 0.3881558 0.42117212
93  0.16481591 0.3703235 0.46486058
94  0.22940193 0.4051793 0.36541873
95  0.23400555 0.4065515 0.35944295
96  0.13738008 0.3442257 0.51839420
97  0.08196176 0.2604931 0.65754513
98  0.09852379 0.2908078 0.61066843
99  0.11187433 0.3116983 0.57642735
100 0.18054652 0.3818672 0.43758632
101 0.26213323 0.4123872 0.32547954
102 0.10066200 0.2943535 0.60498448
103 0.08551857 0.2674511 0.64703029
104 0.12601898 0.3308353 0.54314576
105 0.11696879 0.3189258 0.56410540
106 0.13767072 0.3445469 0.51778240
107 0.12338391 0.3274862 0.54912987
108 0.12693904 0.3319824 0.54107861
109 0.15966628 0.3660359 0.47429778
110 0.27073769 0.4133734 0.31588891
111 0.16137752 0.3674900 0.47113249
112 0.14365971 0.3509386 0.50540170
113 0.18043963 0.3817962 0.43776418
114 0.09740092 0.2889138 0.61368532
115 0.32613454 0.4123086 0.26155688
116 0.18376245 0.3839567 0.43228087
117 0.12050627 0.3237189 0.55577488
118 0.15183564 0.3589969 0.48916746
119 0.18499825 0.3847365 0.43026529
120 0.11788356 0.3201827 0.56193377
121 0.15305816 0.3601385 0.48680338
122 0.11160775 0.3113093 0.57708297
123 0.19449331 0.3903138 0.41519284
124 0.19928034 0.3928585 0.40786112
125 0.30846876 0.4139167 0.27761459
126 0.37900678 0.4017097 0.21928349
127 0.29425401 0.4143886 0.29135737
128 0.26306333 0.4125108 0.32442591
129 0.47722674 0.3646763 0.15809691
130 0.16566452 0.3710050 0.46333046
131 0.31229799 0.4136609 0.27404116
132 0.46223170 0.3714920 0.16627629
133 0.25965835 0.4120381 0.32830357
134 0.31411673 0.4135210 0.27236232
135 0.39921239 0.3957115 0.20507615
136 0.37496982 0.4027899 0.22224030
137 0.28576046 0.4142921 0.29994741
138 0.20148857 0.3939745 0.40453697
139 0.48191790 0.3624710 0.15561115
140 0.14339543 0.3506655 0.50593911
141 0.20516239 0.3957521 0.39908554
142 0.25426127 0.4111715 0.33456721
143 0.31313222 0.4135981 0.27326964
144 0.24662451 0.4096906 0.34368484
145 0.26850206 0.4131506 0.31834738
146 0.16447957 0.3700515 0.46546896
147 0.34403763 0.4096283 0.24633410
148 0.21955507 0.4018113 0.37863366
149 0.28174457 0.4141425 0.30411290
150 0.20099398 0.3937277 0.40527837
151 0.15719034 0.3638794 0.47893022
152 0.12937876 0.3349693 0.53565190
153 0.09789945 0.2897574 0.61234315
154 0.22238914 0.4028428 0.37476807
155 0.17869453 0.3806237 0.44068179
156 0.11498780 0.3161617 0.56885045
157 0.23672559 0.4073039 0.35597047
158 0.17865025 0.3805936 0.44075617
159 0.10253426 0.2973937 0.60007202
160 0.20620300 0.3962379 0.39755905
161 0.22944019 0.4051913 0.36536854
162 0.31156579 0.4137138 0.27472036
163 0.13501115 0.3415694 0.52341947
164 0.08807997 0.2723048 0.63961520
165 0.07001252 0.2351392 0.69484825
166 0.10231382 0.2970389 0.60064732
167 0.13066169 0.3365086 0.53282971
168 0.19804379 0.3922178 0.40973839
169 0.12369218 0.3278829 0.54842487
170 0.08880130 0.2736485 0.63755018
171 0.08322150 0.2629870 0.65379152
172 0.08988979 0.2756572 0.63445305
173 0.18103205 0.3821883 0.43677970
174 0.07925023 0.2550131 0.66573668
175 0.12174327 0.3253526 0.55290415
176 0.23581135 0.4070558 0.35713285
177 0.20721872 0.3967048 0.39607647
178 0.10130741 0.2954083 0.60328431
179 0.11893678 0.3216146 0.55944859
180 0.22252111 0.4028896 0.37458931
181 0.05880540 0.2083108 0.73288382
182 0.14895077 0.3562387 0.49481052
183 0.08433011 0.2651548 0.65051511
184 0.12627166 0.3311514 0.54257692
185 0.10421519 0.3000729 0.59571193
186 0.18287247 0.3833872 0.43374035
187 0.14144146 0.3486208 0.50993773
188 0.20252758 0.3944871 0.40298530
189 0.13932607 0.3463564 0.51431757
190 0.09545153 0.2855724 0.61897608
191 0.10741266 0.3050405 0.58754688
192 0.15219050 0.3593299 0.48847958
193 0.09469177 0.2842516 0.62105666
194 0.09152896 0.2786394 0.62983167
195 0.09584531 0.2862528 0.61790186
196 0.16977420 0.3742079 0.45601787
197 0.09490074 0.2846159 0.62048335
198 0.15432166 0.3613015 0.48437687
199 0.17850027 0.3804915 0.44100821
200 0.05269823 0.1923085 0.75499327

Model etki testi (Parametre Tahminleri)

Anova testi yardımıyla kurulan modelin etkisi test edilmiştir.

Anova(model)

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: interestlev
         LR Chisq Df Pr(>Chisq)   
pass       7.6594  1   0.005648 **
masteryg   8.0711  1   0.004498 **
fearfail   2.4831  1   0.115074   
genderid   0.6540  1   0.418690   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Üstel Beta (Exponential Beta: Odds Ratio (OR)) Katsayıları

Ordinal lojistik regresyonun yorumlanmasında önemli bir yere sahip üstel Beta katsayı aşağıdaki kod bloğunda hesaplanmıştır.

ci <- confint(model) # default method gives profiled CIs
## OR and CI (Üstel Beta ve Güven Düzeyleri)
exp(cbind(OR = coef(model), ci))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen üstel Beta katsayıları güven düzeyleri ile birlikte aşağıda verilmiştir. Yukarıdaki parametre tahmini ve aşağıdaki bulgular değerlendirildiğinde öne çıkan bulgular şöyledir:

  1. Öğrencilerin cinsiyetinin ve kaybetme korkusunun ilgi düzeyi üzerinde istatistiksel olarak anlamlı bir etkisi bulunmamaktadır (öğrenci cinsiyeti için p=0,418>0,05 ve kaybetme korkusu için p=0,115>0,05)
  2. Öğrencilerin dersten geçme durumu (pass)’nun ilgi düzeyi üzerinde istatistiksel olarak anlamlı bir etkisi bulunmaktadır (p=0,005<0,05). Kaybetme korkusunda bir birimlik artış öğrencilerin ilgi düzeyini 2,27 (OR) kat artırmaktadır.
  3. Öğrencilerin aldıkları puanlar (masteryg) durumunun ilgi düzeyi üzerinde istatistiksel olarak anlamlı bir etkisi bulunmaktadır (p=0,004<0,05). Puanlardaki bir birimlik artış öğrencilerin ilgi düzeyini 1,02 (OR) kat artırmaktadır.
                 OR     2.5 %   97.5 %
pass1     2.2704747 1.2695733 4.094901
masteryg  1.0266182 1.0081337 1.045941
fearfail  0.9848875 0.9661514 1.003713
genderid1 1.2614323 0.7178024 2.216537

Gerçekleşen ve tahmin edilen bağımlı değişken değerleri

Bu çalışma tahmin edilen bağımlı değişken olan ilgi seviyesi (interestlev) kategorileri ile gerçekleşen (veri setindeki) ilgi seviyesi (interestlev) kategorilerinin elde edilmesine yönelik yazılan R kod bloğu aşağıdadır.

tahmin<-as.ordered(predict(model))#kurulan modelden elde edilen tahminler

gercek<-as.ordered(df$interestlev)#veri setindeki gözlemler

karsilastirma<-tibble(Gercek=gercek, Tahmin=tahmin)

ilk10<-head(karsilastirma, 10) %>% rename(Gercekİlk_10=Gercek, Tahminİlk_10=Tahmin)

son10<-tail(karsilatirma, 10) %>% rename(GercekSon_10=Gercek, TahminSon_10=Tahmin)

formattable(cbind(Id=seq(1,10),ilk10, son10)

Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen tahmin edilen ve gerçekleşen bağımlı değişkenin ilk ve son 10 kaydı aşağıdaki tabloda yan yana verilmiştir. Bu kısımdan sonra tahmin edilen bağımlı değişken kategorileri ile veri setindeki bağımlı değişken kategorileri hata matriksi (confusion matrix) ile karşılaştırılarak kurulan modelin hata oranı ortaya konulacaktır.

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

Sınıflandırma modellerinin performansını değerlendirmede aşağıdaki metriklerden yaygın bir şekilde yararlanılmaktadır.

  • Doğruluk (Accuracy): TP+TN / TP+TN+FP+FN eşitliği ile hesaplanır. Modelin genel performansını ortaya koyar.
  • 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 metrik olup, kesinlik (precision) ve geri çağırma (recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.

Ordinal lojistik regresyon metodu sınıflandırma problemlerinin çözümünde kullanıldığı için modelin doğruluğunu ölçümlemek için confusion matris hesaplanmış olup kod bloğu aşağıda verilmiştir.

tahmin<-as.ordered(predict(model))

gercek<-as.ordered(df$interestlev)

cm<-confusionMatrix(tahmin, gercek)
cm

Yukarıdaki kod bloğunun çalıştıırlmasından sonra elde edilen confusion matris çıktılarına aşağıda yer verilmiştir. Modelin bağımlı değişken olan interlev değişkenini doğru tahmin (accuracy) yüzdesi % 49 olup, oldukça düşüktür.

Confusion Matrix and Statistics

          Reference
Prediction  1  2  3
         1 20 13  4
         2 15 29 23
         3 16 31 49

Overall Statistics
                                          
               Accuracy : 0.49            
                 95% CI : (0.4188, 0.5615)
    No Information Rate : 0.38            
    P-Value [Acc > NIR] : 0.0009889       
                                          
                  Kappa : 0.2131          
                                          
 Mcnemar's Test P-Value : 0.0362707       

Statistics by Class:

                     Class: 1 Class: 2 Class: 3
Sensitivity            0.3922   0.3973   0.6447
Specificity            0.8859   0.7008   0.6210
Pos Pred Value         0.5405   0.4328   0.5104
Neg Pred Value         0.8098   0.6692   0.7404
Prevalence             0.2550   0.3650   0.3800
Detection Rate         0.1000   0.1450   0.2450
Detection Prevalence   0.1850   0.3350   0.4800
Balanced Accuracy      0.6390   0.5490   0.6329

Bağımlı değişkenin kategorilerine göre sadece hata parametrelerini verecek olursak aşağıdaki kodu yazmamız yeterli olacaktır.

#Kategori bazında hata parametrelerini görme
class<-cm$byClass#sınıfa göre hata oranları
class<-class %>% as_tibble(class) %>% add_column(Class = 1:3, .before = "Sensitivity")
class1<-class[, c(1, 2,3,6, 7, 8)]
pivot<-class1 %>% pivot_longer(-Class, names_to = "Parameters", values_to = "Value")
library(writexl)#sonuçları excele yazdırma
write.xlsx(pivot, "pivot.xlsx")

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen bağımlı değişkenin kategorilere göre hata parametreleri aşağıdaki tabloda verilmiştir.

SınıfParametrelerDeğer
1Sensitivity0,3922
1Specificity0,8859
1Precision0,5405
1Recall0,3922
1F10,4545
2Sensitivity0,3973
2Specificity0,7008
2Precision0,4328
2Recall0,3973
2F10,4143
3Sensitivity0,6447
3Specificity0,6210
3Precision0,5104
3Recall0,6447
3F10,5698

Yukarıdaki tabloda yer alan hata parametreleri bağımlı değişkenin kategorilerine göre grafikte verilmiş olup, kod bloğu aşağıdadır.

ggplot(pivot, aes(x="", y=Value, group=Class))+
  geom_point(aes(fill=Class))+facet_grid(Class~ Parameters, scales="free", space="free")

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen grafik aşağıda verilmiştir. Kurulan modelin bağımlı değişkeni tahmin etme derecesinin değerlendirilmesinde F1 skoru üzerinden gidilecek olursa en iyi tahmin edilen bağımlı değişken (interestlev=çok yüksek (3)) kategorisinin 3 olarak kodlanan “çok yüksek” ilgi düzeyi olduğu görülmektedir. Burada F1 skoru kesinlik (precision) ve geri çağırma (Recall) skorlarının ağırlıklı ortalamasını ifade etmektedir.

Bağımsız değişkenlerin cevap değişkeni üzerindeki etkisi

Bağımsız değişkenlerin her birinin bağımlı değişken üzerindeki etkisini ölçümlemeye yönelik yazılan R kod bloğu aşağıda verilmiştir.

plot(Effect(focal.predictors = "pass",model))
plot(Effect(focal.predictors = "masteryg",model))
plot(Effect(focal.predictors = "fearfail",model))
plot(Effect(focal.predictors = "genderid",model))

#ikili karşılaştırma
plot(Effect(focal.predictors = c("genderid", "pass"),model))

Yukarıdaki kod bloğunun çalıştırılmasından sonra ilk olarak pass bağımsız değişkeninin interestlev bağımlı değişkeni üzerindeki etkisi aşağıdaki şekilde verilmiştir. Burada pass değişkeninin interestlev değişkenindeki 3. seviyede en yüksek olasılıkla etkilediği görülmektedir. Diğer bir ifade ile öğrencilerin dersten geçmesi derse olan ilgisini en yüksek seviyeye çıkarmıştır.

masteryg bağımsız değişkeninin interestlev üzerindeki etkisi aşağıdaki şekilde verilmiştir. Burada öğrencilerin daha yüksek not alması derslere olan ilgi seviyesine en yüksek seviyeye (3=çok yüksek) çıkarmıştır.

fearfail bağımsız değişkeninin interestlev üzerindeki etkisi aşağıdaki şekilde verilmiştir. Öğrencilerin kaybetme (başarısızlık) korkusu derse olan ilgi seviyesini genel olarak azaltmış olup, bu olasılığın en yüksek olduğu ilgi düzeyi 3. düzeydir.

genderid bağımsız değişkeninin interestlev üzerindeki etkisi aşağıdaki şekilde verilmiştir.Şekilden kadın (1)’ların erkek (0)’lere göre daha yüksek ilgi düzeylerine sahip olduğu anlaşılmaktadır.

İki bağımsız değişkenin ortak etkisi ise aşağıdaki şekilde verilmiştir. Burada seçilen bağımsız değişkenler “genderid” ve “pass” değişkenleridir. Burada, dersten kalan kadınların ilgi düzeyinin erkeklere göre nispeten daha yüksek olduğu görülmektedir. Dersten geçen kadınların ilgi düzeyi ise dersten kalan kadınlarda olduğu gibi erkeklere göre daha yüksektir.

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://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/

Main Landing Page

https://stanford.edu/~shervine/l/tr/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks

https://sites.google.com/view/statistics-for-the-real-world/contents/logistic-regression-models