Table of COntents

1- Lojistik Regresyon(LR) Tekrarı

2- Pass.sav Verisiyle Lojistik Regresyon Uygulaması

3- Pass.sav Verisiyle LR Uygulmasının Aşamalı Olarak Analizi

4- Nelsstudent_subabuse.sav Verisiyle Lojistik Regresyon Uygulaması

Lojistik Regresyon(LR)

Lojistik regresyon bağımlı değişkenin iki kategorili olduğu durumlarda kullanılan istatiksel bir modeldir. Doğrusal regresyon ise bağımlı değişkenlerin sürekli olduğu durumlar için uygundur. Kategorik değişekene sahip regresyon modellerinde doğrsual regresyon kullanımı doğrusallığın kaybolmasına yol açabilir ve olasılık değerlerinin 0-1 aralığının dışına çıkmasına sebep olabilir.Bu nedenle Bağımlı değişkenin kategorik olduğu durumlarda doğrusal regresyon kullanımı uygun değildir, lojistik regresyon tercih edilir. Bununla beraber bağımlı değiikenin kategorik olduğu durumlarda regresyon eğrisi S yaparak çizilir. Bu da doğrusallık ihlalinin göstergelerinden biridir.

Basit doğrusal regresyonda sonuç sürekli bir değerdir. Dolayısıyla -∞ ile +∞ arasında değerler alır. LR’de ise bağımlı değişkenlerin kategorik olmasından ötürü lojsitik regresyon sonuçları sınırlıdır. Lojistik regresyon temelde olasılık işlemine dayalı olduğundan değerler 0-1 arasında değerler alır. Bu bağlamda lojistik regresyon bir olayın gerçekleşme olasılığını tahmin ederek bu olasılığa göre sınıflandırma yapmayı anaçlayan regresyon modelleridir. Basit doğrusal regresyon ve çoklu regresyonda en küçük kareler yöntemi kullanılırken, lojistik regresyonda model katsıyları kestirilir. Regresyon denleminde bağımsız değişken değiştikçe bağımlı değişkeni nasıl etkiliyor bu incelenir( x’teki a birimlik değişim y’de ax+b’lik değişime yol açar). Kategorik değişkenlerde böyle bir durum söz konusu değildir. Tek bir sıçrama görülür. X’teki değişim Y’yi şu şekilde değiştirir yorumu doğru olmaz bu nedenle kategorik değişkenlerde ANOVA, bağımsız örneklem t-tesi veya lojistik regresyon kullanılır.

Lojistik regresyon üç aşamada incelenir. Bunlar olasılık, odds ve log-odds(logit) ölçekleri ile yapılır. Olasılık(p) 0-1 aralığında değerler alır. Odds değeri ise p/(p-1) ile ifade edilir yani olaynı gerçekleşme durumunun gerçekleşmeme durumuna bölümüdür. 0 ile +∞ arasında değerler alır. Log-odds (ln[p/(p-1)]) ile ifade edilir. Logit dönüşümü ile odds değerinin logaritması alınır. Bu sayede model doğrusal hale gelir ve -∞ ile +∞ arasında değerler alır. Burada logit değerinin yorumlanması zor olduğundan eşitlikte her iki tarafın da üsteli (exponential) alındığında değer p/p-1= e üzeri (b0+b1X) halini alır. Bu değer odds-ratio değeridir. Odds-ratio=a için, bağımsız değişken 1 birim arttığında odds değeri a katına çıkar.

Lojistik Regresyon Uygulaması

knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(message = FALSE)
knitr::opts_chunk$set(warning = FALSE)
library(haven)
library(dplyr)
library(ggplot2)
library(broom)
pass_veri<- read_sav("Pass.sav")
pass_veri<- pass_veri|> rename(id=X, gecme_durum=pass)

burada ilk olarak grafikle doğrusallığı vs. inceleyebiliriz

grafik_1<- ggplot(pass_veri, aes(x=id, y=gecme_durum)) +
    geom_smooth(method = "lm", se = FALSE) +
  geom_jitter()
grafik_1

lr_pass<- glm(formula = gecme_durum~id, family=binomial, data=pass_veri)
summary(lr_pass)
## 
## Call:
## glm(formula = gecme_durum ~ id, family = binomial, data = pass_veri)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)  
## (Intercept)  -6.3475     3.6336  -1.747   0.0807 .
## id            0.9843     0.5547   1.774   0.0760 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 14.4206  on 10  degrees of freedom
## Residual deviance:  7.6638  on  9  degrees of freedom
## AIC: 11.664
## 
## Number of Fisher Scoring iterations: 6

