Öğrenme Günlüğüm

Bu hafta çoklu lojistik regresyon ve multinominal lojistik regresyon konularına yönelik uygulamalar yaptım. Multinominal lojistik regresyon uygulaması için başlangıçta penguins veri seti ile çalıştım; ancak bu veri setinde elde edilen sonuçların analiz amacına tam olarak uygun olmaması nedeniyle, derste kullandığımız hsbdemo veri seti üzerinden farklı bir model kurdum.

Çoklu lojistik regresyon kapsamında ise Titanic veri seti ile çalıştım. bağımlı değişken olarak hayatta kalma durumu, bağımsız değişkenler olarak ise yolculuk sınıfı, cinsiyet, yaş ve bilet ücreti değişkenlerini kullanarak model kurdum.

Model sonuçlarını değerlendirirken katsayıların anlamlılığını p-değerleri üzerinden inceledim ve odds oranlarını kullanarak değişkenlerin etkilerini yorumladım. Ayrıca modelin performansını değerlendirmek amacıyla tahmin edilen olasılık değerleri üzerinden sınıflama yaparak doğruluk oranını ve yanlış sınıflandırma hatasını hesapladım. Model uyumunu incelemek için Hosmer–Lemeshow testini uyguladım. Test sonucu modelin veri ile tam uyum sağlamadığını gösterdi, bununla birlikte modelin sınıflama başarısının iyi düzeydeydi. Modeli iyileştirmek için değişkenler ekledim, çıkardım, etkileşim ekledim ancak HL Testi p değeri yükselmedi.

Ayrıca kıymetli hocam, sınavla ilgili küçük bir not düşmek istedim. Hangi soru hatırlamıyorum ama çıktı tablosunda bol sıfırlı p-değerleri vardı ve o anda p-değerinin .05 mi yoksa .005 mi olduğu zihnimde aniden flulaştı.Kendime de inanamadım, “nasıl yani?” dedim. Başımı kaldırıp düşündüm, hatta kısa bir nefes egzersizi yaparak toparlanmaya çalıştım; ancak krizi aşamayıp muhtemelen .005 üzerinden yorumladım. Bu “anlam krizinin” sınav anı psikolojisinden kaynaklandığını belirtmek istedim, olumsuz bir izlenim oluşturmamasını temenni ederim.

Çoklu Lojistik Regresyon

Bu çalışmada, bireylerin hayatta kalma durumunu etkileyen faktörlerin belirlenmesi amacıyla çoklu lojistik regresyon analizi uygulanmıştır. Analiz kapsamında, bireylerin demografik ve ekonomik özelliklerinin hayatta kalma olasılığı üzerindeki etkileri incelenmiştir.

Kullanılan veri seti, Titanic gemisinde bulunan yolculara ait bilgileri içermektedir. Veri seti, yolcuların demografik özellikleri ile seyahat koşullarına ilişkin değişkenleri kapsamaktadır.

Analizde kullanılan bağımlı değişken, bireyin hayatta kalma durumunu ifade eden Survived değişkenidir. Bu değişken ikili (binary) yapıda olup, 0 = hayatta kalmadı ve 1 = hayatta kaldı şeklinde kodlanmıştır.

Modelde yer alan bağımsız değişkenler:

Pclass: Yolcunun seyahat ettiği sınıfı (1., 2. veya 3. sınıf) göstermektedir. Sex: Yolcunun cinsiyetini (kadın/erkek) ifade etmektedir. Age: Yolcunun yaşını göstermektedir. Fare: Yolcunun ödediği bilet ücretini temsil etmektedir.

Bu değişkenler aracılığıyla bireylerin hayatta kalma olasılıklarını etkileyen faktörler incelenmiştir.

library(titanic)
## Warning: package 'titanic' was built under R version 4.5.3
data("titanic_train")

df <- titanic_train

str(df)
## '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" ...
names(df)
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Cabin"       "Embarked"
summary(df)
##   PassengerId       Survived          Pclass          Name          
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000   Length:891        
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000   Class :character  
##  Median :446.0   Median :0.0000   Median :3.000   Mode  :character  
##  Mean   :446.0   Mean   :0.3838   Mean   :2.309                     
##  3rd Qu.:668.5   3rd Qu.:1.0000   3rd Qu.:3.000                     
##  Max.   :891.0   Max.   :1.0000   Max.   :3.000                     
##                                                                     
##      Sex                 Age            SibSp           Parch       
##  Length:891         Min.   : 0.42   Min.   :0.000   Min.   :0.0000  
##  Class :character   1st Qu.:20.12   1st Qu.:0.000   1st Qu.:0.0000  
##  Mode  :character   Median :28.00   Median :0.000   Median :0.0000  
##                     Mean   :29.70   Mean   :0.523   Mean   :0.3816  
##                     3rd Qu.:38.00   3rd Qu.:1.000   3rd Qu.:0.0000  
##                     Max.   :80.00   Max.   :8.000   Max.   :6.0000  
##                     NA's   :177                                     
##     Ticket               Fare           Cabin             Embarked        
##  Length:891         Min.   :  0.00   Length:891         Length:891        
##  Class :character   1st Qu.:  7.91   Class :character   Class :character  
##  Mode  :character   Median : 14.45   Mode  :character   Mode  :character  
##                     Mean   : 32.20                                        
##                     3rd Qu.: 31.00                                        
##                     Max.   :512.33                                        
## 
nrow(df)
## [1] 891

