Eğer bağımlı değişken ikiden fazla ve sıralı olmayan kategoriye sahipse, multinominal lojistik regresyon kullnılması gerekmeketdir. Bu analiz , bir nominal bağımlı değişken ve bir ya da daha fazla bağımsız değişken arasında ilişkinin açıklanması için kullanılır. Bağımsız değişken kategorik veya sürekli olabilir. Bu analizde kestirim yöntemi maksimum olabilirlik kestirim yöntemidir, ve büyük örneklem gerekmektedir.
Diğer alternatif yöntemler:
Multinomial Probit Regresyon: Bağımsız normal dağılan hata terimlerine sahip olmasıyla multinomial lojistik regresyona benzer bir alternatiftir.
Çok Gruplu Ayırma (Discriminant) Fonksiyonu Analizi: Çok kategorili (multinomial) sonuç değişkenleri için kullanılan çok değişkenli (multivariate) bir yöntemdir.
Her bir sonuç çifti için ayrı ayrı Çoklu İkili (Binary) Lojistik Regresyon analizleri yapmak: Bu yaklaşımın bir sorunu, her bir analizin potansiyel olarak farklı bir örneklem (alt grup) üzerinde yürütülmesidir. Diğer bir sorun ise, lojistik modelleri matematiksel olarak kısıtlamadan yapıldığında, olası tüm sonuç kategorilerini seçme olasılıklarının toplamının 1’den büyük çıkabilme riskidir.
Kategori sayısını ikiye düşürmek (birleştirmek) ve ardından ikili lojistik regresyon yapmak: Bu yaklaşım ciddi bir bilgi kaybına (loss of information) neden olur ve araştırmanın orijinal sorularını bambaşka sorulara dönüştürür. Kesinlikle tavsiye edilmez.
Sıralı (Ordinal) Lojistik Regresyon: Eğer sonuç (bağımlı) değişkeni gerçekten sıralı bir yapıdaysa ve veri “orantılı odds” (proportional odds) varsayımını karşılıyorsa, ordinal lojistik regresyona geçmek modeli çok daha sade ve tutumlu (parsimonious) hale getirecektir.
** Multinomial Lojistik Regresyonda Dikkat Edilmesi Gereken Hususlar: **
İlişkisiz Seçeneklerin Bağımsızlığı (Independence of Irrelevant Alternatives - IIA) Varsayımı: analize yeni alternatif sonuç kategorileri eklemenin veya mevcutları çıkarmanın, kalan sonuçlar (kategoriler) arasındaki odds (şans) oranlarını etkilemediği anlamına gelir
Model Tanılama (Diagnostics) ve Uyum İyiliği (Model Fit): Model: Uç değerleri (outliers) veya etkili veri noktalarını (influential data points) tespit etmek amacıyla, her bir bağımlı değişken kategorisi için ayrı ikili lojit modelleri çalıştırılabilir ve tanılama araçları bu ayrık modeller üzerinde tek tek kullanılabilir.
Örneklem Büyüklüğü (Sample Size): Multinomial regresyon, parametre kestiriminde En Çok Olabilirlik (Maximum Likelihood Estimation - MLE) yöntemini kullandığından büyük bir örneklem hacmi gerektirir.
Tam veya Yarı-Tam Ayrışma (Complete or Quasi-complete Separation): Tam ayrışma, sonuç değişkeninin bir yordayıcı değişkeni tamamen ayırması ve bu yordayıcı değişkenin bağımlı değişkeni kusursuz (mükemmel) bir şekilde tahmin etmesine yol açması durumudur. Modelin parametre kestirimleri sonsuz değerlere yaklaşır.
Boş Hücreler veya Küçük Hücreler (Empty or Small Cells): Kategorik yordayıcılar ile sonuç değişkeni arasında çapraz tablolar oluşturarak “boş” veya “çok az gözlem içeren” hücreler olup olmadığını mutlaka kontrol etmelisiniz. Eğer bir hücrede çok az vaka (gözlem) varsa, model kararsız (unstable) hale gelebilir, standart hatalar şişebilir veya analiz hiç çalışmayabilir.
Titanic veri seti üzerinden bir örnek deneme yaptım.
library(titanic)
library(nnet)
library(dplyr)
library(crosstable)
library(ggplot2)
data(titanic_train)
str(titanic_train)
## 'data.frame': 891 obs. of 12 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr "male" "female" "female" "female" ...
## $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr "" "C85" "" "C123" ...
## $ Embarked : chr "S" "C" "S" "S" ...
Analiz için değişkenleri şu şekilde seçtim: - Bağımlı değişken: Pclass - Bağımsız değişkenler: Sex ve Age
# eksik veri kontrolü : sadece Age değişkeninde eksik veri var, diğer değişkenlerde eksik veri yok.
colSums(is.na(titanic_train))
## PassengerId Survived Pclass Name Sex Age
## 0 0 0 0 0 177
## SibSp Parch Ticket Fare Cabin Embarked
## 0 0 0 0 0 0
# Değişkenlerin faktör yapılması ve eksik verileri filtreleme
titanic_verisi <- titanic_train %>%
mutate(Pclass = factor(Pclass, labels = c("1.Sinif", "2.Sinif", "3.Sinif")),
Sex = factor(Sex)) %>%
filter(!is.na(Age))
# Çapraz tablo
crosstable(titanic_verisi, c(Pclass), by=Sex) %>%
as_flextable(keep_id=TRUE)
.id | label | variable | Sex | |
|---|---|---|---|---|
female | male | |||
Pclass | Pclass | 1.Sinif | 85 (45.70%) | 101 (54.30%) |
2.Sinif | 74 (42.77%) | 99 (57.23%) | ||
3.Sinif | 102 (28.73%) | 253 (71.27%) | ||
# gruplara göre betimsel istatistik
titanic_verisi %>%
group_by(Pclass) %>%
summarise(n = n(),
ort_yas = mean(Age),
sd_yas = sd(Age))
titanic_verisi %>%
group_by(Sex) %>%
summarise(n = n(),
ort_yas = mean(Age),
sd_yas = sd(Age))
# Faktörleştirme ve Etiketleme
# Bağımlı değişken: Pclass
titanic_verisi$Pclass_f <- factor(titanic_verisi$Pclass,
labels = c("1.Sinif", "2.Sinif", "3.Sinif"))
# Bağımsız değişken: Sex
titanic_verisi$Sex_f <- factor(titanic_verisi$Sex,
labels = c("Kadin", "Erkek"))
# Referans kategori belirle
# Bağımlı değişken için referans: 1. Sınıf
titanic_verisi$Pclass_f <- relevel(titanic_verisi$Pclass_f, ref = "1.Sinif")
# Bağımsız değişken için referans: Kadin
titanic_verisi$Sex_f <- relevel(titanic_verisi$Sex_f, ref = "Kadin")
library(sjmisc)
library(sjPlot)
library(nnet)
# Model kur
model_titanic <- multinom(Pclass_f ~ Sex_f + Age, data = titanic_verisi)
## # weights: 12 (6 variable)
## initial value 784.409174
## iter 10 value 676.047360
## final value 676.047342
## converged
summary(model_titanic)
## Call:
## multinom(formula = Pclass_f ~ Sex_f + Age, data = titanic_verisi)
##
## Coefficients:
## (Intercept) Sex_fErkek Age
## 2.Sinif 1.213673 0.3280973 -0.04327821
## 3.Sinif 2.320590 1.0768190 -0.07498065
##
## Std. Errors:
## (Intercept) Sex_fErkek Age
## 2.Sinif 0.2962898 0.2225052 0.007976267
## 3.Sinif 0.2765219 0.2095266 0.007770879
##
## Residual Deviance: 1352.095
## AIC: 1364.095
# Wald testi uygulaması
# 1. Z skorlarını hesaplayalım (Katsayı, Standart Hataya bölme)
z_skorlari <- summary(model_titanic)$coefficients / summary(model_titanic)$standard.errors
# 2. P-değerlerini hesaplayalım (İki yönlü test)
p_degerleri <- (1 - pnorm(abs(z_skorlari), 0, 1)) * 2
# 3. Sonuçları ekrana yazdıralım
print(p_degerleri)
## (Intercept) Sex_fErkek Age
## 2.Sinif 4.199198e-05 1.403308e-01 5.76719e-08
## 3.Sinif 0.000000e+00 2.757708e-07 0.00000e+00
# Tüm p-değerlerini ve Odds Ratio'ları tek tabloda gör
tab_model(model_titanic, show.p = TRUE, transform = "exp")
| Pclass f | ||||
|---|---|---|---|---|
| Predictors | Odds Ratios | CI | p | Response |
| (Intercept) | 3.37 | 1.88 – 6.02 | <0.001 | 2.Sinif |
| Sex f [Erkek] | 1.39 | 0.90 – 2.15 | 0.141 | 2.Sinif |
| Age | 0.96 | 0.94 – 0.97 | <0.001 | 2.Sinif |
| (Intercept) | 10.18 | 5.92 – 17.52 | <0.001 | 3.Sinif |
| Sex f [Erkek] | 2.94 | 1.95 – 4.43 | <0.001 | 3.Sinif |
| Age | 0.93 | 0.91 – 0.94 | <0.001 | 3.Sinif |
| Observations | 714 | |||
| R2 / R2 adjusted | 0.091 / 0.089 | |||
Denklemler
Sınıf vs. 1. Sınıf Denklemi:\[\ln\left(\frac{P(\text{2.Sınıf})}{P(\text{1.Sınıf})}\right) = 1.213 + 0.328(\text{Erkek}) - 0.043(\text{Yaş})\]
Sınıf vs. 1. Sınıf Denklemi:\[\ln\left(\frac{P(\text{3.Sınıf})}{P(\text{1.Sınıf})}\right) = 2.320 + 1.076(\text{Erkek}) - 0.074(\text{Yaş})\]
Yorumlar
İkinci Sınıf için (-0.043): Cinsiyet kontrol altına alındığında, yaştaki her 1 yıl arttığında, 1. sınıfa kıyasla 2. sınıfta olma log-odds değerinde 0.043 birim azalır. Bu katsayı istatistiksel olarak anlamlıdır.
Üçüncü Sınıf için (-0.074): Benzer şekilde yaş arttıkça, 3. sınıfta olma log-odds’u 0.074 birim azalmaktadır. Bu katsayı istatistiksel olarak anlamlıdır.
Birinci Sınıf vs.İkinci Sınıf (0.328): Yaş sabit tutulduğunda, kadınlara kıyasla erkeklerin 2. sınıfta olma log-odds’u 0.328 birim daha fazladır. Bu katsayı istatistiksel olarak anlamlı değildir.
Birinci Sınıf vs. Üçüncü. Sınıf (1.076): Yaş sabit tutulduğunda, kadınlara kıyasla erkeklerin 3. sınıfta olma log-odds’u 1.076 birim daha fazladır. Bu katsayı istatistiksel olarak anlamlıdır.
exp(coef(model_titanic))
## (Intercept) Sex_fErkek Age
## 2.Sinif 3.365826 1.388324 0.9576449
## 3.Sinif 10.181676 2.935328 0.9277614
Yorumlar
ikinci Sınıf için (0.957): Yaş değişkenindeki bir birimlik (1 yıl) artış için, 1. sınıfa kıyasla 2. sınıfta yer almanın göreli risk oranı 0.957’dir. Değer 1’den küçük olduğu için, yaş arttıkça 2. sınıfa yerleşme şansının 1. sınıfa göre daha az.
üçüncü Sınıf için (0.927): Yaş değişkenindeki bir birimlik artış için, 1. sınıfa kıyasla 3. sınıfta yer almanın göreli risk oranı 0.927’dir. Yaş arttıkça 3. sınıfta yer alma şansı, 1. sınıfa göre %7.3 (1 - 0.927 = 0.073) oranında azalmaktadır.
üçüncü Sınıf için (2.935): Kadınlara kıyasla erkekler, 1. sınıfa kıyasla 3. sınıfta yer almanın göreli risk oranı 2.935’tir. Yani yaş sabit tutulduğunda, erkek yolcuların 3. sınıfta yer alma şansı, kadın yolculara kıyasla yaklaşık 3 kat (2.93 kat) daha fazladır.
# Her bir yolcunun 1, 2 ve 3. sınıfta olma olasılığını hesapla
head(pp <- fitted(model_titanic))
## 1.Sinif 2.Sinif 3.Sinif
## 1 0.1170205 0.2110298 0.6719497
## 2 0.4465661 0.2902343 0.2631995
## 3 0.2823434 0.3084513 0.4092053
## 4 0.4035369 0.2986295 0.2978335
## 5 0.2384448 0.2449786 0.5165766
## 6 0.5069179 0.2288567 0.2642254
# 1. satır yorumu
# Model bu yolcunun en yüksek ihtimalle (%67.2 olasılıkla) 3. Sınıf yolcusu olduğunu tahmin etmektedir.
Değişkenlerin Yordanan Olasılıklar Üzerindeki Etkisinin İncelenmesi
# Yaşı tüm yolcuların yaş ortalamasında sabitleme
ortalama_yas <- mean(titanic_verisi$Age, na.rm = TRUE)
yeni_veri <- data.frame(Sex_f = c("Kadin", "Erkek"),
Age = ortalama_yas)
# Bu iki yolcu için olasılıkları hesapla
tahmin_olasiliklari <- predict(model_titanic, newdata = yeni_veri, type = "probs")
# Sonuçlar
cbind(yeni_veri, tahmin_olasiliklari)
# 1. Adım: Yaş 0-80 arası ve her iki cinsiyet için grid oluşturma
yeni_veri_grid <- expand.grid(
Age = seq(from = 0, to = 80, by = 1),
Sex_f = c("Kadin", "Erkek")
)
# 2. Adım: Modeli kullanarak bu grid için olasılıkları tahmin etme
olasiliklar_grid <- predict(model_titanic, newdata = yeni_veri_grid, type = "probs")
# 3. Adım: Verileri birleştirme
tahmin_verisi <- cbind(yeni_veri_grid, olasiliklar_grid)
library(tidyr)
# Veriyi "geniş" formattan "uzun" (long) formata çeviriyoruz
tahmin_uzun <- tahmin_verisi %>%
pivot_longer(
cols = c("1.Sinif", "2.Sinif", "3.Sinif"),
names_to = "Sinif",
values_to = "Olasilik"
)
ggplot(tahmin_uzun, aes(x = Age, y = Olasilik, color = Sex_f)) +
geom_line(size = 1.2) +
facet_wrap(~ Sinif) +
labs(title = "Cinsiyete Göre Yaşın Bilet Sınıfı Olasılıkları Üzerindeki Etkisi",
subtitle = "Titanic Multinomial Lojistik Regresyon Görselleştirmesi",
x = "Yaş (Age)",
y = "Yordanan Olasılık",
color = "Cinsiyet") +
theme_minimal()
Yaş açısından değerlendirme:
Cinsiyet açısından değerlendirme:
Dezavantaj: Erkeklerin çizgisi 3. sınıf panelinde her zaman kadın çizgisinin üzerinde. Bu, aynı yaştaki bir erkeğin 3. sınıfta olma olasılığının, bir kadına göre her zaman daha yüksek olduğunu gösterir.
Avantaj: Kadınların çizgisi, 1. sınıf panelinde her zaman üstte. Yani kadın yolcuların, erkeklere göre her yaş grubunda 1. sınıfta bulunma ihtimali daha yüksek.
Paralellik: Çizgilerin birbirine çok yakın olması ve paralel seyretmesi, yaşın etkisinin her iki cinsiyet için de benzer yönde (yaşlandıkça üst sınıfta bulunma) olduğunu gösteriyor.
En son dersimizde, bağımlı değişkenin ikiden fazla kategoriye sahip olduğu durumlarda kullanılan Multinomial Lojistik Regresyon (MLR) analizinin teorik altyapısını ve R üzerinde nasıl uygulanacağını öğrendim.Lojistik regresyona göre bir tık daha karışık geldi. Titanic veri setiyle yaptığım uygulama anlamama biraz daha yardımcı oldu. Log-odds değerlerini ve Relative Risk Ratios sonuçlarını yorumlamak kısmı kafa karıştırıcı geliyor sonuçlara ilk baktığımda. Multinomial Lojistik Regresyon, özellikle eğitim araştırmalarında öğrencilerin bölüm tercihleri araştırmalarında belki yararlanılabilir diye düşünüyorum.