Modelde sabit terim (intercept) -6.34 olarak bulunmuştur. Bu durum, bağımsız değişkenlerin tümü 0 olduğunda bağımlı değişkenin gerçekleşme olasılığını verir. Burada olasılık değeri 0.98 çıkmıştır. P değeri 0,76 0.05 düzeyinde analamsız olarak bulunmuştur. 0,10 düzeyinde analamlıdır. Olasılık ölçeğinde değişim sabit olmadığından odds değerini sonra dalogg-odds değerini hesaplarız. Bunun için exp(coef()) kullanabiliriz.

exp(coef(lr_pass))
## (Intercept)          id 
## 0.001751178 2.675995938

Buna göre odds-ratio değeri 2.675 çıkar. Bu değer log-odds değerinin üstel dönüşümüdür. OR>1 olduğundan olasılık artar. Burada exp(beta) id değeri değişkenindeki 1 birimlik artış, gecme_durum’un gerçekleşme odds’unu yaklaşık 2.68 kat artırmaktadır.

pass_sinif<- augment(lr_pass, type.predict = "response") |>
  mutate(gecme_hat= round(.fitted))
head(pass_sinif)
## # A tibble: 6 × 9
##   gecme_durum    id .fitted  .resid   .hat .sigma  .cooksd .std.resid gecme_hat
##         <dbl> <dbl>   <dbl>   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>     <dbl>
## 1           0     1 0.00466 -0.0967 0.0446  0.978 0.000115    -0.0989         0
## 2           0     2 0.0124  -0.158  0.0811  0.977 0.000602    -0.165          0
## 3           0     3 0.0325  -0.257  0.134   0.974 0.00300     -0.276          0
## 4           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461          0
## 5           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461          0
## 6           0     5 0.194   -0.656  0.217   0.943 0.0427      -0.742          0
pass_sinif|> select(gecme_durum, gecme_hat) |> table()
##            gecme_hat
## gecme_durum 0 1
##           0 6 1
##           1 1 3

Görüldüğü üzere gecme ve kalma olasılığı 6+3=9 öğrencinin doğru tahmin edilmiştir. Buna göre doğru sınıflama yüzdesi %82 olarak bulunmuştur. Bu veri setinde olasılık, odds ve log-odds değerlerinin ayrı ayrı inceledim.(Aşamaları görmek amacıyla)

model_pass<- glm(gecme_durum~id, data = pass_veri, family = binomial)
grafik_1 +
  geom_line(data = augment(model_pass, type.predict="response"), 
            aes(y=.fitted), color="red")

pass_veri_prob_odd_log<- model_pass|>
augment(type.predict = "response") |>
  mutate(y_hat=.fitted)
pass_veri_prob_odd_log
## # A tibble: 11 × 9
##    gecme_durum    id .fitted  .resid   .hat .sigma  .cooksd .std.resid   y_hat
##          <dbl> <dbl>   <dbl>   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>   <dbl>
##  1           0     1 0.00466 -0.0967 0.0446  0.978 0.000115    -0.0989 0.00466
##  2           0     2 0.0124  -0.158  0.0811  0.977 0.000602    -0.165  0.0124 
##  3           0     3 0.0325  -0.257  0.134   0.974 0.00300     -0.276  0.0325 
##  4           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  5           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  6           0     5 0.194   -0.656  0.217   0.943 0.0427      -0.742  0.194  
##  7           1     6 0.391    1.37   0.209   0.813 0.259        1.54   0.391  
##  8           1     7 0.632    0.957  0.227   0.900 0.110        1.09   0.632  
##  9           0     8 0.822   -1.86   0.248   0.621 1.01        -2.14   0.822  
## 10           1     8 0.822    0.627  0.248   0.945 0.0476       0.723  0.822  
## 11           1     9 0.925    0.395  0.210   0.966 0.0136       0.444  0.925
ggplot(pass_veri_prob_odd_log, aes(x=id, y=y_hat)) +
  geom_point() +
  geom_line() +
  scale_y_continuous("Probability of Passing", limits = c(0,1))