Eksik Veri

library(naniar)
## Warning: package 'naniar' was built under R version 4.5.3
prop_miss(df)
## [1] 0.01655443
df %>% is.na() %>% colSums()
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0           0           0           0           0         177 
##       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
##           0           0           0           0           0           0

Kayıp veri analizi sonucunda veri setindeki toplam eksik veri oranının yaklaşık %1.66 olduğu belirlenmiştir. Değişkenler bazında yapılan incelemede, eksik değerlerin yalnızca yaş değişkeninde olduğu ve 177 gözlem için veri bulunmadığı görülmüştür. Veri setinde 891 gözlem bulunmaktadır.Eksik veri oranı yaklaşık %20 olduğu için liste bazlı silme yönteminin uygulanması önemli ölçüde veri kaybına yol açacağından, bu yöntem tercih edilmemiştir. Bunun yerine, veri setinin bütünlüğünü korumak amacıyla eksik değerler ortalama ile tamamlanmıştır.

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
df <- df %>%
  group_by(Sex, Pclass) %>%
  mutate(Age = ifelse(is.na(Age), mean(Age, na.rm = TRUE), Age)) %>%
  ungroup()
colSums(is.na(df))
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0           0           0           0           0           0 
##       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
##           0           0           0           0           0           0

Model Kurma

model <- glm(Survived ~ Pclass + Sex + Age + Fare, 
             data = df, 
             family = binomial)

summary(model)
## 
## Call:
## glm(formula = Survived ~ Pclass + Sex + Age + Fare, family = binomial, 
##     data = df)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  4.9723160  0.5380342   9.242  < 2e-16 ***
## Pclass      -1.2449437  0.1431705  -8.696  < 2e-16 ***
## Sexmale     -2.5688795  0.1875754 -13.695  < 2e-16 ***
## Age         -0.0374004  0.0076656  -4.879 1.07e-06 ***
## Fare         0.0002646  0.0020416   0.130    0.897    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1186.7  on 890  degrees of freedom
## Residual deviance:  801.3  on 886  degrees of freedom
## AIC: 811.3
## 
## Number of Fisher Scoring iterations: 5
exp(coef(model))
##  (Intercept)       Pclass      Sexmale          Age         Fare 
## 144.36084371   0.28795713   0.07662135   0.96329034   1.00026466

Kurulan çoklu lojistik regresyon modeli sonuçlarına göre, bağımsız değişkenlerin bireylerin hayatta kalma durumunu anlamlı düzeyde açıkladığı görülmektedir. Modelde yer alan değişkenler incelendiğinde, yolculuk sınıfı (Pclass), cinsiyet (Sex) ve yaş (Age) değişkenlerinin istatistiksel olarak anlamlı olduğu belirlenmiştir (p < .001). Buna karşılık, bilet ücreti (Fare) değişkeninin hayatta kalma üzerinde anlamlı bir etkisinin bulunmadığı görülmektedir (p = .897). Katsayılar incelendiğinde,

yolculuk sınıfındaki artış hayatta kalma olasılığını azaltmaktadır (β = -1.2449, p < .001). Yolculuk sınıfındaki bir birimlik artış bireyin hayatta kalma odds’unu yaklaşık 0.29 katına düşürmektedir. (exp(β)=0.2879)

Erkeklerin kadınlara kıyasla hayatta kalma olasılığı düşüktür (β = -2.5689, p < .001).erkek bireylerin hayatta kalma odds’unun kadınlara göre yaklaşık 0.08 kat fazladır (exp(β)=0.0766).

Yaş arttıkça hayatta kalma olasılığının azaldığı (β = -0.0374, p < .001) görülmektedir. yaşta meydana gelen bir birimlik artış hayatta kalma odds’unu yaklaşık 0.96 katına düşürmektedir (exp(β)=0.9633).

predicted <- predict(model, newdata = df, type = "response")

Burada predicted değişkeni, her yolcu için 0 ile 1 arasında bir olasılık değeri verir. Bu değer, bireyin hayatta kalma olasılığıdır.

cutoffs <- seq(0.1, 0.9, by = 0.01)

accuracy <- sapply(cutoffs, function(cut) {
  pred <- ifelse(predicted > cut, 1, 0)
  mean(pred == df$Survived)
})

best_cutoff <- cutoffs[which.max(accuracy)]
best_cutoff
## [1] 0.45
pred_class <- ifelse(predicted > best_cutoff, 1, 0)

table(Gercek = df$Survived, Tahmin = pred_class)
##       Tahmin
## Gercek   0   1
##      0 461  88
##      1  79 263

Modelden elde edilen tahmini olasılık değerleri kullanılarak optimal kesme noktası 0.45 olarak belirlenmiştir. Bu eşik değere göre oluşturulan sınıflama tablosu incelendiğinde, modelin 461 gözlemi doğru şekilde hayatta kalmadı, 263 gözlemi ise doğru şekilde hayatta kaldı olarak sınıflandırdığı görülmektedir. Buna karşılık, 88 gözlem yanlış şekilde hayatta kaldı, 79 gözlem ise yanlış şekilde hayatta kalmadı olarak sınıflandırılmıştır. Bu sonuçlara göre modelin genel doğruluk oranı yaklaşık %81 olarak hesaplanmıştır.

mean(pred_class != df$Survived)
## [1] 0.1874299

