İlişkisel bir çalışmada cinsiyetin, matematiğe değer vermenin, matematiğe karşı tutumun ve matematik öğrenmede kendine güvenin matematik başarısındaki değişkenliği ne kadar açıkladığını araştırmak için çoklu regresyon analizi gerçekleştirilecektir. Çalışma TIMSS 2007 Türkiye uygulamasında 12 ID numaralı başarı testi kitapçığını alan 323 sekizinci sınıf öğrencisi üzerinden yürütülecektir.

Paketleri ve veri setini yükleme

library(haven)
library(dplyr)
library(knitr)
library(ggplot2)
library(naniar)
library(psych)
library(car)
library(broom)
library(magrittr)
library(tidyr)
library(kableExtra)
veri<- read_sav("D:/OLC_733/odev_4/bsgturm4.sav")

a) Veri ön incelemesini yapınız.

Veri doğruluğu

head(veri)
str(veri)
## tibble [323 × 6] (S3: tbl_df/tbl/data.frame)
##  $ IDSTUD  : num [1:323] 10111 10125 20207 30111 40105 ...
##   ..- attr(*, "label")= chr "STUDENT ID"
##   ..- attr(*, "format.spss")= chr "F8.0"
##   ..- attr(*, "display_width")= int 9
##  $ BS4GSEX : dbl+lbl [1:323] 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, ...
##    ..@ label        : chr "GEN\\SEX OF STUDENT"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:3] 1 2 9
##    .. ..- attr(*, "names")= chr [1:3] "GIRL" "BOY" "OMITTED"
##  $ BSMMAT01: num [1:323] 709 661 729 802 374 ...
##   ..- attr(*, "label")= chr "1ST PLAUSIBLE VALUE MATHEMATICS"
##   ..- attr(*, "format.spss")= chr "F6.2"
##   ..- attr(*, "display_width")= int 10
##  $ BSDMPATM: dbl+lbl [1:323]  1,  1,  1,  1,  3,  2,  1,  2,  1,  1,  3,  2, NA,  1...
##    ..@ label        : chr "INDEX STDS POS AFFECT TO MATH (PATM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 10
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"
##  $ BSDMSVM : dbl+lbl [1:323] 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
##    ..@ label        : chr "INDEX OF STUDENTS VALUING MATH (SVM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"
##  $ BSDMSCM : dbl+lbl [1:323]  1,  1,  1,  1, NA,  3,  1, NA,  2,  3,  3,  3,  3,  1...
##    ..@ label        : chr "INDEX OF SELF-CONFID LEARNING MATH (SCM)"
##    ..@ format.spss  : chr "F1.0"
##    ..@ display_width: int 9
##    ..@ labels       : Named num [1:4] 1 2 3 9
##    .. ..- attr(*, "names")= chr [1:4] "HIGH" "MEDIUM" "LOW" "OMITTED"

Analizlerde sorun çıkarabildiği için veri dosyasındaki label etiketlerini kaldırıyoruz.

library(sjlabelled)
veri <- remove_all_labels(veri)

Veri dosyamızdaki değişkenleri kendimiz isimlendiriyoruz.

veri <- veri %>%
  dplyr::rename(
    cinsiyet = BS4GSEX,
    mat_basari = BSMMAT01,
    deger = BSDMPATM,
    tutum = BSDMSVM,
    oz_guven = BSDMSCM)

Veri setimizde temel istatistiklere bakıyoruz.

describe(veri[,-1], fast = T)

Burada cinsiyet için 22, tutum için ise 11 değerinin girildiğini görüyoruz. Bu değerler muhtemel yanıtlar arasında olmadığı için veri girişinde bir hata olduğunu gösteriyor. Veri setinde bu hataların hangi ID numarasına sahip olan bireye ait olduğunu tespit ediyoruz.

which(veri$cinsiyet == 22)
## [1] 96
which(veri$tutum == 11)
## [1] 155

Cinsiyet değişkeni için 96. sıradaki bireyin ID numarası: 400707, Tutum değişkeni için 155. sıradaki bireyin ID numarası: 680204 olduğunu görüyoruz. Bu 2 bireyi veri setinden sileceğiz.

veri <- veri %>%
  dplyr::filter(!(IDSTUD == 400707 & cinsiyet == 22)) %>%
  dplyr::filter(!(IDSTUD == 680204 & tutum == 11))

Artık veri setimizde 321 kişi var.

nrow(veri)
## [1] 321

Veri yapısını anlatan codebook bize gösteriyor ki deger, tutum ve oz_guven değişkenleri kodlanırken 1=yüksek, 2=orta, 3=düşük şeklinde girilmiş. Bunları yeniden kodlayarak 1=düşük, 3=yüksek yapacağız.

veri <- veri %>%
  mutate(
    tutum = 4 - tutum,
    deger = 4 - deger,
    oz_guven = 4 - oz_guven)

Kayıp veri analizi

library(magrittr)
library(dplyr)
library(tidyr)
library(kableExtra)

# Eksik veri özet tablosu
kayip_veri<- veri %>%
  dplyr::select(-IDSTUD) %>%
  dplyr::summarise_all(~ sum(is.na(.))) %>%
  pivot_longer(cols = everything(), names_to = "Degisken", values_to = "Eksik_Deger") %>%
  mutate(Oran = round(100 * Eksik_Deger / nrow(veri), 2))

Eksik verileri tablolaştıralım.

library(gt)