pass_veri_prob_odd_log<- pass_veri_prob_odd_log|>
mutate(odds_hat=y_hat/ (1- y_hat))
pass_veri_prob_odd_log
## # A tibble: 11 × 10
##    gecme_durum    id .fitted  .resid   .hat .sigma  .cooksd .std.resid   y_hat
##          <dbl> <dbl>   <dbl>   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>   <dbl>
##  1           0     1 0.00466 -0.0967 0.0446  0.978 0.000115    -0.0989 0.00466
##  2           0     2 0.0124  -0.158  0.0811  0.977 0.000602    -0.165  0.0124 
##  3           0     3 0.0325  -0.257  0.134   0.974 0.00300     -0.276  0.0325 
##  4           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  5           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  6           0     5 0.194   -0.656  0.217   0.943 0.0427      -0.742  0.194  
##  7           1     6 0.391    1.37   0.209   0.813 0.259        1.54   0.391  
##  8           1     7 0.632    0.957  0.227   0.900 0.110        1.09   0.632  
##  9           0     8 0.822   -1.86   0.248   0.621 1.01        -2.14   0.822  
## 10           1     8 0.822    0.627  0.248   0.945 0.0476       0.723  0.822  
## 11           1     9 0.925    0.395  0.210   0.966 0.0136       0.444  0.925  
## # ℹ 1 more variable: odds_hat <dbl>
ggplot(pass_veri_prob_odd_log, aes(x=id, y=odds_hat)) +
  geom_point() +
  geom_line() +
  scale_y_continuous("Odds of Probability of Pass", limits = c(0,1))

pass_veri_prob_odd_log<- pass_veri_prob_odd_log|>
mutate(log_odds_hat=log(odds_hat))
pass_veri_prob_odd_log
## # A tibble: 11 × 11
##    gecme_durum    id .fitted  .resid   .hat .sigma  .cooksd .std.resid   y_hat
##          <dbl> <dbl>   <dbl>   <dbl>  <dbl>  <dbl>    <dbl>      <dbl>   <dbl>
##  1           0     1 0.00466 -0.0967 0.0446  0.978 0.000115    -0.0989 0.00466
##  2           0     2 0.0124  -0.158  0.0811  0.977 0.000602    -0.165  0.0124 
##  3           0     3 0.0325  -0.257  0.134   0.974 0.00300     -0.276  0.0325 
##  4           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  5           0     4 0.0824  -0.415  0.191   0.965 0.0131      -0.461  0.0824 
##  6           0     5 0.194   -0.656  0.217   0.943 0.0427      -0.742  0.194  
##  7           1     6 0.391    1.37   0.209   0.813 0.259        1.54   0.391  
##  8           1     7 0.632    0.957  0.227   0.900 0.110        1.09   0.632  
##  9           0     8 0.822   -1.86   0.248   0.621 1.01        -2.14   0.822  
## 10           1     8 0.822    0.627  0.248   0.945 0.0476       0.723  0.822  
## 11           1     9 0.925    0.395  0.210   0.966 0.0136       0.444  0.925  
## # ℹ 2 more variables: odds_hat <dbl>, log_odds_hat <dbl>
ggplot(pass_veri_prob_odd_log, aes(x = id, y = log_odds_hat)) +
  geom_point() +
  geom_line(aes(group = 1)) +  
  scale_y_continuous("Log-Odds of Probability of Pass")  

Görüldüğü gibi doğrusallık log-odds ölçeğinde sağlanmıştır.

exp(coef(model_pass))
## (Intercept)          id 
## 0.001751178 2.675995938

yorumlaması yukarıdaki ile aynıdır. Burada gördüğümüz gibi olasılıktan oddsa sonra da logit ölçeğine aldığımızda model doğrusal hale geldi ve log-odds değerinin üstelini alarak odds-ratio değerini elde ederek regresyon işlemimiz yapabildik.

LR Uygulama-2(subabuse)

subabuse<- read_sav("nelsstudent_subabuse.sav")
subabuse<- subabuse|> rename(ogr_id=stu_id, abuse=f1subabu, gecme_mat=passmath)
grafik_2<- ggplot(subabuse, aes(x=ogr_id, y=gecme_mat)) +
    geom_smooth(method = "lm", se = FALSE) +
  geom_jitter()
grafik_2

lr_subabuse<- glm(gecme_mat~abuse, family=binomial, data = subabuse)
summary(lr_subabuse)
## 
## Call:
## glm(formula = gecme_mat ~ abuse, family = binomial, data = subabuse)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  1.12590    0.16613   6.777 1.23e-11 ***
## abuse        0.01314    0.05301   0.248    0.804    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 218.21  on 195  degrees of freedom
## Residual deviance: 218.15  on 194  degrees of freedom
## AIC: 222.15
## 
## Number of Fisher Scoring iterations: 4
exp(coef(lr_subabuse))
## (Intercept)       abuse 
##    3.082980    1.013227

Abuse değişkeni için elde edilen odds ratio 1.013’tür, yani abuse bir birim arttığında geçme oddsunda 1.013 birimlik (yüzde olasılıkla yaklaşık %1) artış beklenir ancak bu etki istatistiksel olarak anlamlı değildir (p = 0.804). Modelin sabit terimi için odds = 3.08’tir, yani abuse = 0 olduğunda geçme olasılığı yaklaşık %76’dır.(3.083/1+3,083)