Model performansını değerlendirmek amacıyla yanlış sınıflandırma hatası incelenmiştir. Elde edilen sonuçlara göre modelin yanlış sınıflandırma oranı yaklaşık 0.187 olarak hesaplanmıştır. Bu durum, modelin gözlemlerin yaklaşık %18.7’sini yanlış sınıflandırdığını göstermektedir. Buna karşılık modelin doğru sınıflandırma oranının yüksek olduğu ve genel olarak başarılı bir sınıflama performansı sergilediği söylenebilir.

Wald Testi

Eğim katsayılarının sıfırdan farklı olup olmadığını (anlamlılığını) test etmek için kullanılır. summary() tablosundaki z değerinin karesi Wald istatistiğini verir.

library(aod)
## Warning: package 'aod' was built under R version 4.5.3
wald.test(b = coef(model), Sigma = vcov(model), Terms = 2)
## Wald test:
## ----------
## 
## Chi-squared test:
## X2 = 75.6, df = 1, P(> X2) = 0.0
wald.test(b = coef(model), Sigma = vcov(model), Terms = 3)
## Wald test:
## ----------
## 
## Chi-squared test:
## X2 = 187.6, df = 1, P(> X2) = 0.0

Pclass ve Sex değişkenleri için Wald testi uygulanmış ve bu değişkenlerin istatistiksel olarak anlamlı olduğu doğrulanmıştır (p<.001).

Hosmer–Lemeshow (HL) testi

library(ResourceSelection)
## Warning: package 'ResourceSelection' was built under R version 4.5.3
## ResourceSelection 0.3-6   2023-06-27
hoslem.test(df$Survived, fitted(model))
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  df$Survived, fitted(model)
## X-squared = 28.986, df = 8, p-value = 0.0003189

Modelin veri ile uyumunu değerlendirmek amacıyla Hosmer–Lemeshow testi uygulanmıştır. Test sonuçlarına göre elde edilen p-değerinin 0.05’ten küçük olduğu görülmüştür (p = 0.0003). Bu bulgu, modelin veri ile iyi uyum sağlamadığını ve gözlenen değerler ile model tarafından tahmin edilen değerler arasında anlamlı fark bulunduğunu göstermektedir.

Elde edilen bulgular birlikte değerlendirildiğinde, modelin sınıflama performansının yüksek olmasına rağmen veri ile uyumunun sınırlı olduğu görülmektedir.

library(pscl)
## Warning: package 'pscl' was built under R version 4.5.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
pR2(model)
## fitting null model for pseudo-r2
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
## -400.6488958 -593.3275684  385.3573453    0.3247425    0.3511150    0.4770554

Modelin açıklayıcılık düzeyini değerlendirmek amacıyla pseudo R² değerleri incelenmiştir. Elde edilen sonuçlara göre McFadden R² değeri 0.351, Nagelkerke R² değeri ise 0.470 olarak bulunmuştur. Bu değerler, modelin bağımlı değişkeni açıklama gücünün yüksek olduğunu göstermektedir

Multinominal Lojistik Regresyon

ÇAlışmada hbsdemo veri setini kullanarak “Öğrencilerin akademik başarıları (matematik, fen ve sosyal bilimler puanları), kayıtlı oldukları program türlerini anlamlı bir şekilde yordamakta mıdır?” araştırmasına sorusuna cevap aranmıştır.

Bağımlı değişken olarak öğrencilerin kayıtlı oldukları program türü (prog) kullanılmıştır. Bu değişken üç kategoriden oluşmaktadır:

Academic (Akademik program) General (Genel program) Vocation (Mesleki program)

Bağımsız değişkenler ise öğrencilerin akademik başarılarını temsil eden sürekli değişkenlerdir:

Matematik puanı (math) Fen puanı (science) Sosyal bilimler puanı (socst)