kayip_veri %>%
  gt() %>%
  tab_header(
    title = "Kayıp Veri Ozeti",
    subtitle = "Eksik degerlerin degiskenlere göre dagilimi"
  ) %>%
  fmt_number(columns = vars(Oran), decimals = 2) %>%
  cols_label(
    Degisken = "Degisken",
    Eksik_Deger = "Eksik Deger Sayisi",
    Oran = "Eksik Veri (%)"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_column_labels(everything())
  ) %>%
  tab_options(
    table.width = pct(90),
    table.font.size = "medium",
    heading.align = "center"
  )
Kayıp Veri Ozeti
Eksik degerlerin degiskenlere göre dagilimi
Degisken Eksik Deger Sayisi Eksik Veri (%)
cinsiyet 0 0.00
mat_basari 0 0.00
deger 23 7.17
tutum 7 2.18
oz_guven 21 6.54

Cinsiyet ve matematik başarısı değişkenlerinde kayıp veri olmadığını görüyoruz. Degerde 23, tutum değişkeninde 7 ve oz_guven değişkeninde ise 21 kayıp veri bulunuyor. Bu kayıpların oranları sırasıyla %7.17, %2.18 ve %6.54’tür.

Kayıp verileri grafikle de gösterelim.

ggplot(kayip_veri, aes(x = reorder(Degisken, -Oran), y = Oran, fill = Oran)) +
  geom_bar(stat = "identity", color = "black", width = 0.7) +
  scale_fill_gradient(low = "lightblue", high = "darkblue") +
  labs(
    title = "Degiskenlere Gore Eksik Veri Oranlari",
    x = "Degisken",
    y = "Eksik Veri (%)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "none"
  )

vis_miss(veri)

Veri seti incelendiğinde verilerin 2.6% oranında kayıp veri içerdiği görülüyor. Kayıp verilerle nasıl başedeceğimize karar vermeden önce Little’s MCAR testini uygulayacağız.

library(MissMech)
TestMCARNormality(veri)
## Call:
## TestMCARNormality(data = veri)
## 
## Number of Patterns:  3 
## 
## Total number of cases used in the analysis:  310 
## 
##  Pattern(s) used:
##           IDSTUD   cinsiyet   mat_basari   deger   tutum   oz_guven
## group.1        1          1            1       1       1          1
## group.2        1          1            1       1       1         NA
## group.3        1          1            1      NA       1          1
##           Number of cases
## group.1               286
## group.2                11
## group.3                13
## 
## 
##     Test of normality and Homoscedasticity:
##   -------------------------------------------
## 
## Hawkins Test:
## 
##     P-value for the Hawkins test of normality and homoscedasticity:  1.463842e-06 
## 
##     Either the test of multivariate normality or homoscedasticity (or both) is rejected.
##     Provided that normality can be assumed, the hypothesis of MCAR is 
##     rejected at 0.05 significance level. 
## 
## Non-Parametric Test:
## 
##     P-value for the non-parametric test of homoscedasticity:  0.4193982 
## 
##     Reject Normality at 0.05 significance level.
##     There is not sufficient evidence to reject MCAR at 0.05 significance level.

Little’s MCAR Testi sonucunda Hawkins testi için p-değeri 1.46e-06 bulunmuş ve bu değer 0.05’ten küçük olduğu için veri setinde normallik veya homojenlik varsayımlarından en az biri sağlanmamaktadır. Ancak Non-Parametrik test sonucu p = 0.419 bulunmuş ve bu değer 0.05’ten büyük olduğu için, eksik verilerin tamamen rastgele (MCAR) oluştuğu reddedilememektedir. Bu sonuçlara göre veri setindeki eksik verilerin tamamen rastgele olduğu kabul edilebilir görünüyor. Böylece, eksik verilerle basit yöntemlerle (örneğin liste bazlı silme gibi) başa çıkmak mümkün görünmektedir.

Eksik veri oranını %2.6 olarak bulmuştuk. Veri setinde toplam kayıp veri oranının %5’in altında olması nedeniyle Little’s MCAR Testi sonucunda eksik verilerin tamamen rastgele (MCAR) olduğu görülmüştür. Bu nedenle eksik veriler çıkarılarak (liste bazlı silme) analizlere eksiksiz veri seti ile devam edilecektir.

veri_temiz <- na.omit(veri)

nrow(veri_temiz)
## [1] 286

Liste bazlı silme yöntemi ile 286 kişilik temiz veri seti elde edilmiştir.

describe(veri_temiz[,-1], fast = T)

Uç değerler

Tek değişkenli uç değer analizi

deger, tutum, oz_guven değişkenleri sürekli kabul edilip mat_basari değişkeni ile birlikte tek değişkenli uç değerler analizi ile z-puanı [-3,3] aralığında incelenmiştir.

library(dplyr)
library(outliers)
library(janitor)
library(DT)

veri_surekli <- veri_temiz %>%
  dplyr::select(deger, tutum, oz_guven, mat_basari)

# Z-skorları
z_scores <- as.data.frame(outliers::scores(veri_surekli, type = "z"))
colnames(z_scores) <- c("Z_Deger", "Z_Tutum", "Z_Ozguven", "Z_Basari")

z_scores <- round(z_scores, 2)

# Z-skorlarının min ve max değerleri
z_summary <- data.frame(
  Degisken = names(z_scores),
  Min = sapply(z_scores, min, na.rm = TRUE),
  Max = sapply(z_scores, max, na.rm = TRUE)
)

#tablo ile gösterelim
library(knitr)
kable(z_summary, caption = "Degiskenlerin Z-Skorlari Icin Min ve Max Degerleri", digits = 2)
Table 1: Degiskenlerin Z-Skorlari Icin Min ve Max Degerleri
Degisken Min Max
Z_Deger Z_Deger -3.27 0.43
Z_Tutum Z_Tutum -4.98 0.34
Z_Ozguven Z_Ozguven -1.71 0.87
Z_Basari Z_Basari -3.57 2.94
DT::datatable(z_scores, options = list(pageLength = 10), caption = "Tum Bireylerin Z-Skorlari")

