Bu çalışmada, NELS (National Education Longitudinal Study) veri seti kullanılarak öğrencilerin matematik dersini geçme durumlarını yordayan değişkenler lojistik regresyon yöntemiyle incelenmiştir. Bağımlı değişken olarak matematik geçme durumu (geçti/kaldı) belirlenmiş; cinsiyet, sosyoekonomik düzey (SES) ve denetim odağı (locus of control) yordayıcı değişkenler olarak modele dahil edilmiştir. Öncelikle lojistik regresyonun kuramsal temelleri ele alınmış, ardından R ortamında model kurularak katsayı yorumları, model uyum testleri (Hosmer-Lemeshow, Nagelkerke \(R^2\)), sınıflandırma performansı (karmaşıklık matrisi, doğruluk, duyarlılık, özgüllük) ve ayırt etme gücü (ROC eğrisi, AUC) değerlendirilmiştir.
Lojistik regresyon, Genelleştirilmiş Doğrusal Modeller (GLM) ailesinde yer alan bir istatistiksel yöntemdir. Klasik doğrusal regresyondan en temel farkı, bağımlı (sonuç) değişkenin sürekli değil, iki durumlu (ikili / binary) ya da daha genel olarak ayrık kategorik yapıda olmasıdır.
Doğrusal regresyonda modelin koşullu ortalaması \(-\infty\) ile \(+\infty\) arasında herhangi bir değer alabilir ve hataların normal dağıldığı varsayılır. Lojistik regresyonda ise bağımlı değişkenin koşullu dağılımı binom dağılıma uyar; modelin tahmin ettiği olasılıklar her zaman \([0, 1]\) aralığında sınırlı kalır. Bağımsız değişkenlerle bu kısıtlı olasılık arasındaki ilişki, logit (log-odds) adı verilen özel bir bağlantı fonksiyonu aracılığıyla doğrusal hâle getirilir.
Lojistik regresyonun en yaygın kullanımı ikili bağımlı değişkenlerle ilgilidir: bağımlı değişken yalnızca iki değer alır — incelenen özelliğin varlığını gösteren \(1\) ya da yokluğunu gösteren \(0\) (örneğin; hasta/hasta değil, geçti/kaldı, evet/hayır). Ancak lojistik regresyon yalnızca ikili sonuçlarla sınırlı değildir; ikiden fazla, sıralı (ordinal) veya sırasız (nominal) kategorili bağımlı değişkenler için ordinal ve multinomial lojistik regresyon türleri de vardır.
Lojistik regresyonun temel amacı sınıflandırma yapmak değil, olasılık hesaplamaktır. Sınıflandırma ise bu olasılık tahminlerinin uygulamaya dökülmüş hâlidir.
Lojistik regresyon, klasik doğrusal regresyonun varsayımlarından (hata normalliği, homoskedastisite) farklı, kendine özgü koşullara dayanır.
Bağımlı değişken iki durumlu (evet/hayır, hasta/sağlıklı) olmalıdır. Ordinal veya multinomial uzantılarda ikiden fazla kategori de modellenebilir; ancak her durumda model ayrık (kesikli) bir sonucu hedefler ve tahmin edilen olasılıklar \([0,1]\) arasında kalmalıdır.
Doğrusal regresyondaki hata normalliği varsayımı burada aranmaz. Lojistik regresyonda hata terimlerinin ve koşullu dağılımın binom dağılıma uyduğu kabul edilir.
Veri setindeki gözlemler birbiriyle bağımsız olmalıdır. Tekrarlı ölçümler, mekânsal kümelenmeler veya eşleştirilmiş tasarımlar bu varsayımı ihlal eder. Böyle durumlarda Genelleştirilmiş Tahmin Denklemleri (GEE) veya Karma Modeller (Mixed Models) tercih edilmelidir.
Doğrusal ilişki, bağımsız değişkenlerle sonuç değişkeninin kendisi arasında değil, log-odds (logit) üzerinden kurulur. Sürekli bağımsız değişkenlerin logit üzerindeki etkisinin sabit (doğrusal) olması beklenir. Bu sağlanmıyorsa fraksiyonel polinomlar veya spline dönüşümleri uygulanabilir.
Bağımsız değişkenler arasında güçlü doğrusal ilişkiler olmamalıdır. Çoklu doğrusal bağlantı katsayıların standart hatalarını şişirir ve istatistiksel testlerin güvenilirliğini bozar.
Bağımsız değişkenlerin normal dağılması gerekmez. Kategorik, sürekli veya çarpık dağılımlı değişkenler modelde sorunsuzca kullanılabilir.
Hiçbir bağımsız değişken (veya kombinasyonu), bağımlı değişkeni tamamen ve mükemmel biçimde ayırmamalıdır. Tam ayrışma durumunda maksimum olabilirlik algoritması yakınsamaz ve katsayılar sonsuza gider.
İkili bağımlı değişkene Sıradan En Küçük Kareler (OLS) regresyonu uygulandığında — bu yaklaşıma Doğrusal Olasılık Modeli (LPM) denir — modelin doğasından kaynaklanan temel matematiksel ve istatistiksel sorunlar ortaya çıkar.
Doğrusal regresyon, bağımlı değişkenin koşullu beklenen değerinin bağımsız değişkenlerin doğrusal bir fonksiyonu olduğunu varsayar. Doğrusal bir fonksiyon \((-\infty, +\infty)\) arasında sınırsız uzandığı için, model belirli \(X\) değerlerinde negatif olasılık ya da 1’in üzerinde olasılık üretebilir — olasılık teorisinde bu değerlerin hiçbir mantıksal karşılığı yoktur.
Hataların Normal Dağılımı: \(Y\) yalnızca \(0\) veya \(1\) alabileceğinden hata terimi de yalnızca iki değer alabilir. İki değerden oluşan bir dağılımın normal (çan eğrisi) olması matematiksel olarak imkânsızdır; hatalar binom dağılım gösterir.
Sabit Varyans (Homoscedasticity): İkili sonuçlarda hata varyansı olasılığa doğrudan bağlıdır:
\[\text{Var}(\varepsilon) = p(1-p)\]
Tahmin edilen olasılık \(p = 0.5\) olduğunda varyans maksimuma ulaşır; \(p \to 0\) veya \(p \to 1\) olduğunda sıfıra yaklaşır. Bu, kaçınılmaz bir değişen varyans (heteroscedasticity) sorunudur.
GLM’ler, klasik doğrusal modelin doğal bir uzantısı ve genellemesidir. Klasik regresyon, bağımlı değişkenin sürekli, normal dağılımlı ve ortalama yanıtın bağımsız değişkenlerle doğrusal olarak modellenebilir olduğunu varsayar. Bağımlı değişkenin ikili ya da sayım verisi olduğu durumlarda bu varsayımlar çöker.
GLM, modeli üç temel bileşene ayırarak genişletir:
| Bileşen | Açıklama |
|---|---|
| Rastgele bileşen | Sonucun ait olduğu dağılım ailesi (binom, normal, Poisson vb.) |
| Sistematik bileşen | Bağımsız değişkenlerin doğrusal kombinasyonu: \(\eta = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k\) |
| Bağlantı fonksiyonu | Ortalama yanıtı sistematik bileşene bağlayan \(g(\mu)\) fonksiyonu |
Bağlantı fonksiyonu, bağımlı değişkenin ortalama yanıtı ile regresyon parametrelerinin doğrusal kombinasyonu arasında köprü kurar. Lojistik regresyonda ilgilenilen olayın gerçekleşme olasılığının log-odds (logit) değeri regresyon parametrelerine göre doğrusal olarak modellenir. Bu nedenle lojistik regresyonun varsayılan bağlantı fonksiyonu logit fonksiyonudur.
| Bağımlı Değişken Türü | Model | Dağılım | Bağlantı Fonksiyonu |
|---|---|---|---|
| Sürekli | Klasik Doğrusal Regresyon | Normal | Identity: \(g(\mu) = \mu\) |
| İkili / Kategorik | Lojistik Regresyon | Binom | Logit: \(g(\mu) = \ln\!\left(\frac{\mu}{1-\mu}\right)\) |
| Sayım Verisi | Poisson Regresyonu | Poisson | Log: \(g(\mu) = \ln(\mu)\) |
Logit fonksiyonu, bir olayın gerçekleşme olasılığının (\(p\)) gerçekleşmeme olasılığına (\(1-p\)) olan oranının doğal logaritması alınarak elde edilir:
\[\text{logit}(p) = \ln\!\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x\]
Buradaki \(\dfrac{p}{1-p}\) ifadesi istatistikte odds (olabilirlik oranı) olarak adlandırılır. Dönüşümün mantığı şöyledir:
Bu sayede orijinalinde \([0,1]\)’e sıkışmış bağımlı değişken, bağımsız değişkenlerle doğrusal bir denklem kurabilen log-odds değerine dönüştürülmüş olur.
Lojistik fonksiyon matematiksel olarak şu şekilde tanımlanır:
\[P(Y=1 \mid X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X)}}\]
Bu formülün yapısı sayesinde:
Ancak \(P\) hiçbir zaman \(0\) veya \(1\)’e ulaşamaz. Bu S-şekilli (sigmoid) eğrinin pratik anlamı şöyledir: risk faktörleri belirli bir eşiğe ulaşana kadar olasılık düşük ve yatay seyreder; eşik geçildiğinde olasılık hızla artar; yeterince büyük risk değerlerinde ise eğri 1’in altında tekrar düzleşir ve doyum noktasına (saturation) ulaşır.
Avantaj: \([0,1]\) arasında tanımlı olduğu için sezgisel ve anlaşılırdır.
Sınırlılık: Model doğrusal değildir; bağımsız değişkendeki eşit artışlar olasılıkta eşit değişimlere yol açmaz. \([0,1]\)’e sıkışmış olduğu için sonsuzluğa uzanan doğrusal modellerle doğrudan eşleştirilemez.
Odds, bir olayın gerçekleşme olasılığının gerçekleşmeme olasılığına oranıdır:
\[\text{Odds} = \frac{p}{1-p}\]
Avantaj: Üst sınırı yoktur (\([0, +\infty)\)); “iki kat daha fazla risk” gibi çarpımsal karşılaştırmalar matematiksel olarak anlamlıdır.
Sınırlılık: Alt sınır (\(0\)) hâlâ mevcuttur; üstel yapısı nedeniyle yorumlanması görece zordur.
\[\text{logit}(p) = \ln\!\left(\frac{p}{1-p}\right)\]
Avantaj: \((-\infty, +\infty)\) arasında tamamen sınırsız olduğu için bağımsız değişkenlerle doğrusal bir denklem kurulabilir.
Sınırlılık: Log-odds değerini sezgisel olarak yorumlamak güçtür.
| Dönüşüm | Formül |
|---|---|
| Olasılıktan Odds’a | \(\text{Odds} = \dfrac{p}{1-p}\) |
| Odds’tan Log-odds’a | \(\text{logit}(p) = \ln(\text{Odds})\) |
| Olasılıktan Log-odds’a | \(\text{logit}(p) = \ln\!\left(\dfrac{p}{1-p}\right)\) |
| Log-odds’tan Odds’a | \(\text{Odds} = e^{\,\text{logit}(p)}\) |
| Log-odds’tan Olasılığa | \(p = \dfrac{1}{1 + e^{-\text{logit}(p)}}\) |
| Ölçek | Aralık | Yorumlama | Fonksiyon Yapısı |
|---|---|---|---|
| Olasılık | \([0, 1]\) | Sezgisel, kolay | Doğrusal değil |
| Odds | \([0, +\infty)\) | Görece zor | Üstel |
| Log-odds (Logit) | \((-\infty, +\infty)\) | Sezgisel değil | Doğrusal |
Odds Oranı (OR), lojistik regresyon modelindeki \(\beta\) katsayısının üssü alınarak elde edilir:
\[OR = e^{\beta_1}\]
\(\beta_1\) katsayısı bağımsız değişkendeki 1 birimlik artışın log-odds üzerindeki etkisini verirken; OR bu artışın olayın gerçekleşme odds’unu kaç katına çıkardığını gösterir.
| OR Değeri | Anlam |
|---|---|
| \(OR > 1\) | Bağımsız değişken artıkça odds artar → risk artırıcı faktör |
| \(OR = 1\) | Bağımsız değişkenin etkisi yok (\(\beta = 0\)) |
| \(OR < 1\) | Bağımsız değişken artıkça odds azalır → koruyucu faktör |
Lojistik model doğrusallığı log-odds üzerinden kurduğundan, \(c\) birimlik artışın etkisi basitçe 1 birimlik etkinin \(c\) katı değildir. Doğru hesaplama:
\[OR_c = e^{\,c\,\beta_1}\]
Örneğin \(\beta_1 = -0.058\) ise:
Lojistik regresyon modeli grafik üzerinde S-şekilli (sigmoid) bir eğri olarak temsil edilir. Yatay eksende bağımsız değişken, dikey eksende ise \(P(Y=1 \mid X)\) yer alır. Doğrusal regresyon doğrusuyla aynı grafikte karşılaştırıldığında temel fark açıkça görülür: doğrusal model belirli \(X\) değerleri için \([0,1]\) aralığının dışına çıkarken, sigmoid eğri her koşulda bu sınırlar içinde kalır.
Model uyumunu görsel olarak değerlendirmek için gözlemler, tahmin edilen olasılık skorlarına göre küçükten büyüğe sıralanır ve genellikle 10 eşit gruba (risk ondalıkları / deciles of risk) ayrılır. Her grupta modelin beklediği vaka sayısı ile gerçekte gözlemlenen vaka sayısı karşılaştırılır. Bu yaklaşım Hosmer-Lemeshow (HL) uyum iyiliği testinin temelini oluşturur.
HL testinde \(H_0\) “model veriye uygundur” şeklindedir. Dolayısıyla büyük \(p\)-değeri (\(p > 0.05\)) istenen durumdur; beklenen ile gözlemlenen arasında anlamlı bir fark olmadığı, yani modelin veriye iyi uyduğu anlamına gelir.
Yaygın model uyumu ölçüleri:
Bir modelin uyum iyiliğinin yüksek olması, ayırt etme kapasitesinin de yüksek olduğu anlamına gelmez. Bu iki kavram birbirinden bağımsızdır.
Ayırt etme gücü, modelin gerçek vakaları (\(Y=1\)) vaka olmayanlardan (\(Y=0\)) ne kadar başarılı biçimde ayırt edebildiğini ölçer. Bunun için ROC (Receiver Operating Characteristic) eğrisi kullanılır.
ROC eğrisi, farklı eşik değerleri için hesaplanan Duyarlılık (Sensitivity) ile 1 − Özgüllük (1 − Specificity) değer çiftlerinin grafiğe dökülmesiyle elde edilir.
AUC (Area Under the Curve): ROC eğrisinin altında kalan alan; \([0, 1]\) arasında değer alır.
| AUC Değeri | Yorum |
|---|---|
| \(AUC = 0.5\) | Rastgele tahmin (anlamsız model) |
| \(0.7 \leq AUC < 0.8\) | Kabul edilebilir ayırt etme |
| \(0.8 \leq AUC < 0.9\) | İyi ayırt etme |
| \(AUC \geq 0.9\) | Mükemmel ayırt etme |
Belirli bir eşik değeri kullanılarak modelin sınıflandırma performansı özetlenebilir:
| \(\hat{Y} = 0\) (Tahmin) | \(\hat{Y} = 1\) (Tahmin) | |
|---|---|---|
| \(Y = 0\) (Gerçek) | Doğru Negatif (TN) | Yanlış Pozitif (FP) |
| \(Y = 1\) (Gerçek) | Yanlış Negatif (FN) | Doğru Pozitif (TP) |
Karmaşıklık matrisinden türetilen temel ölçüler:
\[\text{Duyarlılık} = \frac{TP}{TP + FN}, \qquad \text{Özgüllük} = \frac{TN}{TN + FP}, \qquad \text{Doğruluk} = \frac{TP + TN}{TP + TN + FP + FN}\]
Analize başlamak amacıyla ihtiyaç duyulan R paketleri yüklendi. Bu
paketler; SPSS dosyasının okunması (haven), veri
manipülasyonu ve görselleştirme (tidyverse), model
çıktılarının düzenlenmesi (broom), model uyum testleri
(ResourceSelection, DescTools), sınıflandırma
performansı (yardstick), ROC analizi (pROC),
çoklu doğrusal bağlantı kontrolü (car) ve tabloların
estetik sunumu (knitr, kableExtra) için
kullanılmaktadır.
library(haven) # SPSS dosyası okuma
library(tidyverse) # veri manipülasyonu ve görselleştirme
library(broom) # model çıktılarını düzenleme
library(ResourceSelection) # Hosmer-Lemeshow testi
library(DescTools) # Nagelkerke R2
library(yardstick) # karmaşıklık matrisi
library(pROC) # ROC eğrisi ve AUC
library(car) # VIF (çoklu doğrusal bağlantı kontrolü)
library(knitr) # kable ile düzgün tablolar
library(kableExtra) # tablo biçimlendirmeVeri seti, NELS (National Education Longitudinal Study) çalışmasına
ait öğrenci düzeyinde gözlemlerden oluşmaktadır. Dosya SPSS formatında
(.sav) kaydedilmiş olup haven::read_sav()
fonksiyonu ile R ortamına aktarıldı.
haven paketi SPSS dosyalarını okurken değişkenlere özel
etiketli (labelled) sınıflar atamaktadır. Bu etiketler bazı R
fonksiyonlarıyla uyumsuzluk yaratabileceğinden, tüm değişkenler
as.numeric() ile sayısal formata dönüştürüldü.
Okunabilirlik ve yorum kolaylığı sağlamak amacıyla orijinal İngilizce değişken adları Türkçe karşılıklarıyla değiştirildi. Bu adım zorunlu olmasa da analiz boyunca kodun ve çıktıların anlaşılmasını kolaylaştırmaktadır.
veri <- veri |>
rename(
ogrenci_id = stu_id,
cinsiyet = f1sex,
motivasyon = f1stumor,
madde_kullanim = f1subabu,
kontrol_1 = f1cntrl1,
kontrol_2 = f1cntrl2,
okul_tipi = f1s95,
irk = f1race,
ses = f1ses,
odak_merkezi = f1locus2,
oz_kavram_1 = f1cncpt1,
oz_kavram_2 = f1cncpt2,
okuma_puani = f1txrstd,
mat_puani = f1txmstd,
sos_puani = f1txsstd,
fen_puani = f1txhstd,
onceki_okuma = bytxrstd,
onceki_mat = bytxmstd,
onceki_sos = bytxsstd,
onceki_fen = bytxhstd,
mahalle_1 = newhood1,
mahalle_2 = newhood2,
mat_gecti = passmath
)Analizin ilk adımı olarak veri setinin yapısına genel bir bakış
atıldı. head() fonksiyonu ile ilk altı gözlem,
str() ile her değişkenin veri tipi ve örnek değerleri
incelendi. Bu sayede veri setinin boyutu, değişken türleri ve olası
sorunlar hakkında ön bilgi edinildi.
## tibble [300 × 23] (S3: tbl_df/tbl/data.frame)
## $ ogrenci_id : num [1:300] 286132 288885 298842 604445 700074 ...
## $ cinsiyet : num [1:300] 2 2 1 2 2 2 2 2 2 1 ...
## $ motivasyon : num [1:300] -10.15 -6.74 -4.66 -5.41 NA ...
## $ madde_kullanim: num [1:300] -2.59 NA NA 1.54 NA ...
## $ kontrol_1 : num [1:300] NA -3.07 -9 -1.68 NA ...
## $ kontrol_2 : num [1:300] NA -5.76 9.36 3.87 NA ...
## $ okul_tipi : num [1:300] 1 1 1 2 NA 1 NA NA 1 2 ...
## $ irk : num [1:300] 4 4 3 4 2 2 3 4 4 4 ...
## $ ses : num [1:300] 0.797 0.711 -0.395 -0.177 -1.303 ...
## $ odak_merkezi : num [1:300] 0.06 -0.19 0.97 0.07 NA 0.3 NA -0.16 0.52 -1.04 ...
## $ oz_kavram_1 : num [1:300] 0.83 -0.33 1.22 0.06 NA -0.33 NA -1.52 0.43 -0.69 ...
## $ oz_kavram_2 : num [1:300] 0.92 -0.27 0.44 -0.23 NA -0.1 NA -1.32 0.34 -0.85 ...
## $ okuma_puani : num [1:300] 62 49.3 59.8 49.7 NA ...
## $ mat_puani : num [1:300] 65.2 57.2 59.8 48.1 NA ...
## $ sos_puani : num [1:300] 64 59 61.4 44.3 NA ...
## $ fen_puani : num [1:300] 58.7 60.7 49.2 45.1 NA ...
## $ onceki_okuma : num [1:300] 67.5 61.1 56.7 50.4 61 ...
## $ onceki_mat : num [1:300] 59.9 58.7 63 46.7 44.3 ...
## $ onceki_sos : num [1:300] 64.7 55.5 55.7 39.9 51.1 ...
## $ onceki_fen : num [1:300] 57.6 64.3 57.5 46.8 33.7 ...
## $ mahalle_1 : num [1:300] 0.729 1.039 1.331 1.005 NA ...
## $ mahalle_2 : num [1:300] 0.843 1.555 1.813 1.288 NA ...
## $ mat_gecti : num [1:300] 1 1 1 1 NA 0 NA 1 1 0 ...
Modele hangi değişkenlerin dahil edileceğine karar vermek amacıyla her değişkendeki eksik veri miktarı incelendi. Aşağıdaki kod bloğunda her değişken için eksik gözlem sayısı ve yüzdesi hesaplanarak azalan sırada listelendi.
eksik_tablo <- data.frame(
Degisken = names(veri),
Eksik_N = colSums(is.na(veri)),
Eksik_Pct = round(colSums(is.na(veri)) / nrow(veri) * 100, 2)
) |>
arrange(desc(Eksik_Pct))
kable(eksik_tablo,
col.names = c("Değişken", "Eksik (n)", "Eksik (%)"),
caption = "Tablo 1. Değişken Bazında Eksik Veri Dağılımı",
align = "lcc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Değişken | Eksik (n) | Eksik (%) | |
|---|---|---|---|
| madde_kullanim | madde_kullanim | 94 | 31.33 |
| kontrol_2 | kontrol_2 | 72 | 24.00 |
| kontrol_1 | kontrol_1 | 58 | 19.33 |
| okul_tipi | okul_tipi | 58 | 19.33 |
| fen_puani | fen_puani | 51 | 17.00 |
| sos_puani | sos_puani | 49 | 16.33 |
| motivasyon | motivasyon | 48 | 16.00 |
| mat_puani | mat_puani | 46 | 15.33 |
| mat_gecti | mat_gecti | 46 | 15.33 |
| okuma_puani | okuma_puani | 45 | 15.00 |
| mahalle_2 | mahalle_2 | 43 | 14.33 |
| mahalle_1 | mahalle_1 | 40 | 13.33 |
| odak_merkezi | odak_merkezi | 37 | 12.33 |
| oz_kavram_1 | oz_kavram_1 | 37 | 12.33 |
| oz_kavram_2 | oz_kavram_2 | 37 | 12.33 |
| onceki_sos | onceki_sos | 32 | 10.67 |
| onceki_fen | onceki_fen | 32 | 10.67 |
| ses | ses | 30 | 10.00 |
| onceki_mat | onceki_mat | 30 | 10.00 |
| onceki_okuma | onceki_okuma | 29 | 9.67 |
| irk | irk | 5 | 1.67 |
| ogrenci_id | ogrenci_id | 0 | 0.00 |
| cinsiyet | cinsiyet | 0 | 0.00 |
Yukarıdaki eksik veri tablosu incelendiğinde, bazı değişkenlerin
oldukça yüksek eksik veri oranlarına sahip olduğu görüldü (örneğin
madde_kullanim %31, kontrol_2 %24). Bu düzeyde
eksik veri barındıran değişkenlere çoklu atama (multiple imputation)
uygulamak, modele ek bir belirsizlik katacağından ve ödev kapsamında
gereksiz karmaşıklık yaratacağından, bunun yerine eksik veri oranı düşük
ve kuramsal açıdan anlamlı olabilecek değişkenler seçilerek tam veri ile
analiz yaklaşımı tercih edildi.
Seçilen yordayıcı değişkenler:
veri_analiz <- veri |>
select(mat_gecti, cinsiyet, ses, odak_merkezi) |>
drop_na()
cat("Orijinal veri:", nrow(veri), "satır\n")## Orijinal veri: 300 satır
## Analiz verisi: 248 satır
## Çıkarılan satır: 52
Lojistik regresyon modelinde bağımlı değişkenin
(mat_gecti) ve kategorik yordayıcıların
(cinsiyet) faktör olarak tanımlanması gerekmektedir. Bu
amaçla faktör dönüşümü yapılırken referans kategorileri açıkça
belirlendi ve anlamlı etiketler atandı. R’de glm()
fonksiyonu faktörlerin ilk düzeyini otomatik olarak referans kategori
olarak kabul etmektedir; burada “Kaldı” (0) ve “Erkek” (1) referans
kategoriler olarak belirlendi.
Model kurmadan önce verideki genel dağılımı anlamak amacıyla betimsel istatistikler incelendi. Bu adımda bağımlı değişkenin frekans dağılımı, cinsiyete göre çapraz tablo ve sürekli değişkenlerin gruplara göre ortalama ile standart sapma değerleri hesaplandı.
freq_tablo <- as.data.frame(table(veri_analiz$mat_gecti))
names(freq_tablo) <- c("Durum", "Frekans")
freq_tablo$Yuzde <- round(freq_tablo$Frekans / sum(freq_tablo$Frekans) * 100, 1)
kable(freq_tablo,
caption = "Tablo 2. Matematik Geçme Durumu Frekans Dağılımı",
align = "lcc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Durum | Frekans | Yuzde |
|---|---|---|
| Kaldı | 72 | 29 |
| Geçti | 176 | 71 |
capraz <- as.data.frame.matrix(table(veri_analiz$cinsiyet, veri_analiz$mat_gecti))
capraz$Toplam <- rowSums(capraz)
capraz <- cbind(Cinsiyet = rownames(capraz), capraz)
rownames(capraz) <- NULL
kable(capraz,
caption = "Tablo 3. Cinsiyet × Matematik Geçme Durumu Çapraz Tablosu",
align = "lcccc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Cinsiyet | Kaldı | Geçti | Toplam |
|---|---|---|---|
| Erkek | 36 | 78 | 114 |
| Kız | 36 | 98 | 134 |
betimsel <- veri_analiz |>
group_by(mat_gecti) |>
summarise(
n = n(),
SES_Ort = round(mean(ses), 3),
SES_SS = round(sd(ses), 3),
Odak_Merkezi_Ort = round(mean(odak_merkezi), 3),
Odak_Merkezi_SS = round(sd(odak_merkezi), 3)
)
kable(betimsel,
col.names = c("Durum", "n", "SES Ort.", "SES SS",
"Odak Merkezi Ort.", "Odak Merkezi SS"),
caption = "Tablo 4. Sürekli Değişkenlerin Matematik Geçme Durumuna Göre Betimsel İstatistikleri",
align = "lccccc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Durum | n | SES Ort. | SES SS | Odak Merkezi Ort. | Odak Merkezi SS |
|---|---|---|---|---|---|
| Kaldı | 72 | -0.475 | 0.675 | -0.217 | 0.634 |
| Geçti | 176 | 0.254 | 0.733 | 0.111 | 0.621 |
Betimsel incelemeler tamamlandıktan sonra lojistik regresyon modeli
glm() fonksiyonu ile kuruldu. Modelde bağımlı değişken
mat_gecti (Kaldı / Geçti), yordayıcılar ise
cinsiyet, ses ve odak_merkezi
olarak belirlendi. family = binomial argümanı, modelin
binom dağılıma dayalı lojistik regresyon olarak tahmin edileceğini
belirtmekte olup varsayılan bağlantı fonksiyonu logit’tir.
model <- glm(mat_gecti ~ cinsiyet + ses + odak_merkezi,
data = veri_analiz,
family = binomial)
summary(model)##
## Call:
## glm(formula = mat_gecti ~ cinsiyet + ses + odak_merkezi, family = binomial,
## data = veri_analiz)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.9136 0.2345 3.897 9.76e-05 ***
## cinsiyetKız 0.3864 0.3215 1.202 0.2295
## ses 1.4275 0.2457 5.810 6.24e-09 ***
## odak_merkezi 0.7203 0.2560 2.814 0.0049 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 298.81 on 247 degrees of freedom
## Residual deviance: 240.38 on 244 degrees of freedom
## AIC: 248.38
##
## Number of Fisher Scoring iterations: 5
Modelin katsayılarını (estimate), standart hatalarını, z
istatistiklerini ve p-değerlerini %95 güven aralıklarıyla birlikte
düzenli bir tablo olarak sunmak amacıyla broom::tidy()
fonksiyonu kullanıldı. Bu fonksiyon model çıktısını tibble formatına
dönüştürmektedir.
katsayi_tablo <- tidy(model, conf.int = TRUE) |>
mutate(across(where(is.numeric), \(x) round(x, 4)))
kable(katsayi_tablo,
col.names = c("Değişken", "β", "SH", "z", "p", "GA Alt", "GA Üst"),
caption = "Tablo 5. Lojistik Regresyon Model Katsayıları",
align = "lcccccc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Değişken | β | SH | z | p | GA Alt | GA Üst |
|---|---|---|---|---|---|---|
| (Intercept) | 0.9136 | 0.2345 | 3.8965 | 0.0001 | 0.4664 | 1.3892 |
| cinsiyetKız | 0.3864 | 0.3215 | 1.2017 | 0.2295 | -0.2413 | 1.0236 |
| ses | 1.4275 | 0.2457 | 5.8102 | 0.0000 | 0.9685 | 1.9356 |
| odak_merkezi | 0.7203 | 0.2560 | 2.8136 | 0.0049 | 0.2282 | 1.2365 |
Lojistik regresyon sonuçlarına göre, matematikten geçme durumunu yalnızca ses (β = 1.43, p < .001) ve odak_merkezi(β = 0.72, p = .005) anlamlı biçimde yordamaktadır. SES arttıkça ve odak puanı yükseldikçe öğrencinin matematikten geçme olasılığı artmaktadır. Cinsiyet ise anlamlı bir yordayıcı değildir (p = .230).
Lojistik regresyon katsayılarının yorumlanmasında log-odds ölçeği sezgisel olmadığından, katsayıların üssü alınarak Odds Oranı (OR) hesaplandı. \(OR = e^{\beta}\) dönüşümü ile elde edilen değerler, bağımsız değişkendeki 1 birimlik artışın olayın odds’unu kaç katına çıkardığını göstermektedir (Allison, 2012; Kleinbaum ve Klein, 2010). Güven aralığının 1’i içerip içermemesi istatistiksel anlamlılık hakkında ek bir yorum imkânı sunmaktadır.
or_tablo <- tidy(model, conf.int = TRUE, exponentiate = TRUE) |>
select(term, estimate, conf.low, conf.high, p.value) |>
mutate(across(where(is.numeric), \(x) round(x, 3)))
kable(or_tablo,
col.names = c("Değişken", "OR", "GA Alt (%95)", "GA Üst (%95)", "p"),
caption = "Tablo 6. Odds Oranları ve %95 Güven Aralıkları",
align = "lcccc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Değişken | OR | GA Alt (%95) | GA Üst (%95) | p |
|---|---|---|---|---|
| (Intercept) | 2.493 | 1.594 | 4.012 | 0.000 |
| cinsiyetKız | 1.472 | 0.786 | 2.783 | 0.229 |
| ses | 4.168 | 2.634 | 6.928 | 0.000 |
| odak_merkezi | 2.055 | 1.256 | 3.444 | 0.005 |
Odds oranları incelendiğinde, SES’teki bir birimlik artışın matematikten geçme olasılığını yaklaşık 4.17 kat artırdığı görülmektedir (p < .001). Odak merkezi puanındaki bir birimlik artış ise bu olasılığı yaklaşık 2.06 kat artırmaktadır (p = .005). Cinsiyetin odds oranı 1.47 olmakla birlikte güven aralığı 1’i kapsamaktadır (GA: [0.79, 2.78]), dolayısıyla kız ve erkek öğrenciler arasında matematikten geçme olasılığı bakımından anlamlı bir fark yoktur (p = .229).
Lojistik regresyonun varsayımlarından biri olan çoklu doğrusal bağlantı (multicollinearity) durumunu kontrol etmek amacıyla Varyans Şişirme Faktörü (VIF) hesaplandı. Genel kabul gören eşik değerleri: \(VIF < 5\) kabul edilebilir, \(VIF < 2.5\) ise idealdir.
vif_sonuc <- as.data.frame(vif(model))
vif_sonuc <- cbind(Degisken = rownames(vif_sonuc), vif_sonuc)
rownames(vif_sonuc) <- NULL
names(vif_sonuc)[2] <- "VIF"
vif_sonuc$VIF <- round(vif_sonuc$VIF, 3)
kable(vif_sonuc,
col.names = c("Değişken", "VIF"),
caption = "Tablo 7. Varyans Şişirme Faktörleri (VIF)",
align = "lc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Değişken | VIF |
|---|---|
| cinsiyet | 1.021 |
| ses | 1.021 |
| odak_merkezi | 1.001 |
Tüm VIF değerlerinin 5’in (hatta 2.5’un) altında olması, modeldeki bağımsız değişkenler arasında sorunlu bir çoklu doğrusal bağlantı bulunmadığını göstermektedir.
Model uyumu, kurulan modelin gözlemlenen verileri ne ölçüde temsil ettiğini değerlendirmektedir. Bu amaçla iki temel ölçüt kullanıldı.
Hosmer-Lemeshow testi, gözlemleri tahmin edilen olasılıklara göre gruplara ayırarak beklenen ve gözlemlenen frekansları karşılaştırmaktadır. Testin sıfır hipotezi (\(H_0\)): “Model veriye uygundur” şeklindedir; dolayısıyla \(p > 0.05\) değeri modelin veriye iyi uyum sağladığını göstermektedir (Hosmer vd., 2013). Bu amaçla Hosmer-Lemeshow testi uygulandı.
y_tahmin <- fitted(model)
y_gozlem <- as.numeric(veri_analiz$mat_gecti) - 1
hl_test <- hoslem.test(y_gozlem, y_tahmin, g = 10)
hl_test##
## Hosmer and Lemeshow goodness of fit (GOF) test
##
## data: y_gozlem, y_tahmin
## X-squared = 7.0653, df = 8, p-value = 0.5296
Hosmer-Lemeshow testi sonucuna göre model veriye iyi uyum sağlamaktadır (χ² = 7.07, sd = 8, p = .530); p değerinin .05’ten büyük olması, gözlenen ve beklenen frekanslar arasında anlamlı bir fark olmadığını göstermektedir.
Nagelkerke \(R^2\), lojistik regresyon modelinin açıkladığı varyasyon oranının bir yaklaşık tahminidir. Doğrusal regresyondaki \(R^2\)’nin aksine tam bir eşdeğer olmasa da, modelin açıklama gücü hakkında genel bir fikir vermekte ve \([0, 1]\) aralığında değer almaktadır. Bu amaçla Nagelkerke \(R^2\) değeri hesaplandı.
## Nagelkerke
## 0.299765
Nagelkerke R² değeri .30 olarak hesaplanmış olup model, matematikten geçme durumundaki varyansın yaklaşık %30’unu açıklamaktadır. Bu değer, sosyal bilimler bağlamında orta düzeyde bir açıklama gücüne işaret etmektedir.
Model uyumunun ötesinde, modelin pratik sınıflandırma başarısının da değerlendirilmesi gerekmektedir. Bu amaçla modelden elde edilen tahmin olasılıkları 0.5 eşik değeri kullanılarak ikili sınıflandırmaya dönüştürüldü ve bir karmaşıklık matrisi (confusion matrix) oluşturuldu.
veri_analiz <- veri_analiz |>
mutate(
tahmin_olasilik = predict(model, type = "response"),
tahmin_sinif = factor(
ifelse(tahmin_olasilik >= 0.5, "Geçti", "Kaldı"),
levels = c("Kaldı", "Geçti"))
)## Truth
## Prediction Kaldı Geçti
## Kaldı 32 14
## Geçti 40 162
Karmaşıklık matrisinden türetilen temel sınıflandırma metrikleri aşağıda sunulmuştur. Doğruluk (accuracy) modelin genel başarısını; duyarlılık (sensitivity) gerçekte geçen öğrencileri doğru tahmin etme oranını; özgüllük (specificity) ise gerçekte kalan öğrencileri doğru tahmin etme oranını göstermektedir.
metrik_sonuc <- metric_set(accuracy, sensitivity, specificity)(
veri_analiz, truth = mat_gecti, estimate = tahmin_sinif)
kable(metrik_sonuc |>
select(.metric, .estimate) |>
mutate(.estimate = round(.estimate, 3)),
col.names = c("Metrik", "Değer"),
caption = "Tablo 8. Sınıflandırma Performans Metrikleri",
align = "lc") |>
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center")| Metrik | Değer |
|---|---|
| accuracy | 0.782 |
| sensitivity | 0.444 |
| specificity | 0.920 |
Model genel olarak öğrencilerin %78.2’sini doğru sınıflandırmaktadır. Ancak bu başarı dengesizdir: gerçekte geçen öğrencilerin %92’si doğru tahmin edilirken (özgüllük), gerçekte kalan öğrencilerin yalnızca %44.4’ü doğru yakalanabilmektedir (duyarlılık). Başka bir deyişle, model “geçti” demeyi öğrenmekte başarılıyken, risk altındaki (kalan) öğrencileri tespit etmekte görece zayıf kalmaktadır. Bu durumun sebebi ne olabilir bilmiyorum, kaynaklardan da anlayamadım…
Son olarak, modelin ayırt etme gücü ROC (Receiver Operating Characteristic) eğrisi ve AUC (Area Under the Curve) değeri ile değerlendirildi. ROC eğrisi, farklı eşik değerlerinde duyarlılık ve 1−özgüllük değer çiftlerini grafiğe dökmektedir. Eğri sol üst köşeye ne kadar yaklaşırsa model o kadar iyi ayırt etme gücüne sahiptir. AUC değerinin 0.7’nin üzerinde olması kabul edilebilir, 0.8’in üzerinde olması ise iyi bir ayırt etme gücüne işaret etmektedir (Hosmer vd., 2013).
## AUC: 0.791
plot(roc_obj,
col = "steelblue",
lwd = 2,
main = "ROC Eğrisi — Matematik Geçme Durumu",
print.auc = TRUE,
legacy.axes = TRUE)Şekil 1. ROC Eğrisi — Matematik Geçme Durumu
AUC değeri 0.791 olarak elde edilmiştir. Bu değer Hosmer ve arkadaşlarının (2013) sınıflandırmasına göre kabul edilebilir ayırıcılık düzeyinde olmakla birlikte mükemmel ayırt etme (.80 üstü) gücüne koldukça yakındır. ROC eğrisinin köşegen çizginin belirgin şekilde üzerinde seyretmesi, modelin rastgele tahminden önemli ölçüde daha başarılı olduğunu göstermektedir.
Bu ödevi hazırlamadan önce Howel’in kitabının Lojistik regresyom kısmını okudum. Orada lojistikregresyonun çok teknik ve detaylı bir konu olduğuna vurgu yapılarak daha fazla bilgi edinmek için kaynakçada verdiğim üç kaynak öneriliyordu. Bu üç kaynağı temin ederek bu ödevi hazırlamaya çalıştım. Ancak konuyu iyi bilen birinin gözetiminden geçmediği için bazı hususları yanlış anlamış ve yorumlamış olabileceğim konusunda tedirginim. Sonuçları yorumlama ve bazı matamatiksel işlemlerin ne anlama geldiği konularında ciddi kafa karışıklığı yaşıyor olsam da genel olarak lojitik regresyonun mantığını büyük ölçüde kavradığımı düşünüyorum. Örneğin derste yaptığımz örnek üzerinden aşağıda 4 kişilik bir tablo yapıp aklımdaki soruları yansıtmaya çalışacağım:
| Ad | Cinsiyet | Yaş | Kalp Nakli |
|---|---|---|---|
| Ali | Erkek | 60 | Evet |
| Burak | Erkek | 60 | Hayır |
| Cemil | Erkek | 61 | Evet |
| Deniz | Erkek | 61 | Hayır |
Derste yaş katsayısını 3 ve kalp nakli katsayısını 6 bulmuştuk. Buna göre aşağıdaki yorumlar yapılabilir:
Ali ile Burak aynı yaştadır (60), ancak Ali kalp nakli olmuş, Burak olmamıştır. Bu nedenle Ali’nin 5 yıl içinde sağ kalma olasılığı Burak’tan 6 kat daha fazladır.
Ali ile Cemil’in ikisi de kalp nakli olmuştur, ancak Ali 60, Cemil 61 yaşındadır. Bu nedenle Ali’nin sağ kalma olasılığı Cemil’den 3 kat daha fazladır.
Ali (60, nakil olmuş) ile Deniz (61, nakil olmamış) karşılaştırıldığında, Ali hem daha genç hem de kalp nakli olmuş durumdadır. Bu nedenle Ali’nin sağ kalma olasılığı Deniz’den 3 × 6 = 18 kat daha fazladır.
Burak (60, nakil olmamış) ile Cemil (61, nakil olmuş) karşılaştırıldığında, Burak yaşça avantajlı (3 kat) ancak nakil açısından dezavantajlıdır (6 kat). Cemil’in sağ kalma olasılığı Burak’tan 6 ÷ 3 = 2 kat daha fazladır.
Buradaki kat kavramı % oranı olarak mı ele alıyoruz yoksa doğrudan sayı olarak mı gerçekten zihnimde tam oturmadı. Yani 3. sıradaki örnek için Ali’nin 5 yıl yaşama olasılığı Denize2e göre %18 fazladır mı demeliyim yoksa Deniz gibilerden her 18 kişi öldüğünde Ali gibilerden yalnızca bir kişi ölür mü?
Bu tür eksik öğrenme durumlarını sıklıkkla yaşadığım için kendi ders dinleme ve öğrenme stratejimde bir değişiklik yapmam gerektiğine kanaat getirdim. Ders esnasında sürekli nasıl yapılıyor kısmına odaklandığım için neyi niçin yaptığımızı çoğu kez kaçırıyorum ve daha sonra öğrenirken zorlanıyorum.
Motivasyon seminerlerinde çok sık ifade edildiği gibi: “Niçininiz yeterince güçlüyse Nasılını bir şekilde bulursunuz.”
Allison, P. D. (2012). Logistic regression using SAS: Theory and application (2. edt.). SAS Institute Inc.
Hosmer, D. W., Jr., Lemeshow, S. ve Sturdivant, R. X. (2013). Applied logistic regression (3. edt.). John Wiley & Sons.
Kleinbaum, D. G. ve Klein, M. (2010). Logistic regression: A self-learning text (3. edt.). Springer.