library(haven)
## Warning: package 'haven' was built under R version 4.5.3
hsbdemo <-  read.csv("hsbdemo.csv")
hsbdemo
##      id female    ses  schtyp     prog read write math science socst
## 1    45 female    low  public vocation   34    35   41      29    26
## 2   108   male middle  public  general   34    33   41      36    36
## 3    15   male   high  public vocation   39    39   44      26    42
## 4    67   male    low  public vocation   37    37   42      33    32
## 5   153   male middle  public vocation   39    31   40      39    51
## 6    51 female   high  public  general   42    36   42      31    39
## 7   164   male middle  public vocation   31    36   46      39    46
## 8   133   male middle  public vocation   50    31   40      34    31
## 9     2 female middle  public vocation   39    41   33      42    41
## 10   53   male middle  public vocation   34    37   46      39    31
## 11    1 female    low  public vocation   34    44   40      39    41
## 12  128   male   high  public academic   39    33   38      47    41
## 13   16   male    low  public vocation   47    31   44      36    36
## 14  106 female middle  public vocation   36    44   37      42    41
## 15   89 female    low  public vocation   35    35   40      51    33
## 16  134   male    low  public  general   44    44   39      34    46
## 17   19 female    low  public  general   28    46   43      44    51
## 18  145 female middle  public vocation   42    46   38      36    46
## 19   11   male middle  public academic   34    46   45      39    36
## 20  117   male   high  public vocation   34    49   39      42    56
## 21  109 female middle  public  general   42    39   42      42    41
## 22   12   male middle  public vocation   37    44   45      39    46
## 23   37 female    low  public vocation   41    47   40      39    51
## 24   69 female    low  public vocation   44    44   40      40    31
## 25   43 female    low  public academic   47    37   43      42    46
## 26  196   male   high private academic   44    38   49      39    46
## 27   36 female    low  public  general   44    49   44      35    51
## 28  155   male middle  public  general   44    44   46      39    51
## 29    6 female    low  public academic   47    41   46      40    41
## 30    4 female    low  public academic   44    50   41      39    51
## 31   25 female middle  public  general   47    44   42      42    36
## 32  107   male    low  public vocation   47    39   47      42    26
## 33    5   male    low  public academic   47    40   43      45    31
## 34   47 female    low  public academic   47    46   49      33    41
## 35  140   male middle  public vocation   44    41   40      50    26
## 36   22   male middle  public vocation   42    39   39      56    46
## 37   18   male middle  public vocation   50    33   49      44    36
## 38   30 female   high  public academic   41    59   42      34    51
## 39   40   male    low  public  general   42    41   43      50    41
## 40  176   male middle private academic   47    47   41      42    51
## 41  126   male middle  public  general   42    31   57      47    51
## 42  197   male   high private academic   50    42   50      36    61
## 43   46 female    low  public academic   45    55   44      34    41
## 44   49   male   high  public vocation   50    40   39      49    47
## 45    8 female    low  public academic   39    44   52      44    48
## 46  124 female    low  public vocation   42    54   41      42    41
## 47   13 female middle  public vocation   47    46   39      47    61
## 48  111 female    low  public  general   39    54   39      47    36
## 49  142 female middle  public vocation   47    42   52      39    51
## 50  193 female middle private academic   44    49   48      39    51
## 51  105 female middle  public academic   50    41   45      44    56
## 52   58   male middle  public vocation   55    41   40      44    41
## 53  129 female    low  public  general   44    44   46      47    51
## 54   38   male    low  public academic   45    57   50      31    56
## 55  182 female middle private academic   44    52   43      44    51
## 56  115   male    low  public  general   42    49   43      50    56
## 57   14   male   high  public academic   47    41   54      42    56
## 58  175 female   high private  general   36    57   42      50    41
## 59   44 female    low  public vocation   47    62   45      34    46
## 60   86   male   high  public  general   44    33   54      58    31
## 61   72 female middle  public vocation   42    54   47      47    46
## 62   41   male middle  public academic   50    40   45      55    56
## 63  191 female   high private academic   47    52   43      48    61
## 64  138 female middle  public vocation   43    57   40      50    51
## 65    9   male middle  public vocation   48    49   52      44    51
## 66  151 female middle  public vocation   47    46   52      48    46
## 67  119 female    low  public  general   42    57   45      50    43
## 68   55 female middle private academic   52    49   49      44    61
## 69   73 female middle  public academic   50    52   53      39    56
## 70   28 female middle  public  general   39    53   54      50    41
## 71   90 female   high  public academic   42    54   50      50    52
## 72   17 female middle  public academic   47    57   48      44    41
## 73  102   male   high  public academic   52    41   51      53    56
## 74   70   male    low  public  general   57    52   41      47    57
## 75  148 female middle  public vocation   42    57   51      47    61
## 76   54 female    low private  general   47    54   46      50    56
## 77   42 female middle  public vocation   46    52   55      44    56
## 78   87 female middle  public  general   50    52   46      50    56
## 79   21   male middle  public  general   44    44   61      50    46
## 80  181   male middle private academic   50    46   45      58    61
## 81  165   male    low  public vocation   36    49   54      61    36
## 82   78 female middle  public academic   39    54   54      53    41
## 83   76   male   high  public academic   47    52   51      50    56
## 84   29   male    low  public  general   52    44   49      55    41
## 85   91 female   high  public vocation   50    49   56      47    46
## 86   52 female    low  public academic   50    46   53      53    66
## 87   10 female middle  public  general   47    54   49      53    61
## 88   85   male middle  public  general   55    39   57      53    46
## 89   50   male middle  public  general   50    59   42      53    61
## 90   56   male middle  public vocation   55    45   46      58    51
## 91   64 female   high  public vocation   50    52   45      58    36
## 92  130 female   high  public  general   43    54   55      55    46
## 93  141   male   high  public vocation   63    44   47      53    56
## 94   74 female middle  public academic   57    50   50      51    58
## 95   83 female middle  public vocation   50    62   41      55    31
## 96   31 female middle private  general   55    59   52      42    56
## 97  172   male middle  public academic   47    52   57      53    61
## 98  184 female middle private vocation   50    52   53      55    56
## 99   75   male middle  public vocation   60    46   51      53    61
## 100 187 female middle private  general   57    41   57      55    52
## 101 113   male middle  public academic   44    52   51      63    61
## 102 162 female middle  public vocation   57    52   40      61    56
## 103 110 female middle  public vocation   52    55   50      54    61
## 104 150   male middle  public vocation   42    41   57      72    31
## 105 167   male middle  public  general   63    49   35      66    41
## 106  77 female    low  public academic   61    59   49      44    66
## 107  35 female    low private  general   60    54   50      50    51
## 108 158 female middle  public  general   52    54   55      53    51
## 109 112 female middle  public academic   52    59   48      55    61
## 110  48   male middle  public academic   57    55   52      50    51
## 111 147 female    low  public academic   47    62   53      53    61
## 112   7   male middle  public academic   57    54   59      47    51
## 113  65 female middle  public academic   55    54   66      42    56
## 114 168   male middle  public academic   52    54   57      55    51
## 115 190 female middle private academic   47    59   54      58    46
## 116 178   male middle private vocation   47    57   57      58    46
## 117 159   male   high  public academic   55    61   54      49    61
## 118 120 female   high  public academic   63    52   54      50    51
## 119 116 female middle  public academic   57    59   54      50    56
## 120  79 female middle  public academic   60    62   49      50    51
## 121  98 female    low  public vocation   57    60   51      53    37
## 122 122 female middle  public academic   52    59   58      53    66
## 123 179 female middle private academic   47    65   60      50    56
## 124 198 female   high private academic   47    61   51      63    31
## 125 189   male middle private academic   47    59   63      53    46
## 126 199   male   high private academic   52    59   50      61    61
## 127 156 female middle  public academic   50    59   53      61    61
## 128 166 female middle  public academic   52    59   53      61    51
## 129 160 female middle  public academic   55    65   55      50    61
## 130 152 female   high  public academic   55    57   56      58    61
## 131 183   male middle private academic   63    59   49      55    71
## 132  94   male   high  public academic   55    49   61      61    56
## 133 149   male    low  public  general   63    49   49      66    46
## 134 131 female   high  public academic   65    59   57      46    66
## 135  24   male middle  public academic   52    62   66      47    46
## 136  99 female   high  public  general   47    59   56      66    61
## 137 171   male middle  public academic   60    54   60      55    66
## 138 104   male   high  public academic   54    63   57      55    46
## 139  81   male    low  public academic   63    43   59      65    44
## 140  97   male   high  public academic   60    54   58      58    61
## 141  20   male   high  public academic   60    52   57      61    61
## 142 163 female    low  public academic   52    57   64      58    56
## 143 195   male middle private  general   57    57   60      58    56
## 144  84   male middle  public  general   63    57   54      58    51
## 145  27   male middle  public academic   53    61   61      57    56
## 146 118 female middle  public  general   55    62   58      58    61
## 147  71 female middle  public  general   57    62   56      58    66
## 148  63 female    low  public  general   52    65   60      56    51
## 149 185   male middle private academic   63    57   55      58    41
## 150 127   male   high  public academic   63    59   57      55    56
## 151 177   male middle private academic   55    59   62      58    51
## 152 188 female   high private academic   63    62   56      55    61
## 153  60   male middle  public academic   57    65   51      63    61
## 154  66 female middle  public vocation   68    62   56      50    51
## 155 173 female    low  public  general   50    62   61      63    51
## 156 186 female middle private academic   57    62   63      55    41
## 157  96 female   high  public academic   65    54   61      58    56
## 158 101 female   high  public academic   60    62   67      50    56
## 159   3   male    low  public academic   63    65   48      63    56
## 160 170   male   high  public academic   47    62   61      69    66
## 161  92 female   high  public  general   52    67   57      63    61
## 162  62   male   high  public  general   65    65   48      63    66
## 163 135 female    low  public academic   63    60   65      54    66
## 164  26 female   high  public academic   60    59   62      61    51
## 165 139 female middle  public academic   68    59   61      55    71
## 166 121 female middle  public vocation   68    59   53      63    61
## 167 144   male   high  public  general   60    65   58      61    66
## 168 146   male   high  public academic   55    62   64      63    66
## 169 137 female   high  public academic   63    65   65      53    61
## 170 123   male   high  public  general   68    59   56      63    66
## 171 169   male    low  public  general   55    59   63      69    46
## 172  34 female   high private academic   73    61   57      55    66
## 173  33 female    low  public academic   57    65   72      54    56
## 174  32 female   high  public vocation   50    67   66      66    56
## 175 114   male   high  public academic   68    65   62      55    61
## 176 125 female    low  public academic   68    65   58      59    56
## 177  59 female middle  public academic   65    67   63      55    71
## 178  23 female    low  public academic   65    65   64      58    71
## 179 161 female    low  public academic   57    62   72      61    61
## 180 103   male   high  public academic   76    52   64      64    61
## 181 194 female   high private academic   63    63   69      61    61
## 182 136   male middle  public academic   65    59   70      63    51
## 183 154   male   high  public academic   65    65   66      61    66
## 184 157   male middle  public  general   68    59   58      74    66
## 185  93 female   high  public academic   73    67   62      58    66
## 186  39 female   high  public academic   66    67   67      61    66
## 187  88 female   high  public academic   68    60   64      69    66
## 188 192   male   high private academic   65    67   63      66    71
## 189  80   male   high  public academic   65    62   68      66    66
## 190 200   male middle private academic   68    54   75      66    66
## 191 180 female   high private academic   71    65   69      58    71
## 192  82 female   high  public academic   68    62   65      69    61
## 193 174   male middle private academic   68    59   71      66    56
## 194  95   male   high  public academic   73    60   71      61    71
## 195  61 female   high  public academic   76    63   60      67    66
## 196 100 female   high  public academic   63    65   71      69    71
## 197 143   male middle  public vocation   63    63   75      72    66
## 198  68   male middle  public academic   73    67   71      63    66
## 199  57 female middle  public academic   71    65   72      66    56
## 200 132   male middle  public academic   73    62   73      69    66
##           honors awards cid
## 1   not enrolled      0   1
## 2   not enrolled      0   1
## 3   not enrolled      0   1
## 4   not enrolled      0   1
## 5   not enrolled      0   1
## 6   not enrolled      0   1
## 7   not enrolled      0   1
## 8   not enrolled      0   1
## 9   not enrolled      0   1
## 10  not enrolled      0   1
## 11  not enrolled      0   1
## 12  not enrolled      0   2
## 13  not enrolled      0   2
## 14  not enrolled      0   2
## 15  not enrolled      0   2
## 16  not enrolled      0   2
## 17  not enrolled      0   2
## 18  not enrolled      0   2
## 19  not enrolled      0   2
## 20  not enrolled      0   2
## 21  not enrolled      0   2
## 22  not enrolled      0   3
## 23  not enrolled      0   3
## 24  not enrolled      0   3
## 25  not enrolled      0   3
## 26  not enrolled      0   3
## 27  not enrolled      0   3
## 28  not enrolled      0   3
## 29  not enrolled      0   3
## 30  not enrolled      1   3
## 31  not enrolled      0   4
## 32  not enrolled      0   4
## 33  not enrolled      0   4
## 34  not enrolled      0   4
## 35  not enrolled      0   4
## 36  not enrolled      0   4
## 37  not enrolled      0   4
## 38  not enrolled      2   4
## 39  not enrolled      0   4
## 40  not enrolled      0   4
## 41  not enrolled      0   4
## 42  not enrolled      0   5
## 43  not enrolled      2   5
## 44  not enrolled      0   5
## 45  not enrolled      0   5
## 46  not enrolled      1   5
## 47  not enrolled      0   5
## 48  not enrolled      1   5
## 49  not enrolled      0   5
## 50  not enrolled      0   5
## 51  not enrolled      0   5
## 52  not enrolled      0   5
## 53  not enrolled      0   6
## 54  not enrolled      2   6
## 55  not enrolled      1   6
## 56  not enrolled      0   6
## 57  not enrolled      0   6
## 58  not enrolled      2   6
## 59      enrolled      3   6
## 60  not enrolled      0   6
## 61  not enrolled      1   6
## 62  not enrolled      0   7
## 63  not enrolled      1   7
## 64  not enrolled      2   7
## 65  not enrolled      0   7
## 66  not enrolled      0   7
## 67  not enrolled      2   7
## 68  not enrolled      0   7
## 69  not enrolled      1   7
## 70  not enrolled      1   7
## 71  not enrolled      1   8
## 72  not enrolled      2   8
## 73  not enrolled      0   8
## 74  not enrolled      1   8
## 75  not enrolled      2   8
## 76  not enrolled      1   8
## 77  not enrolled      1   8
## 78  not enrolled      1   8
## 79  not enrolled      0   8
## 80  not enrolled      0   8
## 81  not enrolled      0   8
## 82  not enrolled      1   9
## 83  not enrolled      1   9
## 84  not enrolled      0   9
## 85  not enrolled      0   9
## 86  not enrolled      0   9
## 87  not enrolled      1   9
## 88  not enrolled      0   9
## 89  not enrolled      2   9
## 90  not enrolled      0   9
## 91  not enrolled      1  10
## 92  not enrolled      1  10
## 93  not enrolled      0  10
## 94  not enrolled      1  10
## 95      enrolled      3  10
## 96  not enrolled      2  10
## 97  not enrolled      1  10
## 98  not enrolled      1  10
## 99  not enrolled      0  10
## 100 not enrolled      0  10
## 101 not enrolled      1  11
## 102 not enrolled      1  11
## 103 not enrolled      2  11
## 104 not enrolled      0  11
## 105 not enrolled      0  11
## 106 not enrolled      2  11
## 107 not enrolled      1  11
## 108 not enrolled      1  11
## 109 not enrolled      2  11
## 110 not enrolled      2  11
## 111     enrolled      3  11
## 112 not enrolled      1  11
## 113 not enrolled      1  12
## 114 not enrolled      1  12
## 115 not enrolled      2  12
## 116 not enrolled      2  12
## 117     enrolled      3  12
## 118 not enrolled      1  12
## 119 not enrolled      2  12
## 120     enrolled      3  12
## 121     enrolled      2  12
## 122 not enrolled      2  12
## 123     enrolled      5  13
## 124     enrolled      3  13
## 125 not enrolled      2  13
## 126 not enrolled      2  13
## 127 not enrolled      2  13
## 128 not enrolled      2  13
## 129     enrolled      5  13
## 130 not enrolled      2  13
## 131 not enrolled      2  13
## 132 not enrolled      0  14
## 133 not enrolled      0  14
## 134 not enrolled      2  14
## 135     enrolled      3  14
## 136 not enrolled      2  14
## 137 not enrolled      1  14
## 138     enrolled      4  14
## 139 not enrolled      0  14
## 140 not enrolled      1  14
## 141 not enrolled      1  14
## 142 not enrolled      2  15
## 143 not enrolled      2  15
## 144 not enrolled      2  15
## 145     enrolled      3  15
## 146     enrolled      3  15
## 147     enrolled      3  15
## 148     enrolled      5  15
## 149 not enrolled      2  15
## 150 not enrolled      2  15
## 151 not enrolled      2  15
## 152     enrolled      3  16
## 153     enrolled      5  16
## 154     enrolled      3  16
## 155     enrolled      3  16
## 156     enrolled      3  16
## 157 not enrolled      1  16
## 158     enrolled      3  16
## 159     enrolled      5  16
## 160     enrolled      3  16
## 161     enrolled      7  16
## 162     enrolled      5  16
## 163     enrolled      2  17
## 164 not enrolled      2  17
## 165 not enrolled      2  17
## 166 not enrolled      2  17
## 167     enrolled      5  17
## 168     enrolled      3  17
## 169     enrolled      5  17
## 170 not enrolled      2  18
## 171 not enrolled      2  18
## 172     enrolled      3  18
## 173     enrolled      5  18
## 174     enrolled      7  18
## 175     enrolled      5  18
## 176     enrolled      5  18
## 177     enrolled      7  18
## 178     enrolled      5  18
## 179     enrolled      3  18
## 180 not enrolled      1  19
## 181     enrolled      4  19
## 182 not enrolled      2  19
## 183     enrolled      5  19
## 184 not enrolled      2  19
## 185     enrolled      7  19
## 186     enrolled      7  19
## 187     enrolled      2  19
## 188     enrolled      7  19
## 189     enrolled      3  19
## 190 not enrolled      1  19
## 191     enrolled      5  20
## 192     enrolled      3  20
## 193 not enrolled      2  20
## 194     enrolled      2  20
## 195     enrolled      4  20
## 196     enrolled      5  20
## 197     enrolled      4  20
## 198     enrolled      7  20
## 199     enrolled      5  20
## 200     enrolled      3  20