Herhangi bir değişkende z-skoru -3’ten küçük ya da +3’ten büyük olan bireyleri tespit edilerek veri setinden çıkartılmıştır.

uc_deger <- apply(z_scores, 1, function(row) any(row < -3 | row > 3))

# Uç değer içermeyen temiz veri setini oluşturalım
veri_temiz_2 <- veri_temiz[!uc_deger, ]

# Yeni veri setinde kaç birey var
nrow(veri_temiz_2)
## [1] 266

Z-skorları kullanılarak yapılan uç değer analizi sonucunda, ±3 standart sapmanın dışına çıkan bireyler veri setinden çıkarılmıştır. Uç değer içermeyen yeni veri setinde 266 birey kalmıştır.

Şimdi birden fazla değişkeni birlikte dikkate alarak çok değişkenli uç değer analizi için Mahalanobis uzaklığını kullanacağız.

Çok değişkenli uç değer analizi

cov_mat <- cov(veri_temiz_2[, 3:6])

center <- colMeans(veri_temiz_2[, 3:6], na.rm = TRUE)

mahal <- mahalanobis(veri_temiz_2[, 3:6], center, cov_mat)

cutoff <- qchisq(0.975, df = ncol(veri_temiz_2[, 3:6]))

veri_temiz_2$multivariate_outlier <- mahal > cutoff

sum(veri_temiz_2$multivariate_outlier, na.rm = TRUE)
## [1] 20

20 bireyi çok değişkenli uç değer olarak belirledik ve şimdi bu 20 kişiyi veri setimizden çıkaracağız.

veri_temiz_3 <- veri_temiz_2 %>%
  filter(!multivariate_outlier) %>%
  dplyr::select(-multivariate_outlier)

# Yeni veri setinde kaç birey var
nrow(veri_temiz_3)
## [1] 246

246 birey ile analizlere devam edeceğiz. Şimdi veri setinin normallik, varyansların homojenliği gibi sayıltıları sağlayıp sağlamadığını kontrol edeceğiz.

Normallik

Normallik varsayımını değerlendirmek için çarpıklık (skewness) ve basıklık (kurtosis) katsayıları kullanılmıştır. Çarpıklık katsayısının 0’a yakın olması, dağılımın simetrik olduğunu; basıklık katsayısının 3’e yakın olması ise verinin normal dağılım özelliği gösterdiğini ifade eder. Bu nedenle, her iki değerin de mutlak değerinin 1’in altında olması, değişkenin normal dağılım varsayımını büyük ölçüde karşıladığını göstermektedir.

describe(veri_temiz_3[,-1], fast = T)

Değişkenlerin normalliğine ilişkin bulgular çarpıklık ve basıklık katsayıları açısından incelendiğinde, mat_basari puanları ve oz_guven değişkeni normal dağılıma yakın bir dağılım göstermektedir yorumu yapılabilir. deger ve tutum değişkeninin ise normal dağılımdan uzaklaştığı görülmektedir.

Ayrıca, değişkenlerin dağılımlarını görsel olarak incelemek amacıyla grafikler çizilerek ve normal dağılıma uygunlukları bu grafikler üzerinden de değerlendirilmiştir.

library(tidyverse)

veri_temiz_3 %>%
  dplyr::select(tutum, deger, oz_guven, mat_basari) %>%
  pivot_longer(cols = everything(),
               names_to = "Degisken",
               values_to = "Deger") %>%
  ggplot(aes(sample = Deger)) +
  stat_qq(color = "blue") +
  stat_qq_line(color = "red") +
  facet_wrap(~ Degisken, scales = "free") +
  labs(
    title = "Deger, Tutum, Oz Guven ve Matematik Basarisi Degiskenleri",
    x = "Beklenen Degerler (Normal Dağılım)",
    y = "Gozlenen Degerler"
  ) +
  theme_minimal()

mat_basari puanına ilişkin artıkların özellikle düşük değerlerde normal dağılımdan saptığı görülmektedir Bununla birlikte deger ve tutum değişkenlerinin de normal dağılım göstermediği grafikler ile yeniden gözlemlenmiş oldu. Ancak normallik varsayımı için bu analizler yeterli olmayabilir.

Çok değişkenli normallik varsayımını değerlendirmek amacıyla Henze-Zirkler testi uygulanabilir.Bu test, birden fazla değişkenin ortak bir normal dağılım gösterip göstermediğini test etmeye yönelik geliştirilmiştir. Elde edilen p-değeri 0.05’ten küçükse, çok değişkenli normallik varsayımı reddedilir; p-değerinin 0.05’ten büyük olması durumunda ise veri setinin çok değişkenli normal dağılım varsayımını sağladığı kabul edilir.

library(MVN)

mvn(data = veri_temiz_3[, c("tutum", "deger", "oz_guven", "mat_basari")], 
    mvnTest = "hz", 
    multivariatePlot = "qq") %>% kable(caption = "Henze-Zirkler Testi")

