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)

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" 
  )

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)

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"))
Kayıp Veri Özeti
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"))
MCAR Testi Sonuçları
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.

subdata <- na.omit(subdata)
sum(is.na(subdata))
## [1] 0

Kayıp veri kalmamıştır.

library(psych)

describe(subdata[, c("ANXMAT", "PV1MATH", "STUDYHMW")])
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"))
Betimsel İstatistikler
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.

library(MVN)

mvn(subdata[, c("ANXMAT", "PV1MATH", "STUDYHMW")], mvnTest = "mardia")
## $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"))
Çok Değişkenli Normallik Testi
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

model_base <- lm(PV1MATH ~ ANXMAT + STUDYHMW + STRATUM, data = subdata_clean)
summary(model_base)
## 
## 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"))
Başlangıç Modeli Sonuçları
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).

library(lmtest)
dwtest(model_base)
## 
##  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"))
Durbin-Watson Testi Sonuçları
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.

library(car)
vif(model_base)
##              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")

subdata_clean <- subdata_clean[which(cooksd < 4/length(cooksd)), ]

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"))
Matematik Başarısı Üzerine Regresyon Modeli
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;

  1. Matematik kaygısı, öğrencilerin matematik başarısını olumsuz yönde etkileyen güçlü bir değişkendir.

  2. 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.

  3. Okul türleri arasında başarı farkları büyüktür ve bu da yapısal eşitsizliklere işaret etmektedir.

  4. 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")

par(mfrow = c(1, 1))

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")

par(mfrow = c(1, 1))

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"))
Örneklem Ortalamaları ve Standart Hatalar
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"))
En Yüksek 10 Q3 Değeri (Yerel Bağımsızlık Testi)
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

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"))
Model Karsilastirmasi: AIC ve BIC
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"))
3PL Modeli Madde Parametreleri
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
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

plot(model_3pl, type = "trace", facet_items = TRUE)

plot(model_3pl, type = "score")

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"))
KTK ve MTK (3PL) Madde Parametreleri Karsilastirmasi
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

Soru 4

2PL Model Simülasyon ve Parametre Kestirimi

madde_param <- readRDS("maddepar.Rds")
madde_param <- as.data.frame(madde_param)
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

replikasyonlar <- c(10, 30, 50, 100)
sonuclar_a <- list()
sonuclar_b <- list()
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)
Replikasyon Sayısına Göre Madde Parametresi RMSE
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()

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"
  )

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"
  )