Uygulama Adımları

Referans Kategorinin Belirlenmesi:

lk olarak, sonuç (bağımlı) değişkenimizin temel (referans/baseline) kategorisi olarak kullanmak istediğimiz düzeyini seçmemiz ve bunu R’a relevel fonksiyonu ile belirtmemiz gerekmektedir.

# faktör düzenleme

hsbdemo$prog <- factor(hsbdemo$prog,
                       levels = c("academic", "general", "vocation"),
                       labels = c("Academic", "General", "Vocation"))


table(hsbdemo$prog)
## 
## Academic  General Vocation 
##      105       45       50

MLRde bir sonraki adımı, bir referans kategorisi seçmektir. Varsayılan olarak R, faktörleri alfabetik olarak sıralar. Ancak, relevel komutu kullanılarak bu değiştirilebilir. Referans grubu olarak Academic seçiyoruz.

# Referans kategori belirle

hsbdemo$prog <- relevel(hsbdemo$prog, ref = "Academic")

2. Modelin Kurulması:

Ardından, multinom fonksiyonunu kullanarak modelimizi çalıştırıyoruz.

library(nnet)
## Warning: package 'nnet' was built under R version 4.5.3
model_new <- multinom(prog ~ math + science + socst, data = hsbdemo)
## # weights:  15 (8 variable)
## initial  value 219.722458 
## iter  10 value 167.561494
## final  value 167.337045 
## converged
summary(model_new)
## Call:
## multinom(formula = prog ~ math + science + socst, data = hsbdemo)
## 
## Coefficients:
##          (Intercept)       math    science       socst
## General     4.360566 -0.1193445 0.07432991 -0.05172859
## Vocation    8.855339 -0.1379384 0.03925004 -0.08828278
## 
## Std. Errors:
##          (Intercept)       math    science      socst
## General     1.438341 0.03142603 0.02712120 0.02293596
## Vocation    1.551522 0.03474247 0.02732092 0.02398716
## 
## Residual Deviance: 334.6741 
## AIC: 350.6741