Table 2: Henze-Zirkler Testi
Test HZ p value MVN
Henze-Zirkler 23.4706 0 NO
Test Variable Statistic p value Normality
Anderson-Darling tutum 90.1591 <0.001 NO
Anderson-Darling deger 82.0116 <0.001 NO
Anderson-Darling oz_guven 29.6374 <0.001 NO
Anderson-Darling mat_basari 0.8116 0.0354 NO
n Mean Std.Dev Median Min Max 25th 75th Skew Kurtosis
tutum 246 2.959350 0.1978816 3.0000 2.0000 3.0000 3.0000 3.0000 -4.6237985 19.4586627
deger 246 2.906504 0.2917197 3.0000 2.0000 3.0000 3.0000 3.0000 -2.7756207 5.7274017
oz_guven 246 2.426829 0.7233226 3.0000 1.0000 3.0000 2.0000 3.0000 -0.8407007 -0.6485490
mat_basari 246 466.009897 114.0587644 448.9026 184.4775 802.4201 384.5002 547.8892 0.3201743 -0.2103836

Henze-Zirkler testi sonucunda HZ = 23.4706 ve p = 0.000 bulunmuştur. Elde edilen p-değeri 0.05’ten küçük olduğu için, veri setinin çok değişkenli normal dağılım varsayımını sağlamadığı sonucuna varılmıştır. Ayrıca, Anderson-Darling testleri de her bir değişken için ayrı ayrı uygulanmış ve tüm değişkenlerde (tutum, değer, öz güven ve matematik başarısı) normal dağılım varsayımı reddedilmiştir (p < 0.05). Çarpıklık (skewness) ve basıklık (kurtosis) değerleri de özellikle tutum ve değer değişkenlerinde önemli sapmalar olduğunu göstermektedir.

Varyansların homojenliği

Varyansların homojenliğini kontrol etmek için Levene Testi uygulayacağız.

library(car)
library(dplyr)
library(tidyr)
library(knitr)
library(kableExtra)

veri_temiz_3$cinsiyet <- as.factor(veri_temiz_3$cinsiyet)
veri_temiz_3$oz_guven <- as.factor(veri_temiz_3$oz_guven)
veri_temiz_3$deger <- as.factor(veri_temiz_3$deger)
leveneTest(mat_basari ~ oz_guven * cinsiyet * deger, data = veri_temiz_3[,-1]) %>% 
  kable(.,digits = 3)
Df F value Pr(>F)
group 11 2.123 0.02
234 NA NA

Levene Testi sonucunda F = 429.0125 ve p = 0.000 elde edilmiştir. Elde edilen p-değeri 0.05’ten küçük olduğu için, varyansların homojenliği varsayımı reddedilmiştir. Bu bulgu, tutum, değer ve öz güven değişkenlerinin varyanslarının birbirine eşit olmadığını göstermektedir.

Analizde normallik ve varyans homojenliği sorunları olduğunda, bazı ek analizler yaparak değişkenler arasındaki ilişkilerin doğasını daha iyi anlayabiliriz.

Bunlardan biri de değişkenler arası korelasyon analizidir.

Korelasyon analizi

library(corrplot)

# Spearman korelasyon matrisi
cor_matrix <- cor(veri_surekli, method = "spearman", use = "complete.obs")

corrplot(cor_matrix, 
         method = "circle",     
         type = "upper",        
         tl.col = "black",      
         tl.srt = 45,           
         addCoef.col = "black", 
         number.cex = 0.7,      
         title = "Degiskenler Arasi Spearman Korelasyonu", 
         mar = c(0, 0, 2, 0))

Korelasyon matrisine göre “başarı” değişkeni ile “öz güven” arasında orta düzeyde pozitif bir ilişki vardır (r = 0.45), bu durum başarı düzeyi arttıkça güven düzeyinin de arttığı anlamına gelir. “Başarı” ile “değer” (r = 0.09) ve “tutum” (r = 0.02) arasında oldukça düşük hatta nötr düzeyde pozitif ilişkiler mevcuttur. “Tutum” ile “öz güven” arasında zayıf düzeyde pozitif bir ilişki gözlenmiştir (r = 0.15). “Tutum” ile “değer” arasındaki zayıf düzeyde pozitif bir ilişki gözlenmiştir (r = 0.18). Son olarak, “değer” ile “güven” arasındaki korelasyon zayıf düzeyde pozitif yöndedir (r = 0.32). Elde edilen sonuçlara göre en güçlü ilişki başarı ile öz güven arasındadır.

Çoklu bağlantılılık testi

Multicollinearity testi için VIF (Variance Inflation Factor) değerini hessaplayacağız. VIF, bir bağımsız değişkenin diğer bağımsız değişkenlerle ne kadar ilişkili olduğunu ölçer.

VIF = 1 → Değişken tamamen bağımsızdır.

VIF > 5 → Belirgin çoklu doğrusal bağlantı şüphesi vardır.

VIF > 10 → Ciddi çoklu doğrusal bağlantı problemi vardır, modele zarar verebilir.

library(car)

vif_model <- lm(mat_basari ~ tutum + deger + oz_guven, data = veri_surekli)
vif_values <- vif(vif_model) 
tolerance_values <- 1 / vif_values
vif_results <- data.frame(
  Degisken = names(vif_values),
  VIF = round(vif_values, 2),
  Tolerans = round(tolerance_values, 2)
) 
vif_results %>%
  kable(caption = "VIF ve Tolerans Degerleri") %>%
  kable_styling(full_width = T, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2, color = "red") %>%
  column_spec(3, color = "blue") %>%
  kable_styling(latex_options = c("striped", "hold_position")) %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(vif_results), background = "#F6F6F6")
Table 3: Table 4: VIF ve Tolerans Degerleri
Degisken VIF Tolerans
tutum tutum 1.06 0.95
deger deger 1.17 0.85
oz_guven oz_guven 1.17 0.86

Vif ve tolerans değerlerine göre çoklu bağlantılılık sorunu olmadığı görülmektedir.

