İ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.
## 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.
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.
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.
## [1] 96
## [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.
## [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.
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"
)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.
## 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.
## [1] 286
Liste bazlı silme yöntemi ile 286 kişilik temiz veri seti elde edilmiştir.
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)| 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 |
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.
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 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.
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")
|
|
|
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ğ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.
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.
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")| 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.
Çoklu regresyon analizi yaparken şu adımları izleyeceğiz:
Ç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)
)İ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")| 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")| 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.
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")| 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")| 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).
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).
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")| 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")| 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).
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ı.