3. Anlamlılık (p) Değerlerinin Hesaplanması:

Multinom fonksiyonunun ürettiği standart özet tablosu, regresyon katsayıları için p-değerlerini otomatik olarak içermez. Bu nedenle, katsayıların istatistiksel anlamlılığını değerlendirmek için p-değerlerini Wald testlerini (z-testi) kullanarak kendimiz hesaplayacağız.

z <- summary(model_new)$coefficients / summary(model_new)$standard.errors
p <- (1 - pnorm(abs(z))) * 2
p
##           (Intercept)         math     science        socst
## General  2.432096e-03 1.460851e-04 0.006131648 0.0241114519
## Vocation 1.146363e-08 7.177895e-05 0.150823344 0.0002328512
exp(coef(model_new))
##          (Intercept)      math  science     socst
## General      78.3014 0.8875020 1.077162 0.9495866
## Vocation   7011.7275 0.8711524 1.040030 0.9155020
library(sjPlot)
## Warning: package 'sjPlot' was built under R version 4.5.3
tab_model(model_new, show.ci = FALSE, show.se = FALSE, show.p = TRUE)
  prog
Predictors Odds Ratios p Response
(Intercept) 78.30 0.003 General
math 0.89 <0.001 General
science 1.08 0.007 General
socst 0.95 0.025 General
(Intercept) 7011.73 <0.001 Vocation
math 0.87 <0.001 Vocation
science 1.04 0.152 Vocation
socst 0.92 <0.001 Vocation
Observations 200
R2 / R2 adjusted 0.180 / 0.175
  1. General vs Academic