burayı yaparken biraz zorlandım , arkadaşların rpubs sayfalarından yardım aldım.

b) Çoklu regresyon analizini gerçekleştirin.

Çoklu regresyon analizi yaparken şu adımları izleyeceğiz:

  • Temel çoklu regresyon modelini kurmak (bütün değişkenlerle)
  • Aşamalı regresyon (Stepwise Regression) ile en iyi değişkenleri seçmek
  • Aracı Etki Analizi (Mediation) yapmak
  • Düzenleyici Etki Analizi (Moderation) yapmak
  • En iyi modeli seçip sonuçları yorumlamak

Çoklu regresyon analizi yaparken kategorik değişkenler mutlaka dummy değişken (0-1 kodlu ikili değişken) haline getirilmelidir. Cinsiyet değişkeni (BS4GSEX) de kategorik bir değişken olduğu için dummy değişken olarak modele dahil edilmelidir.

library(dplyr)

# BS4GSEX: 1 = Kiz, 2 = Erkek, Erkekleri 1 Kizları 0 yaptik
veri_temiz_3 <- veri_temiz_3 %>%
  mutate(cinsiyet = ifelse(cinsiyet == 2, 1, 0))

Kodumuzda dummy 0-1 kodlama yaptığımız için Referans grup = 0 (otomatik) olarak ele alınacak. Yani kızlar referans grup olacak. “Erkeklerin matematik başarısı kızlara göre ortalama şu kadar fazladır/azdır.” şeklinde yorumlarda bulunabileceğiz.

Ayrıca diğer değişkenleri de numeric olarak kodlamamız gerekiyor (mat_basari hariç).

veri_temiz_3 <- veri_temiz_3 %>%
  mutate(
    deger = as.numeric(deger),
    tutum = as.numeric(tutum),
    oz_guven = as.numeric(oz_guven)
  )

Temel çoklu regresyon modeli

library(MASS)

İlk modelde:

Bağımlı değişken: mat_basari (BSMMAT01)

Bağımsız değişkenler: deger (BSDMPATM), tutum (BSDMSVM), oz_guven (BSDMSCM) ve Cinsiyet Dummy

model_temel <- lm(mat_basari ~ deger + tutum + oz_guven + cinsiyet, data = veri_temiz_3)

# Model özetini görüntüleyelim
summary(model_temel)
## 
## Call:
## lm(formula = mat_basari ~ deger + tutum + oz_guven + cinsiyet, 
##     data = veri_temiz_3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -245.560  -61.881   -7.527   66.377  270.598 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  216.420    104.832   2.064   0.0400 *  
## deger          8.801     21.767   0.404   0.6863    
## tutum          7.063     31.407   0.225   0.8223    
## oz_guven      79.743      8.761   9.102   <2e-16 ***
## cinsiyet      37.383     12.379   3.020   0.0028 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 96.99 on 241 degrees of freedom
## Multiple R-squared:  0.2887, Adjusted R-squared:  0.2769 
## F-statistic: 24.45 on 4 and 241 DF,  p-value: < 2.2e-16

Çıktıları tablolaştırdık. (bunun kısımlar için chatgpt’den yardım aldım.)

library(broom)
library(dplyr)
library(knitr)
library(kableExtra)

# Model genel istatistiklerini çekelim
model_temel_ozet <- glance(model_temel)

# İstatistik tablosunu oluşturalım
istatistik_tablo <- data.frame(
  Statistic = c("Residual Standard Error", 
                "Multiple R-squared", 
                "Adjusted R-squared", 
                "F-statistic (p-value)"),
  Value = c(
    round(model_temel_ozet$sigma, 2),
    round(model_temel_ozet$r.squared, 4),
    round(model_temel_ozet$adj.r.squared, 4),
    paste0(round(model_temel_ozet$statistic, 2), " (p ", ifelse(model_temel_ozet$p.value < 0.001, "< 0.001", paste0("= ", round(model_temel_ozet$p.value, 3))), ")")
  ),
  stringsAsFactors = FALSE
)

# Tablolaştırıp gösterelim
istatistik_tablo %>%
  kable(caption = "Regression Model Summary", format = "html") %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(istatistik_tablo), background = "#F6F6F6")
Table 5: Regression Model Summary
Statistic Value
Residual Standard Error 96.99
Multiple R-squared 0.2887
Adjusted R-squared 0.2769
F-statistic (p-value) 24.45 (p < 0.001)

Modelin genel açıklayıcılık gücü orta düzeydedir (R² = 0.2887), yani bağımsız değişkenler matematik başarısındaki toplam varyansın yaklaşık %28.87’sini açıklamaktadır. Model genel anlamda istatistiksel olarak anlamlıdır (F(4, 241) = 24.45, p < 0.001).

library(broom)
library(dplyr)
library(knitr)
library(kableExtra)

# Modeli tidy formatına çevirelim
model_temel_tidy <- broom::tidy(model_temel)

# p-değerlerine göre anlamlılık yıldızları ekleyelim
model_temel_tidy <- model_temel_tidy %>%
  mutate(Significance = case_when(
    p.value < 0.001 ~ "***",
    p.value < 0.01  ~ "**",
    p.value < 0.05  ~ "*",
    p.value < 0.10  ~ ".",
    TRUE ~ ""
  ))

# Tablolaştırıp estetik hale getirelim
model_temel_tidy %>%
  dplyr::select(term, estimate, std.error, statistic, p.value, Significance) %>%
  dplyr::rename(
    Degisken = term,
    B_Katsayisi = estimate,
    Std_Hata = std.error,
    t_Degeri = statistic,
    p_Degeri = p.value,
    Anlamlilik = Significance
  ) %>%
  kable(caption = "Temel Coklu Regresyon Modeli Sonuclari", digits = 3) %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2:6, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(model_temel_tidy), background = "#F6F6F6")
