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.
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
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 <- 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.
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).
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
Ç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
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")
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
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 | ||
📊 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.
📊 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.
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