📊 Matematik (math)

Matematik puanı değişkeninin General program türünü yordamada istatistiksel olarak anlamlı olduğu görülmüştür (p < .001). Odds oranı 0.887 olup, matematik puanındaki bir birimlik artışın öğrencinin General programda yer alma olasılığını azalttığını göstermektedir.

📊 Fen (science)

Fen puanının General program türünü yordamada anlamlı olduğu belirlenmiştir (p = 0.006). Odds oranının 1.077 olması, fen puanındaki artışın öğrencinin General programda yer alma olasılığını artırdığını göstermektedir.

📊 Sosyal Bilimler (socst)

Sosyal bilimler puanı değişkeninin General program türü üzerinde anlamlı bir etkisi olduğu görülmüştür (p = 0.024). Odds oranı 0.949 olup, sosyal bilimler puanındaki artışın General programda yer alma olasılığını azalttığı belirlenmiştir.

  1. Vocation vs Academic

📊 Matematik (math)

Matematik puanı değişkeninin Vocation program türünü yordamada anlamlı olduğu görülmüştür (p < .001). Odds oranı 0.871 olup, matematik puanındaki artışın öğrencinin Vocation programında yer alma olasılığını azalttığını göstermektedir.

📊 Fen (science)

Fen puanının Vocation program türünü yordamada istatistiksel olarak anlamlı olmadığı belirlenmiştir (p = 0.150). Bu nedenle fen puanının bu program türü üzerinde anlamlı bir etkisi bulunmamaktadır.