Table 6: Table 7: Temel Coklu Regresyon Modeli Sonuclari
Degisken B_Katsayisi Std_Hata t_Degeri p_Degeri Anlamlilik
(Intercept) 216.420 104.832 2.064 0.040
deger 8.801 21.767 0.404 0.686
tutum 7.063 31.407 0.225 0.822
oz_guven 79.743 8.761 9.102 0.000 ***
cinsiyet 37.383 12.379 3.020 0.003 **

Temel çoklu regresyon modeli sonucunda, matematik başarısını anlamlı şekilde yordayan değişkenlerin oz_guven ve cinsiyet olduğu görülmüştür. Öz Güven puanı arttıkça, öğrencinin matematik başarısı da anlamlı bir şekilde artmaktadır. Öz Güven değişkeninin katsayısı 79.743 olup, bu değişken matematik başarısını güçlü şekilde pozitif yönde yordamaktadır (p < 0.001). Cinsiyet değişkeni de anlamlı bulunmuş (p = 0.0028); erkek öğrencilerin, kız öğrencilere göre ortalama 37.383 puan daha yüksek matematik başarısına sahip olduğu belirlenmiştir. Ancak Değer ve Tutum değişkenlerinin matematik başarısını yordamada anlamlı bir etkisinin olmadığı görülmüştür (p > 0.05).

Temel çoklu regresyon modeli, bütün değişkenlerin etkisini görmek için kurulur. Aşamalı regresyon (stepwise regression) sürecinde, model seçimi yapabilmek için tüm aday değişkenleri içeren bir “tam model” (model_full) tanımlanır. Bu model üzerinden değişken ekleme ve çıkarma işlemleri gerçekleştirilir.

Aşamalı regresyon modeli

model_tam <- lm(mat_basari ~ deger + tutum + oz_guven + cinsiyet, data = veri_temiz_3)

model_stepwise <- stepAIC(model_tam, 
                          direction = "both",
                          trace = FALSE)

summary(model_stepwise)
## 
## Call:
## lm(formula = mat_basari ~ oz_guven + cinsiyet, data = veri_temiz_3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -244.927  -60.225   -5.853   67.822  271.232 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  252.324     22.422  11.254  < 2e-16 ***
## oz_guven      80.445      8.535   9.425  < 2e-16 ***
## cinsiyet      37.529     12.324   3.045  0.00258 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 96.63 on 243 degrees of freedom
## Multiple R-squared:  0.2881, Adjusted R-squared:  0.2822 
## F-statistic: 49.17 on 2 and 243 DF,  p-value: < 2.2e-16

Çıktıları tablolaştırdık. (bunun kısımlar için chatgpt’den yardım aldım.)

library(broom)
library(dplyr)
library(knitr)
library(kableExtra)

# Modeli tidy formatına çevirelim
model_stepwise_tidy <- broom::tidy(model_stepwise)

# p-değerlerine göre anlamlılık yıldızları ekleyelim
model_stepwise_tidy <- model_stepwise_tidy %>%
  dplyr::mutate(Significance = case_when(
    p.value < 0.001 ~ "***",
    p.value < 0.01  ~ "**",
    p.value < 0.05  ~ "*",
    p.value < 0.10  ~ ".",
    TRUE ~ ""
  ))

# Değişkenleri seçelim ve isimlendirelim
model_stepwise_tidy %>%
  dplyr::select(term, estimate, std.error, statistic, p.value, Significance) %>%
  dplyr::rename(
    Degisken = term,
    B_Katsayisi = estimate,
    Std_Hata = std.error,
    t_Degeri = statistic,
    p_Degeri = p.value,
    Anlamlilik = Significance
  )
# Şık tablo oluşturalım
model_stepwise_tidy %>%
  kable(caption = "Stepwise Regresyon Sonuçları", digits = 3) %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2:6, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(model_stepwise_tidy), background = "#F6F6F6")
Table 8: Table 9: Stepwise Regresyon Sonuçları
term estimate std.error statistic p.value Significance
(Intercept) 252.324 22.422 11.254 0.000 ***
oz_guven 80.445 8.535 9.425 0.000 ***
cinsiyet 37.529 12.324 3.045 0.003 **

Stepwise regresyon sonucunda, matematik başarısını anlamlı şekilde yordayan iki değişkenin Öz Güven ve Cinsiyet olduğu görülmüştür. Öz Güven değişkeninin katsayısı 80.445 olup, özgüven seviyesi arttıkça öğrencinin matematik başarısının anlamlı şekilde arttığı bulunmuştur (p < 0.001). Cinsiyet değişkeni de anlamlı bulunmuş (p = 0.00258), erkek öğrencilerin kız öğrencilere kıyasla ortalama 37.529 puan daha yüksek matematik başarısına sahip olduğu belirlenmiştir.

model_stepwise_ozet <- glance(model_stepwise)

istatistik_tablo_stepwise <- data.frame(
  Statistic = c("Residual Standard Error", 
                "Multiple R-squared", 
                "Adjusted R-squared", 
                "F-statistic (p-value)"),
  Value = c(
    round(model_stepwise_ozet$sigma, 2),
    round(model_stepwise_ozet$r.squared, 4),
    round(model_stepwise_ozet$adj.r.squared, 4),
    paste0(round(model_stepwise_ozet$statistic, 2), " (p ", ifelse(model_stepwise_ozet$p.value < 0.001, "< 0.001", paste0("= ", round(model_stepwise_ozet$p.value, 3))), ")")
  ),
  stringsAsFactors = FALSE
)

