Gerekli paketler ve Veri Setlerinin Yüklenmesi
library(broom)
library(DT)
library(dplyr)
library(forcats)
library(ggplot2)
library(haven)
library(interactions)
library(kableExtra)
library(ltm)
library(mirt)
library(mlmRev)
library(knitr)
library(psych)
library(sjlabelled)
library(tidyverse)
load("C:/Users/Lenovo/Desktop/PISA_STU_2022.rda")
data <- PISA_STU_2021
binary_data <- readRDS("C:/Users/Lenovo/Desktop/binary.Rds")
maddepar <- readRDS("C:/Users/Lenovo/Desktop/maddepar.Rds")
maddepar <- as.data.frame(maddepar)
remove_all_labels(data)
Soru 1
a) Okul Türüne Göre Matematik Başarı Analizi
PISA_STU_2021 <- PISA_STU_2021 %>%
mutate(STRATUM = as_factor(STRATUM))
mean_math_by_stratum <- PISA_STU_2021 %>%
group_by(STRATUM) %>%
summarise(Mean_PV1MATH = mean(PV1MATH, na.rm = TRUE)) %>%
arrange(desc(Mean_PV1MATH))
ggplot(mean_math_by_stratum, aes(x = fct_reorder(STRATUM, Mean_PV1MATH), y = Mean_PV1MATH)) +
geom_col(aes(fill = Mean_PV1MATH), width = 0.6) +
geom_text(aes(label = round(Mean_PV1MATH, 1)),
hjust = -0.1, size = 2.5) +
coord_flip(clip = "off") +
scale_fill_gradient(low = "#cce5ff", high = "#004c99") +
labs(
title = "Okul Türüne Göre Ortalama Matematik Puanı",
x = NULL,
y = "Ortalama Matematik Puanı",
fill = "Ortalama"
) +
theme_minimal(base_size = 10) +
theme(
plot.title = element_text(face = "bold", size = 11),
axis.text.y = element_text(size = 7.5),
panel.grid.major.y = element_blank(),
plot.margin = margin(10, 20, 10, 10)
) +
ylim(0, max(mean_math_by_stratum$Mean_PV1MATH) + 30)
Grafik, okul türleri arasında anlamlı düzeyde başarı farklılıkları olduğunu açıkça ortaya koymaktadır. En yüksek ortalama başarıya sahip okul türleri arasında TUR02, TUR03 ve TUR08 kodlu okullar öne çıkmaktadır. Bu okul türlerinde öğrencilerin ortalama matematik puanları oldukça yüksek düzeydedir ve genel başarı sıralamasında ilk sıralarda yer almaktadır. Bu durum, söz konusu okul türlerinde sunulan eğitimin niteliğinin daha yüksek olabileceğine, öğrencilerin akademik olarak daha güçlü bir profilden geldiğine ya da her iki etkenin bir arada etkili olduğuna işaret etmektedir.
TUR01, TUR36 ve TUR25 gibi okul türleri ise listenin en alt sıralarında yer almakta ve ortalama matematik puanları belirgin şekilde daha düşüktür. Bu durum, bu okul türlerinde öğrenim gören öğrencilerin matematik başarısının görece düşük olduğunu göstermektedir. Söz konusu farklılıkların altında yatan nedenler çeşitli olabilir. Bunlar arasında öğretim kadrosunun niteliği, okulun fiziksel ve pedagojik altyapısı, öğrencilerin sosyoekonomik düzeyi ve okul türünün eğitimde öncelik verdiği hedefler gibi faktörler sayılabilir.
Grafikte dikkat çeken bir diğer unsur ise okul türleri arasında yaklaşık 200 puana varan bir başarı farkının bulunmasıdır. Bu fark, öğrencilerin okul türlerine göre akademik anlamda oldukça farklı koşullarda eğitim gördüğünü ve bu durumun ölçülebilir başarı düzeylerine doğrudan yansıdığını göstermektedir.
Analiz sonuçları, okul türlerinin öğrencilerin matematik başarısı üzerinde önemli bir etkisi olduğunu ortaya koymaktadır. Bu durum, eğitim politikalarının okul türleri arasındaki başarı eşitsizliklerini azaltmaya yönelik biçimlendirilmesi gerektiğini göstermektedir. Özellikle düşük başarı düzeyine sahip okul türlerine yönelik destekleyici müdahalelerin planlanması, eğitimde fırsat eşitliğinin sağlanması açısından önem arz etmektedir.
b) Cinsiyet ve Okul Türüne Göre Matematik Başarı Analizi
PISA_STU_2021 <- PISA_STU_2021 %>%
mutate(
Gender = case_when(
ST004D01T == 1 ~ "Erkek",
ST004D01T == 2 ~ "Kız",
TRUE ~ NA_character_
),
STRATUM = as_factor(STRATUM)
)
mean_math_gender_stratum <- PISA_STU_2021 %>%
group_by(STRATUM, Gender) %>%
summarise(
Mean_PV1MATH = mean(PV1MATH, na.rm = TRUE),
.groups = "drop"
)
stratum_adlari <- mean_math_gender_stratum %>%
distinct(STRATUM) %>%
mutate(stratum_kisa = paste0("S", row_number()))
mean_math_gender_stratum <- mean_math_gender_stratum %>%
left_join(stratum_adlari, by = "STRATUM")
ggplot(mean_math_gender_stratum, aes(x = fct_reorder(stratum_kisa, Mean_PV1MATH), y = Mean_PV1MATH, fill = Gender)) +
geom_col(position = position_dodge(width = 0.8), width = 0.6) +
geom_text(
aes(label = round(Mean_PV1MATH, 1)),
position = position_dodge(width = 0.8),
hjust = -0.1,
size = 1.8,
color = "black"
) +
coord_flip(clip = "off") +
scale_fill_manual(values = c("Kız" = "#377eb8", "Erkek" = "#e41a1c")) +
labs(
title = "Okul Türü ve Cinsiyete Göre Ortalama Matematik Puanı",
x = "Okul Türü",
y = "Ortalama Matematik Puanı",
fill = "Cinsiyet"
) +
theme_minimal(base_size = 9) +
theme(
plot.title = element_text(face = "bold", size = 10),
axis.text.y = element_text(size = 7),
legend.position = "bottom"
)
Farklı okul türlerinde (STRATUM) erkek öğrencilerin matematik başarısının genellikle kız öğrencilerden daha yüksek olduğu görülmüştür.
Bu fark bazı okul türlerinde oldukça belirgindir. Örneğin TUR01, TUR29 ve TUR11 gibi türlerde erkek öğrenciler kızlara göre 30 puan civarında daha yüksek ortalamalara sahiptir.
Buna karşın bazı okul türlerinde, örneğin TUR22, TUR25 ve TUR31’de, kız ve erkek öğrenciler arasında neredeyse hiç fark yoktur.
Genel olarak, okul türleri arasında hem başarı düzeylerinde hem de cinsiyetler arası farklarda belirgin farklılıklar bulunmaktadır. Bu durum, okulun bulunduğu bölge, sosyoekonomik yapı, eğitim kalitesi gibi etkenlerle ilişkili olabilir.
c) Matematik Kaygısı ve Matematik Başarısı Arasındaki İlişki
df <- PISA_STU_2021 %>%
mutate(
ANXMAT = as.numeric(ANXMAT),
PV1MATH = as.numeric(PV1MATH)
) %>%
filter(!is.na(ANXMAT), !is.na(PV1MATH))
korelasyon <- cor(df$ANXMAT, df$PV1MATH)
cat("Matematik Kaygısı (ANXMAT) ile Matematik Başarısı (PV1MATH) arasındaki korelasyon katsayısı:", korelasyon, "\n")
## Matematik Kaygısı (ANXMAT) ile Matematik Başarısı (PV1MATH) arasındaki korelasyon katsayısı: -0.118232
ggplot(df, aes(x = ANXMAT, y = PV1MATH)) +
geom_point(alpha = 0.1, color= "darkblue") +
geom_smooth(method = "lm", se = FALSE, color = "red") +
annotate("text", x = Inf, y = Inf,
label = paste("r =", round(korelasyon, 3)),
hjust = 1.1, vjust = 1.5, size = 5) +
labs(
title = "Matematik Kaygısı ile Matematik Başarısı Arasındaki İlişki",
x = "Matematik Kaygısı (ANXMAT)",
y = "Matematik Başarısı (PV1MATH)"
) +
theme_minimal()
Korelasyon katsayısı (r = -0.118) bu ilişkinin yönünün negatif, grafik eğimi şiddetinin zayıf olduğunu ortaya koymaktadır. Yani matematik kaygısı arttıkça matematik başarısının azalma eğiliminde olduğu görülmektedir; ancak bu etki düşük düzeyde ve istatistiksel olarak sınırlı bir açıklayıcılığa sahiptir.
d) Okul Türlerine Göre Matematik Kaygısı ve Başarı İlişkisi
df <- PISA_STU_2021 %>%
mutate(
STRATUM = as_factor(STRATUM),
ANXMAT = as.numeric(ANXMAT),
PV1MATH = as.numeric(PV1MATH)
) %>%
filter(!is.na(ANXMAT), !is.na(PV1MATH))
ggplot(df, aes(x = ANXMAT, y = PV1MATH)) +
geom_point(alpha = 0.1, size = 0.2, color="darkblue") +
geom_smooth(method = "lm", se = TRUE, color = "red") +
facet_wrap(~ STRATUM, scales = "free_y") +
labs(
title = "Matematik Kaygısı ile Başarı Arasındaki İlişki (Okul Türlerine Göre)",
x = "Matematik Kaygısı (ANXMAT)",
y = "Matematik Başarısı (PV1MATH)"
) +
theme_minimal(base_size = 9)
Genel olarak, pek çok okul türünde eğrinin hafif eğimli ve aşağıya doğru olması, matematik kaygısı arttıkça matematik başarısının azaldığını göstermektedir. Bu durum, iki değişken arasında negatif yönlü bir ilişki olduğunu ortaya koymaktadır. Ancak bu ilişkinin şiddeti okul türlerine göre değişiklik göstermektedir.
Bazı okul türlerinde (örneğin TUR02, TUR06, TUR08, TUR20, TUR23) negatif ilişki daha belirgin görünmektedir. Bu okul türlerinde matematik kaygısı ile başarı arasındaki ilişki daha güçlüdür ve kaygının artması başarıyı daha fazla düşürmektedir. Bu da, bu tür okullarda öğrencilerin duygusal durumlarının akademik performansları üzerinde daha etkili olabileceğini düşündürmektedir.
Öte yandan bazı okul türlerinde (örneğin TUR17, TUR18, TUR31, TUR35) eğri neredeyse yataydır. Bu da kaygı düzeyi ile başarı arasında anlamlı bir ilişki olmadığını göstermektedir. Bu durum, bu okul türlerinde matematik başarısını etkileyen faktörlerin kaygı dışında değişkenler (örneğin öğretim yöntemleri, çevresel faktörler, motivasyon düzeyi) olabileceğini göstermektedir.
e) Matematik Kaygısı ve Başarı Üzerine Regresyon Analizi
library(dplyr)
library(forcats)
library(magrittr)
secili_stratumlar <- c("TUR02", "TUR06", "TUR13", "TUR28")
subdata <- PISA_STU_2021 %>%
filter(STRATUM %in% secili_stratumlar) %>%
dplyr::select(STRATUM, PV1MATH, ANXMAT, STUDYHMW) %>%
mutate(
STRATUM = droplevels(as_factor(STRATUM)),
STUDYHMW = scale(STUDYHMW)[,1]
)
library(naniar)
kayiptablo <- miss_var_summary(subdata)
mcartablo <- mcar_test(subdata)
kable(kayiptablo,
caption = "Kayıp Veri Özeti",
digits = 2,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
variable | n_miss | pct_miss |
---|---|---|
ANXMAT | 9 | 1.63 |
STUDYHMW | 1 | 0.181 |
STRATUM | 0 | 0 |
PV1MATH | 0 | 0 |
kable(mcartablo,
caption = "MCAR Testi Sonuçları",
digits = 2,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
statistic | df | p.value | missing.patterns |
---|---|---|---|
8.68 | 5 | 0.12 | 3 |
Bu aşamada ANXMAT, STUDYHMW, PV1MATH, STRATUM değişkenleri kullanıma alınmıştır. Kayıp veri analizi sonucunda, ANXMAT değişkeninde %1.6 ve STUDYHMW değişkeninde %0.18 oranında eksik veri tespit edilmiştir. Little’ın MCAR testi sonuçları doğrultusunda verilerin rastgele eksik olduğu belirlenmiş, bu nedenle liste bazlı silme (listwise deletion) yöntemi uygulanmıştır.
## [1] 0
Kayıp veri kalmamıştır.
kable(describe(subdata[, c("ANXMAT", "PV1MATH", "STUDYHMW")]),
caption = "Betimsel İstatistikler",
digits = 2,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ANXMAT | 1 | 543 | 0.60 | 1.19 | 0.57 | 0.62 | 1.03 | -2.39 | 2.63 | 5.03 | -0.12 | 0.06 | 0.05 |
PV1MATH | 2 | 543 | 525.48 | 78.44 | 520.58 | 524.31 | 79.36 | 289.23 | 769.62 | 480.39 | 0.11 | 0.00 | 3.37 |
STUDYHMW | 3 | 543 | 0.00 | 1.00 | 0.11 | 0.04 | 1.39 | -1.76 | 1.36 | 3.12 | -0.15 | -1.10 | 0.04 |
Veri setine ait ortalama, standart sapma, çarpıklık ve basıklık değerleri incelenmiş; tek değişkenli normallik varsayımı sağlanmıştır.
## $multivariateNormality
## Test Statistic p value Result
## 1 Mardia Skewness 18.092385111948 0.0534250891970929 YES
## 2 Mardia Kurtosis -1.60499075619873 0.108495838981951 YES
## 3 MVN <NA> <NA> YES
##
## $univariateNormality
## Test Variable Statistic p value Normality
## 1 Anderson-Darling ANXMAT 6.6381 <0.001 NO
## 2 Anderson-Darling PV1MATH 0.5430 0.1625 YES
## 3 Anderson-Darling STUDYHMW 9.8428 <0.001 NO
##
## $Descriptives
## n Mean Std.Dev Median Min Max
## ANXMAT 543 5.965523e-01 1.185354 0.5653000 -2.394500 2.635000
## PV1MATH 543 5.254795e+02 78.437965 520.5840000 289.227000 769.619000
## STUDYHMW 543 1.771058e-03 1.001028 0.1138389 -1.758557 1.362103
## 25th 75th Skew Kurtosis
## ANXMAT -0.117200 1.2595000 -0.1162768 0.057212704
## PV1MATH 472.942000 578.8510000 0.1095243 -0.001778738
## STUDYHMW -0.822359 0.7379709 -0.1479432 -1.098933871
kable(mvn(subdata[, c("ANXMAT", "PV1MATH", "STUDYHMW")], mvnTest = "mardia")$multivariateNormality,
caption = "Çok Değişkenli Normallik Testi",
digits = 2,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
Test | Statistic | p value | Result |
---|---|---|---|
Mardia Skewness | 18.092385111948 | 0.0534250891970929 | YES |
Mardia Kurtosis | -1.60499075619873 | 0.108495838981951 | YES |
MVN | NA | NA | YES |
Çok değişkenli normallik için Mardia testi uygulanmış, hem çarpıklık hem de basıklık için anlamlı olmayan p-değerleri elde edilmiş, bu nedenle çok değişkenli normallik varsayımının sağlandığı kabul edilmiştir.
subdata_z <- subdata %>%
mutate(across(c(ANXMAT, PV1MATH, STUDYHMW), ~ as.numeric(scale(.)), .names = "z_{.col}")) %>%
filter(
between(z_ANXMAT, -3, 3),
between(z_PV1MATH, -3, 3),
between(z_STUDYHMW, -3, 3)
) %>%
dplyr::select(-starts_with("z_"))
mahal_dist <- mahalanobis(
subdata_z[, c("ANXMAT", "PV1MATH", "STUDYHMW")],
center = colMeans(subdata_z[, c("ANXMAT", "PV1MATH", "STUDYHMW")]),
cov = cov(subdata_z[, c("ANXMAT", "PV1MATH", "STUDYHMW")])
)
cutoff <- qchisq(0.999, df = 3)
subdata_clean <- subdata_z[mahal_dist < cutoff, ]
Öncelikle z-puanları hesaplanarak [-3, 3] aralığı dışında kalan gözlemler çıkarılmıştır. Ardından Mahalanobis uzaklığına göre çok değişkenli uç değerler analiz edilmiş ve istatistiksel anlamlılık sınırını aşan gözlemler veri setinden çıkarılmıştır. Bu adımlarla aşırı uç değerlerin analizi bozması engellenmiştir.
library(ggcorrplot)
cor_mat <- cor(subdata_clean[, c("ANXMAT", "PV1MATH", "STUDYHMW")])
ggcorrplot(cor_mat, lab = TRUE, method = "circle", title = "Korelasyon Matrisi")
Pearson korelasyon analizi sonucuna göre:
. Matematik kaygısı ile başarı arasında negatif yönlü bir ilişki bulunmaktadır (r = -0.20).
. Ders çalışma süresi ile başarı veya kaygı arasında anlamlı bir ilişki gözlenmemiştir (r ≈ 0.01–0.02).
. Bu bulgular, değişkenler arasındaki ilişkilerin zayıf düzeyde olduğunu ancak özellikle kaygının başarıyla ilişkili olduğunu göstermektedir.
REGRESYON MODELLERİ
Başlangıç Modeli
##
## Call:
## lm(formula = PV1MATH ~ ANXMAT + STUDYHMW + STRATUM, data = subdata_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -190.872 -36.522 1.791 35.971 178.451
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 638.401 6.397 99.794 < 2e-16 ***
## ANXMAT -10.882 2.103 -5.174 3.24e-07 ***
## STUDYHMW -1.740 2.493 -0.698 0.485
## STRATUMTUR06 -86.277 8.925 -9.667 < 2e-16 ***
## STRATUMTUR13 -140.519 7.182 -19.565 < 2e-16 ***
## STRATUMTUR28 -113.191 9.060 -12.494 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 57.58 on 535 degrees of freedom
## Multiple R-squared: 0.449, Adjusted R-squared: 0.4438
## F-statistic: 87.19 on 5 and 535 DF, p-value: < 2.2e-16
kable(tidy(model_base),
caption = "Başlangıç Modeli Sonuçları",
digits = 3,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
term | estimate | std.error | statistic | p.value |
---|---|---|---|---|
(Intercept) | 638.401 | 6.397 | 99.794 | 0.000 |
ANXMAT | -10.882 | 2.103 | -5.174 | 0.000 |
STUDYHMW | -1.740 | 2.493 | -0.698 | 0.485 |
STRATUMTUR06 | -86.277 | 8.925 | -9.667 | 0.000 |
STRATUMTUR13 | -140.519 | 7.182 | -19.565 | 0.000 |
STRATUMTUR28 | -113.191 | 9.060 | -12.494 | 0.000 |
İlk modelde bağımlı değişken olarak matematik başarısı (PV1MATH), bağımsız değişkenler olarak ise matematik kaygısı (ANXMAT), ders çalışma süresi (STUDYHMW) ve okul türü (STRATUM) kullanılmıştır.
Model bulgularına göre:
. Matematik kaygısı anlamlı ve negatif bir yordayıcıdır. Kaygı arttıkça matematik başarısı azalmaktadır (b = -10.88, p < .001).
. Ders çalışma süresi anlamlı bir yordayıcı değildir (p > 0.05).
. Okul türleri arasında anlamlı farklar vardır. Sosyal bilimler, meslek ve Anadolu liseleri, fen lisesine göre anlamlı şekilde daha düşük puanlara sahiptir.
. Modelin açıklayıcılığı oldukça yüksektir (Adj. R² = 0.44).
##
## Durbin-Watson test
##
## data: model_base
## DW = 2.1264, p-value = 0.9289
## alternative hypothesis: true autocorrelation is greater than 0
kable(tidy(dwtest(model_base)),
caption = "Durbin-Watson Testi Sonuçları",
digits = 3,
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
statistic | p.value | method | alternative |
---|---|---|---|
2.126 | 0.929 | Durbin-Watson test | true autocorrelation is greater than 0 |
Durbin-Watson testi sonucu 2.13 olarak bulunmuş, bu da otokorelasyon olmadığını göstermektedir.
## GVIF Df GVIF^(1/(2*Df))
## ANXMAT 1.005632 1 1.002812
## STUDYHMW 1.016801 1 1.008365
## STRATUM 1.021784 3 1.003598
VIF değerleri tüm değişkenler için 1’in biraz üzerindedir, bu da çoklu bağlantı problemi olmadığını göstermektedir.
cooksd <- cooks.distance(model_base)
plot(cooksd, type= "h", main="Cook's Distance",
ylab="Cook's Distance", xlab="Observation Index")
Kaldıraç ve aykırı gözlemler analizi sonucunda, Cook uzaklığı 4/n kuralına göre belirlenen eşiği aşan gözlemler veri setinden çıkarılmıştır. Bu adım, modelin güvenilirliğini artırmak için yapılmıştır.
model_interact <- lm(PV1MATH ~ ANXMAT * STUDYHMW + STRATUM, data = subdata_clean)
summary(model_interact)
##
## Call:
## lm(formula = PV1MATH ~ ANXMAT * STUDYHMW + STRATUM, data = subdata_clean)
##
## Residuals:
## Min 1Q Median 3Q Max
## -181.917 -34.318 0.402 33.962 148.293
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 641.200 5.936 108.025 < 2e-16 ***
## ANXMAT -12.457 2.003 -6.218 1.06e-09 ***
## STUDYHMW -4.432 2.567 -1.727 0.0848 .
## STRATUMTUR06 -84.970 8.232 -10.322 < 2e-16 ***
## STRATUMTUR13 -140.791 6.662 -21.134 < 2e-16 ***
## STRATUMTUR28 -116.223 8.470 -13.721 < 2e-16 ***
## ANXMAT:STUDYHMW 1.352 1.978 0.683 0.4947
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 51.2 on 505 degrees of freedom
## Multiple R-squared: 0.5147, Adjusted R-squared: 0.5089
## F-statistic: 89.25 on 6 and 505 DF, p-value: < 2.2e-16
library(broom)
reg_apa_table <- tidy(model_interact) %>%
mutate(across(where(is.numeric), ~ round(., 3))) %>%
mutate(p.value = ifelse(p.value < 0.001, "< .001", as.character(p.value))) %>%
rename(Degisken = term, Katsayi = estimate, Std_Hata = std.error, t_degeri = statistic, p_degeri = p.value)
knitr::kable(reg_apa_table,
caption = "Matematik Başarısı Üzerine Regresyon Modeli") %>% kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
Degisken | Katsayi | Std_Hata | t_degeri | p_degeri |
---|---|---|---|---|
(Intercept) | 641.200 | 5.936 | 108.025 | < .001 |
ANXMAT | -12.457 | 2.003 | -6.218 | < .001 |
STUDYHMW | -4.432 | 2.567 | -1.727 | 0.085 |
STRATUMTUR06 | -84.970 | 8.232 | -10.322 | < .001 |
STRATUMTUR13 | -140.791 | 6.662 | -21.134 | < .001 |
STRATUMTUR28 | -116.223 | 8.470 | -13.721 | < .001 |
ANXMAT:STUDYHMW | 1.352 | 1.978 | 0.683 | 0.495 |
İkinci modelde, ANXMAT ile STUDYHMW değişkenlerinin etkileşimi (ANXMAT × STUDYHMW) regresyona dahil edilmiştir. Bu modelde:
. Matematik kaygısı yine anlamlı ve negatif yönde başarıyı yordayan bir değişkendir (b = -12.46, p < .001).
. Ders çalışma süresi bu kez anlamlılığa yaklaşan bir etkiye sahiptir (b = -4.43, p ≈ .08).
. Etkileşim terimi (ANXMAT × STUDYHMW) anlamlı değildir (p = 0.49). Yani, ders çalışma süresi matematik kaygısı ile başarı arasındaki ilişkiyi değiştirmemektedir.
. Modelin açıklayıcılığı daha yüksektir (Adj. R² = 0.51).
library(interactions)
interact_plot(model_interact,
pred = ANXMAT,
modx = STUDYHMW,
interval = TRUE,
main.title = "Düzenleyici Etki Görselleştirmesi",
x.label = "Matematik Kaygısı",
y.label = "Matematik Başarısı")
Etkileşim grafiği, çalışma süresinin düşük, orta ve yüksek düzeyleri için kaygı ile başarı arasındaki ilişkiyi görselleştirmiştir. Tüm gruplarda kaygı arttıkça başarı düşmektedir. Ancak bu düşüşün eğimi çalışma süresi düzeylerine göre belirgin şekilde farklılaşmamaktadır. Bu da etkileşim etkisinin görsel olarak da desteklenmediğini göstermektedir.
Sonuç olarak;
Matematik kaygısı, öğrencilerin matematik başarısını olumsuz yönde etkileyen güçlü bir değişkendir.
Ders çalışma süresi doğrudan başarıyı anlamlı şekilde artırmamakta, ayrıca bu değişkenin kaygı ile başarı arasındaki ilişkiyi düzenlemediği görülmektedir.
Okul türleri arasında başarı farkları büyüktür ve bu da yapısal eşitsizliklere işaret etmektedir.
Regresyon modeli varsayımları sağlanmış, analiz sonuçları istatistiksel olarak güvenilir bulunmuştur.
Soru 2
a) orneklem1 fonksiyonunun orneklem2 olarak güncellenmesi
library(mlmRev)
data(Exam)
orneklem2 <- function(evren, size = 20, iterasyon = 100) {
ortalamalar <- numeric(iterasyon)
for (i in seq_len(iterasyon)) {
ornek <- sample(evren, size, replace = TRUE)
ortalamalar[i] <- mean(ornek)
}
list(
ortalamalar = ortalamalar,
ortalama = mean(ortalamalar),
standart_sapma = sd(ortalamalar)
)
}
b) Örneklem büyüklüğü 10 için 5, 30 ve 100 tekrarlı örneklem dağılımları ve histogramları
set.seed(123)
evren <- Exam$normexam
sonuc_10_5 <- orneklem2(evren, size = 10, iterasyon = 5)
sonuc_10_30 <- orneklem2(evren, size = 10, iterasyon = 30)
sonuc_10_100 <- orneklem2(evren, size = 10, iterasyon = 100)
par(mfrow = c(1, 3))
hist(sonuc_10_5$ortalamalar,
main = "n = 10, iter = 5",
xlab = "Örneklem Ortalaması", col = "skyblue", border = "white")
hist(sonuc_10_30$ortalamalar,
main = "n = 10, iter = 30",
xlab = "Örneklem Ortalaması", col = "lightgreen", border = "white")
hist(sonuc_10_100$ortalamalar,
main = "n = 10, iter = 100",
xlab = "Örneklem Ortalaması", col = "salmon", border = "white")
c) Örneklem büyüklüğü 50 için 5, 30 ve 100 tekrarlı örneklem dağılımları ve histogramları
set.seed(123)
sonuc_50_5 <- orneklem2(evren, size = 50, iterasyon = 5)
sonuc_50_30 <- orneklem2(evren, size = 50, iterasyon = 30)
sonuc_50_100 <- orneklem2(evren, size = 50, iterasyon = 100)
par(mfrow = c(1, 3))
hist(sonuc_50_5$ortalamalar,
main = "n = 50, iter = 5",
xlab = "Örneklem Ortalaması", col = "skyblue", border = "white")
hist(sonuc_50_30$ortalamalar,
main = "n = 50, iter = 30",
xlab = "Örneklem Ortalaması", col = "lightgreen", border = "white")
hist(sonuc_50_100$ortalamalar,
main = "n = 50, iter = 100",
xlab = "Örneklem Ortalaması", col = "salmon", border = "white")
d) Örneklem Ortalaması ve Standart Hata Özetleri
ozet_df <- data.frame(
`n` = c(10, 10, 10, 50, 50, 50),
`iterasyon` = c(5, 30, 100, 5, 30, 100),
`Ortalama` = c(
round(sonuc_10_5$ortalama, 4),
round(sonuc_10_30$ortalama, 4),
round(sonuc_10_100$ortalama, 4),
round(sonuc_50_5$ortalama, 4),
round(sonuc_50_30$ortalama, 4),
round(sonuc_50_100$ortalama, 4)
),
`Standart Hata` = c(
round(sonuc_10_5$standart_sapma, 4),
round(sonuc_10_30$standart_sapma, 4),
round(sonuc_10_100$standart_sapma, 4),
round(sonuc_50_5$standart_sapma, 4),
round(sonuc_50_30$standart_sapma, 4),
round(sonuc_50_100$standart_sapma, 4)
)
)
kable(ozet_df, caption = "Örneklem Ortalamaları ve Standart Hatalar", align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
n | iterasyon | Ortalama | Standart.Hata |
---|---|---|---|
10 | 5 | 0.0305 | 0.1660 |
10 | 30 | -0.0405 | 0.2769 |
10 | 100 | 0.0509 | 0.3176 |
50 | 5 | -0.0019 | 0.0749 |
50 | 30 | 0.0432 | 0.1397 |
50 | 100 | 0.0070 | 0.1405 |
Soru 3
a) MTK Sayıltıları (Tek Boyutluluk ve Yerel Bağımsızlık)
test_verisi <- readRDS("binary.rds")
library(EGAnet)
EGA(test_verisi, model = "glasso", plot.EGA = TRUE)
## Model: GLASSO (EBIC with gamma = 0.5)
## Correlations: auto
## Lambda: 0.0405940027954225 (n = 100, ratio = 0.1)
##
## Number of nodes: 25
## Number of edges: 195
## Edge density: 0.650
##
## Non-zero edge weights:
## M SD Min Max
## 0.054 0.043 -0.040 0.218
##
## ----
##
## Algorithm: Walktrap
##
## Number of communities: 2
##
## madde_1 madde_2 madde_3 madde_4 madde_5 madde_6 madde_7 madde_8
## 1 2 2 1 1 1 1 1
## madde_9 madde_10 madde_11 madde_12 madde_13 madde_14 madde_15 madde_16
## 2 1 2 1 2 2 2 1
## madde_17 madde_18 madde_19 madde_20 madde_21 madde_22 madde_23 madde_24
## 1 1 1 1 1 1 1 1
## madde_25
## 1
##
## ----
##
## Unidimensional Method: Louvain
## Unidimensional: No
##
## ----
##
## TEFI: -13.771
library(mirt)
set.seed(123)
paralel_analiz <- fa.parallel(test_verisi, fa = "pc", n.iter = 1000, plot = TRUE)
## Parallel analysis suggests that the number of factors = NA and the number of components = 1
if (paralel_analiz$values[1] > paralel_analiz$values[2]) {
cat("Veri seti tek boyutlu yapıya sahiptir.\n")
} else {
cat("Veri seti tek boyutlu yapıya sahip değildir.\n")
}
## Veri seti tek boyutlu yapıya sahip değildir.
model_1pl <- mirt(test_verisi, 1, itemtype = "Rasch", verbose = FALSE)
q3_matris <- residuals(model_1pl, type = "Q3")
## Q3 summary statistics:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.128 -0.059 -0.038 -0.035 -0.012 0.097
##
## madde_1 madde_2 madde_3 madde_4 madde_5 madde_6 madde_7 madde_8
## madde_1 1.000 -0.056 -0.073 0.039 0.038 -0.079 -0.128 -0.029
## madde_2 -0.056 1.000 0.009 -0.059 -0.074 -0.051 -0.055 -0.040
## madde_3 -0.073 0.009 1.000 -0.015 -0.095 -0.074 -0.094 -0.026
## madde_4 0.039 -0.059 -0.015 1.000 0.028 0.003 -0.032 -0.074
## madde_5 0.038 -0.074 -0.095 0.028 1.000 0.027 -0.008 -0.047
## madde_6 -0.079 -0.051 -0.074 0.003 0.027 1.000 0.097 -0.059
## madde_7 -0.128 -0.055 -0.094 -0.032 -0.008 0.097 1.000 0.015
## madde_8 -0.029 -0.040 -0.026 -0.074 -0.047 -0.059 0.015 1.000
## madde_9 -0.082 -0.099 -0.048 -0.020 -0.095 -0.057 -0.091 -0.114
## madde_10 0.057 -0.061 -0.045 -0.038 -0.058 -0.071 0.003 0.034
## madde_11 -0.051 0.004 -0.094 -0.061 -0.055 -0.040 -0.059 -0.044
## madde_12 -0.071 -0.001 -0.075 -0.028 -0.031 -0.092 -0.011 0.001
## madde_13 -0.074 -0.039 -0.023 -0.083 -0.089 0.015 -0.064 -0.033
## madde_14 -0.061 -0.007 0.012 -0.055 -0.037 -0.039 -0.071 -0.094
## madde_15 -0.033 -0.020 -0.067 -0.010 -0.032 -0.069 -0.053 -0.093
## madde_16 0.036 -0.040 -0.095 -0.040 0.055 -0.096 0.019 -0.021
## madde_17 -0.010 -0.024 -0.037 -0.059 -0.091 -0.102 -0.029 -0.053
## madde_18 0.002 -0.069 -0.052 -0.056 -0.018 -0.016 -0.033 -0.021
## madde_19 -0.050 -0.032 -0.072 -0.034 -0.056 -0.024 -0.020 -0.008
## madde_20 0.047 -0.026 -0.029 -0.044 -0.057 -0.024 -0.095 -0.043
## madde_21 0.043 -0.001 -0.040 -0.020 -0.002 -0.029 -0.050 0.015
## madde_22 -0.018 -0.050 -0.066 -0.022 -0.025 -0.063 -0.025 -0.068
## madde_23 -0.014 -0.004 -0.054 -0.017 -0.046 -0.026 -0.035 -0.092
## madde_24 -0.021 -0.082 -0.050 -0.087 0.043 0.012 -0.007 -0.038
## madde_25 -0.034 -0.068 -0.056 -0.009 0.004 0.012 -0.022 0.012
## madde_9 madde_10 madde_11 madde_12 madde_13 madde_14 madde_15 madde_16
## madde_1 -0.082 0.057 -0.051 -0.071 -0.074 -0.061 -0.033 0.036
## madde_2 -0.099 -0.061 0.004 -0.001 -0.039 -0.007 -0.020 -0.040
## madde_3 -0.048 -0.045 -0.094 -0.075 -0.023 0.012 -0.067 -0.095
## madde_4 -0.020 -0.038 -0.061 -0.028 -0.083 -0.055 -0.010 -0.040
## madde_5 -0.095 -0.058 -0.055 -0.031 -0.089 -0.037 -0.032 0.055
## madde_6 -0.057 -0.071 -0.040 -0.092 0.015 -0.039 -0.069 -0.096
## madde_7 -0.091 0.003 -0.059 -0.011 -0.064 -0.071 -0.053 0.019
## madde_8 -0.114 0.034 -0.044 0.001 -0.033 -0.094 -0.093 -0.021
## madde_9 1.000 -0.058 -0.009 -0.016 0.010 -0.010 -0.026 -0.071
## madde_10 -0.058 1.000 -0.057 -0.081 -0.065 -0.066 -0.058 -0.069
## madde_11 -0.009 -0.057 1.000 -0.057 0.020 -0.073 0.021 0.022
## madde_12 -0.016 -0.081 -0.057 1.000 -0.013 -0.078 -0.026 -0.037
## madde_13 0.010 -0.065 0.020 -0.013 1.000 0.070 -0.028 -0.088
## madde_14 -0.010 -0.066 -0.073 -0.078 0.070 1.000 -0.039 -0.055
## madde_15 -0.026 -0.058 0.021 -0.026 -0.028 -0.039 1.000 0.027
## madde_16 -0.071 -0.069 0.022 -0.037 -0.088 -0.055 0.027 1.000
## madde_17 -0.047 -0.065 -0.047 -0.024 -0.058 -0.019 -0.018 0.001
## madde_18 -0.009 0.060 -0.065 -0.006 -0.062 -0.072 -0.079 -0.049
## madde_19 -0.024 -0.017 -0.056 -0.008 -0.105 -0.025 -0.058 0.023
## madde_20 -0.063 0.018 -0.060 0.018 -0.052 -0.046 -0.053 0.014
## madde_21 -0.050 -0.011 -0.049 0.013 -0.107 -0.102 -0.048 -0.013
## madde_22 0.004 0.009 -0.024 -0.045 -0.057 -0.057 -0.007 -0.018
## madde_23 -0.005 -0.052 -0.044 -0.009 -0.028 -0.064 -0.030 -0.101
## madde_24 -0.026 -0.026 -0.029 -0.075 -0.099 -0.057 -0.056 -0.009
## madde_25 -0.068 -0.031 -0.064 -0.040 -0.044 -0.029 0.008 -0.039
## madde_17 madde_18 madde_19 madde_20 madde_21 madde_22 madde_23
## madde_1 -0.010 0.002 -0.050 0.047 0.043 -0.018 -0.014
## madde_2 -0.024 -0.069 -0.032 -0.026 -0.001 -0.050 -0.004
## madde_3 -0.037 -0.052 -0.072 -0.029 -0.040 -0.066 -0.054
## madde_4 -0.059 -0.056 -0.034 -0.044 -0.020 -0.022 -0.017
## madde_5 -0.091 -0.018 -0.056 -0.057 -0.002 -0.025 -0.046
## madde_6 -0.102 -0.016 -0.024 -0.024 -0.029 -0.063 -0.026
## madde_7 -0.029 -0.033 -0.020 -0.095 -0.050 -0.025 -0.035
## madde_8 -0.053 -0.021 -0.008 -0.043 0.015 -0.068 -0.092
## madde_9 -0.047 -0.009 -0.024 -0.063 -0.050 0.004 -0.005
## madde_10 -0.065 0.060 -0.017 0.018 -0.011 0.009 -0.052
## madde_11 -0.047 -0.065 -0.056 -0.060 -0.049 -0.024 -0.044
## madde_12 -0.024 -0.006 -0.008 0.018 0.013 -0.045 -0.009
## madde_13 -0.058 -0.062 -0.105 -0.052 -0.107 -0.057 -0.028
## madde_14 -0.019 -0.072 -0.025 -0.046 -0.102 -0.057 -0.064
## madde_15 -0.018 -0.079 -0.058 -0.053 -0.048 -0.007 -0.030
## madde_16 0.001 -0.049 0.023 0.014 -0.013 -0.018 -0.101
## madde_17 1.000 -0.048 0.038 -0.048 0.052 -0.031 -0.028
## madde_18 -0.048 1.000 -0.049 -0.024 -0.054 0.050 -0.025
## madde_19 0.038 -0.049 1.000 -0.069 -0.035 -0.054 -0.066
## madde_20 -0.048 -0.024 -0.069 1.000 -0.031 -0.048 0.002
## madde_21 0.052 -0.054 -0.035 -0.031 1.000 -0.079 -0.031
## madde_22 -0.031 0.050 -0.054 -0.048 -0.079 1.000 0.030
## madde_23 -0.028 -0.025 -0.066 0.002 -0.031 0.030 1.000
## madde_24 -0.032 -0.037 -0.041 0.022 -0.027 0.004 -0.045
## madde_25 -0.012 -0.044 0.003 -0.032 -0.007 -0.028 -0.067
## madde_24 madde_25
## madde_1 -0.021 -0.034
## madde_2 -0.082 -0.068
## madde_3 -0.050 -0.056
## madde_4 -0.087 -0.009
## madde_5 0.043 0.004
## madde_6 0.012 0.012
## madde_7 -0.007 -0.022
## madde_8 -0.038 0.012
## madde_9 -0.026 -0.068
## madde_10 -0.026 -0.031
## madde_11 -0.029 -0.064
## madde_12 -0.075 -0.040
## madde_13 -0.099 -0.044
## madde_14 -0.057 -0.029
## madde_15 -0.056 0.008
## madde_16 -0.009 -0.039
## madde_17 -0.032 -0.012
## madde_18 -0.037 -0.044
## madde_19 -0.041 0.003
## madde_20 0.022 -0.032
## madde_21 -0.027 -0.007
## madde_22 0.004 -0.028
## madde_23 -0.045 -0.067
## madde_24 1.000 -0.107
## madde_25 -0.107 1.000
q3_degerleri <- as.matrix(q3_matris)
diag(q3_degerleri) <- NA
q3_tablo <- as.data.frame(as.table(q3_degerleri))
q3_tablo <- subset(q3_tablo, !is.na(Freq))
q3_sirali <- q3_tablo[order(-abs(q3_tablo$Freq)), ]
ilk_10_q3 <- head(q3_sirali, 10)
kable(ilk_10_q3,
caption = "En Yüksek 10 Q3 Değeri (Yerel Bağımsızlık Testi)",
align = "c") |>
kable_styling(full_width = TRUE, bootstrap_options = c("striped", "hover", "condensed"))
Var1 | Var2 | Freq | |
---|---|---|---|
7 | madde_7 | madde_1 | -0.1280048 |
151 | madde_1 | madde_7 | -0.1280048 |
184 | madde_9 | madde_8 | -0.1136453 |
208 | madde_8 | madde_9 | -0.1136453 |
600 | madde_25 | madde_24 | -0.1068850 |
624 | madde_24 | madde_25 | -0.1068850 |
321 | madde_21 | madde_13 | -0.1067722 |
513 | madde_13 | madde_21 | -0.1067722 |
319 | madde_19 | madde_13 | -0.1045923 |
463 | madde_13 | madde_19 | -0.1045923 |
Öncelikle, paralel analiz sonucu değerlendirildiğinde, yalnızca bir bileşenin özdeğerinin rastgele verilerden elde edilen özdeğeri aştığı görülmektedir. Bu durum, verinin önemli ölçüde tek bir temel bileşen tarafından açıklandığını ve baskın bir genel faktörün varlığını ortaya koymaktadır. Paralel analiz, tek boyutluluğun istatistiksel kanıtı olarak sıkça kullanılmakta olup, bu bağlamda ölçekte belirgin bir ana boyutun var olduğunu göstermektedir.
Ayrıca, mirt paketinde yapılan Q3 analizi sonucunda, madde çiftleri arasında anlamlı düzeyde pozitif artık korelasyonlar gözlemlenmemiştir. Elde edilen Q3 değerlerinin tamamının düşük ve negatif çıkması, ölçek maddelerinin büyük ölçüde birbirinden bağımsız olduğunu ve tek bir yapıyı ölçtüklerini desteklemektedir. Bu bulgu, yerel bağımsızlık varsayımının sağlandığını ve tek boyutlu modellerin uygulanabilir olduğunu göstermektedir.
Her ne kadar EGA (Exploratory Graph Analysis) sonucunda iki topluluk tespit edilmiş olsa da, bu ayrım istatistiksel olarak zayıf olabilir ve ölçekteki içeriksel bütünlüğü yansıtmayabilir. Özellikle paralel analiz ve Q3 sonuçları birlikte değerlendirildiğinde, bu yapının tek bir faktör altında birleştiği ve teorik olarak da anlamlı bir bütünlük oluşturduğu söylenebilir.
Tüm bu bulgular ışığında, ölçekteki maddelerin büyük ölçüde aynı yapıyı yansıttığı, yerel bağımsızlık varsayımının sağlandığı ve verinin anlamlı bir genel faktör tarafından açıklandığı dikkate alındığında, ölçeğin tek boyutlu olduğu sonucuna varılmıştır.
b) Madde ve Birey Parametreleri (Model Karşılaştırması)
test_verisi <- readRDS("binary.rds")
model_1pl <- mirt(test_verisi, 1, itemtype = "Rasch", verbose = FALSE)
model_2pl <- mirt(test_verisi, 1, itemtype = "2PL", verbose = FALSE)
model_3pl <- mirt(test_verisi, 1, itemtype = "3PL", verbose = FALSE)
get_aic_bic <- function(model) {
c(
AIC = extract.mirt(model, "AIC"),
BIC = extract.mirt(model, "BIC")
)
}
model_karsilastirma_df <- rbind(
model_1pl = get_aic_bic(model_1pl),
model_2pl = get_aic_bic(model_2pl),
model_3pl = get_aic_bic(model_3pl)
)
model_karsilastirma_df <- round(model_karsilastirma_df, 2)
kable(model_karsilastirma_df,
caption = "Model Karsilastirmasi: AIC ve BIC",
align = "c") |>
kable_styling(full_width = TRUE,
bootstrap_options = c("striped", "hover", "condensed"))
AIC | BIC | |
---|---|---|
model_1pl | 46644.17 | 46781.80 |
model_2pl | 46470.65 | 46735.33 |
model_3pl | 46305.94 | 46702.97 |
Model karşılaştırmasına ilişkin AIC ve BIC değerleri incelendiğinde, en düşük değerlerin 3PL modeline ait olduğu görülmektedir. AIC değeri, modelin veriye uyumunu ve karmaşıklığını birlikte değerlendirir; bu açıdan 3PL modeli diğer modellere kıyasla daha iyi bir uyum sağlamaktadır. Benzer şekilde, BIC değeri de 3PL modelinde en düşüktür ve bu da modelin hem açıklayıcılığının yüksek olduğunu hem de kullanılan parametre sayısının uygun olduğunu göstermektedir.
madde_parametreleri_3pl <- coef(model_3pl, IRTpars = TRUE, simplify = TRUE)$items
madde_3pl_df <- as.data.frame(madde_parametreleri_3pl)
madde_3pl_df$madde <- rownames(madde_3pl_df)
kable(madde_3pl_df[, c("a", "b", "g")],
caption = "3PL Modeli Madde Parametreleri",
digits = 3,
align = "c") |>
kable_styling(full_width = TRUE,
bootstrap_options = c("striped", "hover", "condensed"))
a | b | g | |
---|---|---|---|
madde_1 | 1.521 | -0.222 | 0.065 |
madde_2 | 1.777 | 1.025 | 0.282 |
madde_3 | 1.690 | 1.542 | 0.382 |
madde_4 | 1.274 | 0.481 | 0.106 |
madde_5 | 1.272 | -0.259 | 0.040 |
madde_6 | 1.236 | 0.544 | 0.149 |
madde_7 | 1.752 | 0.761 | 0.234 |
madde_8 | 1.422 | 0.688 | 0.240 |
madde_9 | 1.574 | 1.355 | 0.277 |
madde_10 | 1.606 | 0.261 | 0.236 |
madde_11 | 1.390 | 0.857 | 0.276 |
madde_12 | 2.159 | 0.760 | 0.264 |
madde_13 | 2.460 | 1.520 | 0.297 |
madde_14 | 1.430 | 1.910 | 0.191 |
madde_15 | 1.403 | 0.676 | 0.189 |
madde_16 | 1.569 | 0.326 | 0.089 |
madde_17 | 2.532 | 0.597 | 0.387 |
madde_18 | 1.704 | 0.632 | 0.213 |
madde_19 | 1.599 | 0.801 | 0.195 |
madde_20 | 1.983 | 0.372 | 0.266 |
madde_21 | 2.277 | 0.728 | 0.177 |
madde_22 | 2.826 | 1.094 | 0.168 |
madde_23 | 2.029 | 0.799 | 0.299 |
madde_24 | 1.645 | 0.652 | 0.239 |
madde_25 | 1.801 | 0.753 | 0.183 |
Bu modele göre, madde_13 (a = 2.460) ve madde_17 (a = 2.532) oldukça yüksek ayırtedicilik katsayılarına sahiptir; yani bu maddeler bireylerin yetenek düzeylerini ayırt etmede oldukça etkilidir. Genel olarak a değerleri 1’in üzerindedir, bu da maddelerin büyük kısmının yeterli düzeyde ayırt edici olduğunu gösterir.
Zorluk parametresi b, bireyin maddeyi %50 doğru cevaplayabilmesi için sahip olması gereken yetenek düzeyini gösterir. Örneğin, madde_14 (b = 1.910) en zor madde görünümündedir; buna karşın madde_1 ve madde_5 negatif b değerleri ile en kolay maddeler arasında yer almaktadır.
Şans başarısını temsil eden g parametresi, yetenek düzeyi çok düşük bireylerin maddeyi doğru cevaplama olasılığıdır. Bu değer genellikle çok yüksek olmamalıdır. Örneğin, madde_3 ve madde_17 gibi bazı maddelerde g değeri 0.38 civarındadır; bu, özellikle çoktan seçmeli testlerde tahmine dayalı başarı oranının görece yüksek olduğunu düşündürebilir. Ancak çoğu madde için bu değer 0.2’nin altındadır, bu da testin güvenilirliğini destekler.
Sonuç olarak, modelde yer alan maddelerin genel olarak iyi ayırt ediciliğe sahip olduğu, zorluk düzeylerinin değişkenlik gösterdiği ve tahmin edilebilirlik değerlerinin kabul edilebilir sınırlar içinde olduğu söylenebilir. Bu da 3PL modelinin, hem bireyleri hem de maddeleri istatistiksel olarak anlamlı şekilde ayırt edebildiğini göstermektedir.
theta_3pl <- fscores(model_3pl, method = "EAP")
theta_3pl_df <- data.frame(birey = 1:nrow(theta_3pl), theta = theta_3pl)
datatable(
theta_3pl_df,
colnames = c("Birey No", "Theta"),
caption = "3PL Modeline Göre Tüm Bireylerin Yetenek (Theta) Tahminleri",
options = list(
pageLength = 25,
scrollX = TRUE,
autoWidth = TRUE
)
)
Yetenek (theta) tahminleri -1,58 ile 2,46 arasında değişmektedir. Bu aralık, bireylerin başarı düzeylerinin geniş bir yelpazede dağıldığını göstermektedir. Negatif theta değerleri, bireyin ortalamanın altında bir yetenek düzeyine sahip olduğunu; pozitif değerler ise ortalamanın üzerinde bir yetenek düzeyine sahip olduğunu ifade eder. Theta değerinin sıfıra yakın olması ise bireyin ortalama düzeyde bir başarı gösterdiğini işaret eder. Bu bulgular, testin farklı başarı seviyelerini ayırt etme konusunda işlevsel olduğunu ve ölçüm aralığının yeterince kapsayıcı olduğunu ortaya koymaktadır.
c) Madde Karakteristik ve Test Karakteristik Eğrileri
Grafikte yer alan madde karakteristik eğrileri incelendiğinde, bazı maddelerin (örneğin madde_22, madde_25) daha dik eğimlere sahip olduğu görülmektedir. Bu da bu maddelerin ayırt ediciliğinin yüksek olduğunu gösterir.
Diğer yandan, madde_3 ve madde_9 gibi eğrisi daha yatay olan maddeler, daha düşük ayırt ediciliğe sahiptir. Ayrıca bazı maddelerde (örneğin madde_2, madde_17) doğru yanıt olasılığı düşük yetenek düzeylerinde bile sıfırdan farklı başlamakta. Bu durum, bu maddelerde tahmin edilebilirliğin (guessing) etkili olduğunu göstermektedir.
Genel olarak, maddeler arasında zorluk ve ayırt edicilik bakımından çeşitlilik olduğu ve testin farklı yetenek düzeylerini kapsayacak biçimde tasarlandığı anlaşılmaktadır.
Test Karakteristik Eğrisi, bireyin yeteneği arttıkça beklenen puanın da yükseldiğini göstermektedir. Eğri özellikle 0 ile 2 arasındaki yetenek düzeylerinde hızlı artmakta, bu da testin bu aralıkta en duyarlı olduğu anlamına gelmektedir.
Düşük ve yüksek uçlarda eğri yataylaştığı için test bu bölgelerde daha az ayırt edicidir.
d) KTK–MTK Parametrelerinin İlişkisi
ktk_guculuk <- colMeans(test_verisi)
alpha_sonuclari <- psych::alpha(test_verisi)
ktk_korelasyon <- alpha_sonuclari$item.stats$r.drop
mtk_zorluk <- coef(model_3pl, IRTpars = TRUE, simplify = TRUE)$items[, "b"]
ktk_mtk_df <- data.frame(
madde = paste0("madde_", 1:25),
toplam_korelasyon = round(ktk_korelasyon, 3),
ktk_guculuk = round(ktk_guculuk, 3),
mtk_zorluk = round(mtk_zorluk, 3)
)
korelasyon_sonuc <- cor(ktk_mtk_df$ktk_guculuk, ktk_mtk_df$mtk_zorluk)
kable(ktk_mtk_df,
caption = "KTK ve MTK (3PL) Madde Parametreleri Karsilastirmasi",
align = "c") |>
kable_styling(full_width = TRUE,
bootstrap_options = c("striped", "hover", "condensed"))
madde | toplam_korelasyon | ktk_guculuk | mtk_zorluk | |
---|---|---|---|---|
madde_1 | madde_1 | 0.420 | 0.587 | -0.222 |
madde_2 | madde_2 | 0.313 | 0.447 | 1.025 |
madde_3 | madde_3 | 0.180 | 0.469 | 1.542 |
madde_4 | madde_4 | 0.376 | 0.450 | 0.481 |
madde_5 | madde_5 | 0.383 | 0.580 | -0.259 |
madde_6 | madde_6 | 0.357 | 0.466 | 0.544 |
madde_7 | madde_7 | 0.355 | 0.458 | 0.761 |
madde_8 | madde_8 | 0.322 | 0.489 | 0.688 |
madde_9 | madde_9 | 0.254 | 0.407 | 1.355 |
madde_10 | madde_10 | 0.378 | 0.564 | 0.261 |
madde_11 | madde_11 | 0.301 | 0.488 | 0.857 |
madde_12 | madde_12 | 0.378 | 0.467 | 0.760 |
madde_13 | madde_13 | 0.239 | 0.373 | 1.520 |
madde_14 | madde_14 | 0.214 | 0.282 | 1.910 |
madde_15 | madde_15 | 0.352 | 0.458 | 0.676 |
madde_16 | madde_16 | 0.436 | 0.464 | 0.326 |
madde_17 | madde_17 | 0.358 | 0.577 | 0.597 |
madde_18 | madde_18 | 0.379 | 0.470 | 0.632 |
madde_19 | madde_19 | 0.356 | 0.430 | 0.801 |
madde_20 | madde_20 | 0.397 | 0.551 | 0.372 |
madde_21 | madde_21 | 0.427 | 0.408 | 0.728 |
madde_22 | madde_22 | 0.387 | 0.314 | 1.094 |
madde_23 | madde_23 | 0.350 | 0.489 | 0.799 |
madde_24 | madde_24 | 0.345 | 0.486 | 0.652 |
madde_25 | madde_25 | 0.389 | 0.421 | 0.753 |
cat("KTK gucluk ile 3PL zorluk parametresi arasindaki korelasyon:",
round(korelasyon_sonuc, 3), "\n")
## KTK gucluk ile 3PL zorluk parametresi arasindaki korelasyon: -0.789
madde_1: KTK’ya göre kolay bir madde (güçlük = 0.587), MTK’ya göre de negatif zorluk değeriyle oldukça kolay bir madde (-0.222). Her iki yaklaşımda da tutarlı şekilde kolay kabul edilir.
madde_3: KTK güçlük değeri ortalama düzeyde (0.469) olmasına rağmen MTK zorluk değeri oldukça yüksek (1.542). Klasik yöntem bu maddeyi yeterince zor olarak tanımlayamamış olabilir.
madde_14: KTK’ya göre en düşük güçlük değerine sahip maddelerden biri (0.282), yani zor; MTK zorluk değeri ise en yükseklerden biri (1.910). Her iki sistemde de tutarlıca zor madde olarak değerlendirilmiş.
madde_20: KTK’ya göre oldukça kolay (güçlük = 0.551), MTK’ya göre de düşük zorluk değeri (0.372). İki yöntemin sonuçları burada da örtüşmektedir.
madde_13: KTK açısından zor (güçlük = 0.373), MTK’ya göre de çok zor (zorluk = 1.520). Yine iki yaklaşım benzer sonuç vermiştir.
Genel olarak, hem KTK hem MTK madde zorluklarını tutarlı şekilde yansıtmaktadır; ancak bazı maddelerde (örneğin madde_3 gibi) yöntemler arasında anlamlı farklar görülebilmektedir. Bu farklar özellikle maddelerin dağılımı ya da ayırt ediciliği ile ilişkili olabilir.
KTK’ya dayalı güçlük değerleri ile 3PL modeline göre hesaplanan zorluk parametreleri arasında yüksek düzeyde negatif bir korelasyon bulunmaktadır (r = -0.789). Bu durum, klasik test teorisindeki güçlük katsayısının, madde zorluğuyla ters yönlü bir ilişki gösterdiğini doğrulamaktadır. Yani klasik ölçekte daha “kolay” (yüksek ortalamalı) görünen maddeler, MTK’ya göre daha “zor” (daha yüksek zorluk değeri) olarak modellenmiştir. Bu da iki yaklaşım arasındaki kavramsal farkları yansıtmaktadır.
Soru 4
2PL Model Simülasyon ve Parametre Kestirimi
uretim_fonksiyonu <- function(theta, madde_param) {
a <- madde_param$a
b <- madde_param$b
prob <- 1 / (1 + exp(-outer(theta, a) * (a * (theta - b))))
response <- matrix(rbinom(length(prob), 1, prob), nrow = length(theta))
colnames(response) <- paste0("madde_", seq_len(ncol(response)))
return(response)
}
a) Madde Parametrelerinin Kestirimi ve RMSE
set.seed(42)
for (r in replikasyonlar) {
rmse_a_vec <- numeric(r)
rmse_b_vec <- numeric(r)
for (i in seq_len(r)) {
theta_true <- rnorm(1000)
yanit_verisi <- uretim_fonksiyonu(theta_true, madde_param)
model <- mirt(yanit_verisi, model = 1, itemtype = "2PL", verbose = FALSE)
tahmin <- coef(model, IRTpars = TRUE, simplify = TRUE)$items
rmse_a_vec[i] <- sqrt(mean((madde_param$a - tahmin[, "a"])^2))
rmse_b_vec[i] <- sqrt(mean((madde_param$b - tahmin[, "b"])^2))
}
sonuclar_a[[as.character(r)]] <- rmse_a_vec
sonuclar_b[[as.character(r)]] <- rmse_b_vec
}
rmse_df <- tibble(
rep = rep(replikasyonlar, each = 1),
a_rmse = sapply(sonuclar_a, mean),
b_rmse = sapply(sonuclar_b, mean)
)
kable(rmse_df, caption = "Replikasyon Sayısına Göre Madde Parametresi RMSE", digits = 5) %>%
kable_styling(full_width = TRUE)
rep | a_rmse | b_rmse |
---|---|---|
10 | 0.18652 | 1.31003 |
30 | 0.19427 | 1.31006 |
50 | 0.18485 | 1.31308 |
100 | 0.19898 | 1.31400 |
rmse_long <- bind_rows(
tibble(rep = rep(replikasyonlar, times = lengths(sonuclar_a)),
log_rmse = log(unlist(sonuclar_a)), param = "a"),
tibble(rep = rep(replikasyonlar, times = lengths(sonuclar_b)),
log_rmse = log(unlist(sonuclar_b)), param = "b")
)
ggplot(rmse_long, aes(x = rep, y = log_rmse, color = param)) +
geom_boxplot() +
labs(title = "Replikasyon Sayısına Göre log(RMSE) (Madde Parametreleri)",
x = "Replikasyon Sayısı", y = "log(RMSE)", color = "Parametre") +
theme_minimal()
Grafik ve tablo sonuçlarına göre, replikasyon sayısı arttıkça madde parametrelerine ilişkin RMSE değerlerinde belirgin bir azalma görülmemektedir. Özellikle zorluk parametresi (b) için RMSE değerleri oldukça yüksek kalmakta ve replikasyon sayısından büyük ölçüde etkilenmemektedir (1.31 civarında sabit).
Ayırt edicilik parametresi (a) için ise RMSE değerleri daha düşük olup (~0.19 civarı), replikasyon sayısındaki artışa rağmen belirgin bir iyileşme göstermemektedir.
Bu bulgular, tekrar sayısını artırmanın tek başına kestirim doğruluğunu önemli ölçüde artırmadığını, özellikle zorluk parametresi için daha farklı stratejilerin (örneğin örneklem çeşitliliği veya model tipi) gerekebileceğini göstermektedir.
b) Yetenek (Theta) Parametresinin Kestirimi
ggplot(rmse_long, aes(x = factor(rep), y = log_rmse, fill = param)) +
geom_col(position = position_dodge(width = 0.7), width = 0.6) +
scale_fill_manual(values = c("a" = "steelblue", "b" = "darkorange")) +
labs(
title = "Log(RMSE) vs Replikasyon Sayısı (Madde Parametreleri)",
x = "Replikasyon Sayısı",
y = "log(RMSE)",
fill = "Parametre"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "bottom"
)
Ayırt edicilik parametresi (a) için log(RMSE) değerleri -1.68 ile -1.61 arasında değişmektedir. Bu durum, replikasyon sayısı arttıkça kestirim hatasında anlamlı bir azalma olmadığını göstermektedir.
Zorluk parametresi (b) için ise log(RMSE) değeri tüm replikasyon seviyelerinde sabit kalmış ve yaklaşık 0.27 olarak gözlenmiştir. Bu da RMSE’nin yaklaşık 1.31 civarında sabit kaldığını ve replikasyon sayısından etkilenmediğini ortaya koymaktadır.
Sonuç olarak, tekrar sayısını artırmak, özellikle zorluk parametresinin kestirim doğruluğunu iyileştirmemiştir. Bu bulgu, bazı parametrelerin daha doğru kestirilebilmesi için replikasyon dışında ek stratejilerin gerekebileceğini düşündürmektedir.
Simülasyon Sonuçlarının İncelenmesi
theta_gercek_listesi <- list()
yontemler <- c("EAP", "MAP", "ML")
rmse_theta_listesi <- list()
set.seed(42)
for (r in replikasyonlar) {
theta_true <- rnorm(1000)
theta_gercek_listesi[[as.character(r)]] <- theta_true
veri <- uretim_fonksiyonu(theta_true, madde_param)
model <- mirt(data = veri, model = 1, itemtype = "2PL", verbose = FALSE)
rmse_vec <- c()
for (y in yontemler) {
tahmin_theta <- fscores(model, method = y)
rmse <- sqrt(mean((theta_true - tahmin_theta[,1])^2))
rmse_vec <- c(rmse_vec, rmse)
}
rmse_theta_listesi[[as.character(r)]] <- rmse_vec
}
theta_rmse_df <- bind_rows(rmse_theta_listesi, .id = "replikasyon")
colnames(theta_rmse_df) <- c("replikasyon", yontemler)
theta_rmse_df$replikasyon <- as.integer(theta_rmse_df$replikasyon)
theta_long_df <- theta_rmse_df |>
pivot_longer(cols = all_of(yontemler),
names_to = "yontem",
values_to = "rmse") |>
mutate(log_rmse = log(rmse))
Grafik: log(RMSE) vs replikasyon sayısı
ggplot(theta_long_df, aes(x = yontem, y = log_rmse, fill = yontem)) +
geom_boxplot(alpha = 0.7, outlier.color = "black", outlier.shape = 16) +
scale_fill_manual(
values = c("EAP" = "#66c2a5", "MAP" = "#fc8d62", "ML" = "#8da0cb")
) +
labs(
title = "Yetenek Tahmini Yöntemlerine Göre log(RMSE) Dağılımı",
x = "Tahmin Yöntemi",
y = "log(RMSE)"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "none"
)