📊 Sosyal Bilimler (socst)

Sosyal bilimler puanı değişkeninin Vocation program türünü yordamada anlamlı olduğu görülmüştür (p < .001). Odds oranı 0.915 olup, sosyal bilimler puanındaki artışın Vocation programında yer alma olasılığını azalttığı belirlenmiştir.

Görselleştirme ve Grafiklerin Yorumlanması

library(dplyr)
library(tidyr)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.3
## 
## Attaching package: 'ggplot2'
## The following object is masked from 'package:sjPlot':
## 
##     set_theme
library(patchwork)


## Matematik

tahmin_math <- data.frame(
  math = seq(min(hsbdemo$math, na.rm = TRUE),
             max(hsbdemo$math, na.rm = TRUE),
             length.out = 100),
  science = mean(hsbdemo$science, na.rm = TRUE),
  socst = mean(hsbdemo$socst, na.rm = TRUE)
)

olasilik_math <- predict(model_new, newdata = tahmin_math, type = "probs")
tahmin_math <- cbind(tahmin_math, olasilik_math)

uzun_math <- tahmin_math %>%
  pivot_longer(
    cols = c("Academic", "General", "Vocation"),
    names_to = "Program",
    values_to = "Olasilik"
  )

g_math <- ggplot(uzun_math, aes(x = math, y = Olasilik, color = Program)) +
  geom_line(linewidth = 1) +
  labs(
    title = "Matematik",
    x = "Math",
    y = "Tahmin Olasılığı",
    color = "Program"
  ) +
  theme_minimal()

## Fen Bilimleri

tahmin_science <- data.frame(
  science = seq(min(hsbdemo$science, na.rm = TRUE),
                max(hsbdemo$science, na.rm = TRUE),
                length.out = 100),
  math = mean(hsbdemo$math, na.rm = TRUE),
  socst = mean(hsbdemo$socst, na.rm = TRUE)
)

olasilik_science <- predict(model_new, newdata = tahmin_science, type = "probs")
tahmin_science <- cbind(tahmin_science, olasilik_science)

uzun_science <- tahmin_science %>%
  pivot_longer(
    cols = c("Academic", "General", "Vocation"),
    names_to = "Program",
    values_to = "Olasilik"
  )

g_science <- ggplot(uzun_science, aes(x = science, y = Olasilik, color = Program)) +
  geom_line(linewidth = 1) +
  labs(
    title = "Fen Bilimleri",
    x = "Science",
    y = "Tahmin Olasılığı",
    color = "Program"
  ) +
  theme_minimal()



## Sosyal Bilimler

tahmin_socst <- data.frame(
  socst = seq(min(hsbdemo$socst, na.rm = TRUE),
              max(hsbdemo$socst, na.rm = TRUE),
              length.out = 100),
  math = mean(hsbdemo$math, na.rm = TRUE),
  science = mean(hsbdemo$science, na.rm = TRUE)
)

olasilik_socst <- predict(model_new, newdata = tahmin_socst, type = "probs")
tahmin_socst <- cbind(tahmin_socst, olasilik_socst)

uzun_socst <- tahmin_socst %>%
  pivot_longer(
    cols = c("Academic", "General", "Vocation"),
    names_to = "Program",
    values_to = "Olasilik"
  )

g_socst <- ggplot(uzun_socst, aes(x = socst, y = Olasilik, color = Program)) +
  geom_line(linewidth = 1) +
  labs(
    title = "Sosyal Bilimler",
    x = "Socst",
    y = "Tahmin Olasılığı",
    color = "Program"
  ) +
  theme_minimal()

(g_math | g_science | g_socst) +
  plot_layout(guides = "collect") &
  theme(legend.position = "bottom")

Matematik Puanına Göre Program Türleri

Grafik incelendiğinde, matematik puanı arttıkça öğrencilerin Academic programda yer alma olasılığının belirgin şekilde arttığı görülmektedir. Buna karşılık General ve Vocation programlarında yer alma olasılıkları azalmaktadır.

Fen Bilimleri Puanına Göre Program Türleri

Fen bilimleri puanı arttıkça Academic programda yer alma olasılığının arttığı, General program olasılığının ise kısmen arttığı gözlenmektedir. Buna karşın Vocation programında yer alma olasılığı fen puanı yükseldikçe azalmaktadır.

Sosyal Bilimler Puanına Göre Program Türleri

Sosyal bilimler puanı arttıkça Academic programda yer alma olasılığının arttığı, buna karşılık General ve Vocation programlarında yer alma olasılıklarının azaldığı görülmektedir