istatistik_tablo_stepwise %>%
  kable(caption = "Stepwise Regresyon Modeli İstatistik Özeti") %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(istatistik_tablo_stepwise), background = "#F6F6F6")
Table 10: Table 11: Stepwise Regresyon Modeli İstatistik Özeti
Statistic Value
Residual Standard Error 96.63
Multiple R-squared 0.2881
Adjusted R-squared 0.2822
F-statistic (p-value) 49.17 (p < 0.001)

Modelin açıklayıcılığı orta düzeydedir (R² = 0.2881), yani bağımsız değişkenler matematik başarısındaki varyansın yaklaşık %28.8’ini açıklamaktadır. Model genel olarak istatistiksel açıdan oldukça anlamlıdır (F(2, 243) = 49.17, p < 0.001).

Aracı etki modeli (Mediation)

Cinsiyetin matematik başarısına etkisi doğrudan mı?

Yoksa öz güven üzerinden dolaylı mı etkiliyor?

Bağımsız Değişken (X) = Cinsiyet (cinsiyet)

Aracı Değişken (M) = Öz Güven (oz_guven)

Bağımlı Değişken (Y) = Matematik Başarısı (mat_basari)

Önce iki model kuracağız:

  • Aracı Model (M ~ X) → Cinsiyetin öz güven üzerindeki etkisi

  • Sonuç Modeli (Y ~ X + M) → Cinsiyet ve öz güven birlikte matematik başarısını nasıl etkiliyor?

Sonra mediation testi yapacağız.

Bu çalışmada, cinsiyetin matematik başarısına etkisinde, öz güvenin olası bir aracı rolü olup olmadığı incelenmiştir. Cinsiyet, doğuştan gelen sabit bir faktör olduğu için bağımsız değişken; öz güven, öğrencinin kendine yönelik algısı olarak aracı değişken; matematik başarısı ise bağımlı değişken olarak belirlenmiştir.

Bu çalışmada, aracı etki analizi Bootstrap yöntemi ile gerçekleştirilmiştir. Bootstrap, dolaylı etkinin güvenilir tahmin edilmesini sağlar ve klasik parametrik varsayımlara bağlı kalmaksızın sonuçlar üretir. 5000 örneklem tekrarı (sims = 5000) kullanılarak güven aralıkları hesaplanmıştır.

library(mediation)

model_mediation <- lm(oz_guven ~ cinsiyet, data = veri_temiz_3)

model_sonuc <- lm(mat_basari ~ cinsiyet + oz_guven, data = veri_temiz_3)

# Mediation analizi
mediation_model <- mediate(model_mediation, model_sonuc, 
                           treat = "cinsiyet", mediator = "oz_guven",
                           boot = TRUE, sims = 5000)

# Sonuçları gösterelim
summary(mediation_model)
## 
## Causal Mediation Analysis 
## 
## Nonparametric Bootstrap Confidence Intervals with the Percentile Method
## 
##                Estimate 95% CI Lower 95% CI Upper p-value   
## ACME             0.4627     -13.5424        15.02  0.9720   
## ADE             37.5294      13.4755        61.12  0.0012 **
## Total Effect    37.9921       9.8928        65.45  0.0076 **
## Prop. Mediated   0.0122      -0.8177         0.35  0.9644   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 246 
## 
## 
## Simulations: 5000

Aracı etki analizi sonuçlarına göre, cinsiyetin matematik başarısına etkisinde öz güvenin aracılık rolü bulunmamıştır (ACME = 0.4627, p = 0.9720). Öz güvenin dolaylı etkisi istatistiksel olarak anlamlı değildir ve güven aralığı sıfırı kapsamaktadır.

Bununla birlikte, cinsiyetin matematik başarısına doğrudan etkisi anlamlı bulunmuştur (ADE = 37.5294, p = 0.0012) ve toplam etki de istatistiksel olarak anlamlıdır (Toplam Etki = 37.9921, p = 0.0076). Aracılık oranı yalnızca %1.22 olup, bu oran da anlamlı bulunmamıştır (p = 0.9644).

Sonuç olarak, cinsiyetin matematik başarısına etkisi esasen doğrudan gerçekleşmekte olup, öz güven bu ilişkiye anlamlı bir aracılık yapmamaktadır.

Cinsiyet değişkeninin doğrudan etkisi erkeklerin lehinedir. Erkek öğrenciler, kız öğrencilere göre ortalama 37.5 puan daha yüksek matematik başarısına sahiptirler (p = 0.0012).

Düzenleyici etki modeli(moderation)

Burada inceleyeceğimiz soruyu basitçe ifade edersek eğer:

“Öz güven ile matematik başarısı arasındaki ilişki, cinsiyete göre değişiyor mu?”

Burada, öz güven × cinsiyet etkileşim terimini modele ekleyeceğiz.

model_moderation <- lm(mat_basari ~ oz_guven * cinsiyet, data = veri_temiz_3)

summary(model_moderation)
## 
## Call:
## lm(formula = mat_basari ~ oz_guven * cinsiyet, data = veri_temiz_3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -247.058  -61.102   -3.571   67.122  269.101 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        260.718     30.041   8.679 5.98e-16 ***
## oz_guven            76.982     11.867   6.487 4.90e-10 ***
## cinsiyet            20.057     43.325   0.463    0.644    
## oz_guven:cinsiyet    7.199     17.112   0.421    0.674    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 96.8 on 242 degrees of freedom
## Multiple R-squared:  0.2886, Adjusted R-squared:  0.2798 
## F-statistic: 32.73 on 3 and 242 DF,  p-value: < 2.2e-16

Çıktıları tablolaştırdık. (bunun kısımlar için chatgpt’den yardım aldım.)

library(broom)
library(dplyr)
library(knitr)
library(kableExtra)

# Model genel istatistiklerini çekelim
model_moderation_ozet <- glance(model_moderation)

# İstatistik tablosunu oluşturalım
moderation_summary_table <- data.frame(
  istatistik = c("Residual Standard Error", 
                 "Multiple R-squared", 
                 "Adjusted R-squared", 
                 "F-statistic (p-value)"),
  Deger = c(
    round(model_moderation_ozet$sigma, 2),
    round(model_moderation_ozet$r.squared, 4),
    round(model_moderation_ozet$adj.r.squared, 4),
    paste0(round(model_moderation_ozet$statistic, 2), " (p ", ifelse(model_moderation_ozet$p.value < 0.001, "< 0.001", paste0("= ", round(model_moderation_ozet$p.value, 3))), ")")
  ),
  stringsAsFactors = FALSE
)

# Şık tabloyu oluşturalım
moderation_summary_table %>%
  kable(caption = "Duzenleyici Etki (Moderation) Modeli Ozet Istatistikleri", digits = 4) %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(moderation_summary_table), background = "#F6F6F6")
Table 12: Table 13: Duzenleyici Etki (Moderation) Modeli Ozet Istatistikleri
istatistik Deger
Residual Standard Error 96.8
Multiple R-squared 0.2886
Adjusted R-squared 0.2798
F-statistic (p-value) 32.73 (p < 0.001)

Model genel olarak istatistiksel açıdan anlamlıdır (R² = 0.2886, F(3, 242) = 32.73, p < 0.001).

Bağımsız değişkenler matematik başarısındaki varyansın yaklaşık %28.86’sını açıklamaktadır.

library(broom)
library(dplyr)
library(knitr)
library(kableExtra)

# Moderasyon modelini tidy formatına çevirelim
model_moderation_tidy <- broom::tidy(model_moderation)

# Anlamlılık yıldızları ekleyelim
model_moderation_tidy <- model_moderation_tidy %>%
  dplyr::mutate(Significance = case_when(
    p.value < 0.001 ~ "***",
    p.value < 0.01  ~ "**",
    p.value < 0.05  ~ "*",
    p.value < 0.10  ~ ".",
    TRUE ~ ""
  ))

# Seçim ve isimlendirme işlemleri
model_moderation_tidy_clean <- model_moderation_tidy %>%
  dplyr::select(term, estimate, std.error, statistic, p.value, Significance) %>%
  dplyr::rename(
    Degisken = term,
    B_Katsayisi = estimate,
    Std_Hata = std.error,
    t_Degeri = statistic,
    p_Degeri = p.value,
    Anlamlilik = Significance
  )

# Şık tabloyu oluşturalım
model_moderation_tidy_clean %>%
  kable(caption = "Duzenleyici Etki (Moderation) Analizi Sonuclari", digits = 3) %>%
  kable_styling(full_width = TRUE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  column_spec(2:6, color = "black") %>%
  row_spec(0, bold = TRUE, background = "#D9EAD3") %>%
  row_spec(1:nrow(model_moderation_tidy_clean), background = "#F6F6F6")
Table 14: Table 15: Duzenleyici Etki (Moderation) Analizi Sonuclari
Degisken B_Katsayisi Std_Hata t_Degeri p_Degeri Anlamlilik
(Intercept) 260.718 30.041 8.679 0.000 ***
oz_guven 76.982 11.867 6.487 0.000 ***
cinsiyet 20.057 43.325 0.463 0.644
oz_guven:cinsiyet 7.199 17.112 0.421 0.674

Bu çalışmada, öz güvenin matematik başarısına etkisinin cinsiyete göre değişip değişmediği incelenmiştir.

Moderasyon analizi sonucunda, öz güvenin matematik başarısına olan etkisinin anlamlı ve güçlü olduğu bulunmuştur (B = 76.982, p < 0.001). Ancak cinsiyet değişkeninin doğrudan etkisi (B = 20.057, p = 0.644) ve öz güven × cinsiyet etkileşim terimi (B = 7.199, p = 0.674) anlamlı bulunmamıştır.

Bu bulgular, öz güvenin matematik başarısına olan etkisinin cinsiyete göre farklılık göstermediğini, yani hem kız hem de erkek öğrenciler için öz güvenin matematik başarısı üzerinde benzer bir etkisinin olduğunu göstermektedir. Model genel olarak istatistiksel açıdan anlamlıdır (R² = 0.2886, F(3, 242) = 32.73, p < 0.001).

Genel değerlendirme

  • Matematik başarısının en güçlü yordayıcısı öğrencilerin öz güven düzeyi olmuştur.

  • Cinsiyet, matematik başarısını doğrudan etkilemektedir; erkek öğrenciler, kız öğrencilerden daha yüksek matematik başarısı göstermiştir.

  • Ancak, öz güven değişkeni bu ilişkiye aracı olmamış, yani cinsiyet farklılığı doğrudan başarı farkı yaratmıştır.

  • Ayrıca, öz güven ile başarı arasındaki ilişki, cinsiyete göre farklılık göstermemiştir.

Ödev için cumartesi ve pazar kütüphaneye gittim, sanırım yaklaşık 10 saatimi aldı tamamlamak. Tablolaştırmalar için chatgpt’den yardım aldım çünkü çok zamanımı aldı.