# ==========================================
# 1. VERİ YÜKLEME (OLC_733 KLASÖRÜNDEN)
# ==========================================

library(mirt)
## Warning: package 'mirt' was built under R version 4.5.3
## Zorunlu paket yükleniyor: stats4
## Zorunlu paket yükleniyor: lattice
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Türkçe karakter içermeyen temiz klasör yolundan doğrudan çağırıyoruz:
load("C:/Users/User/OneDrive/Desktop/OLC_733/PISA_STU_2009.Rda")

# Hafızaya yüklenen nesneyi kontrol edip aktif matrise aktarıyoruz
veri_aktif <- PISA_STU_2009

# 13 politom maddeyi seçiyoruz
politom_df <- veri_aktif %>%
  select(ST27Q01, ST27Q02, ST27Q03, ST27Q04, ST27Q05, 
         ST27Q06, ST27Q07, ST27Q08, ST27Q09, ST27Q10, 
         ST27Q11, ST27Q12, ST27Q13) %>%
  haven::zap_labels() %>% # <--- Etiketleri temizler, veriyi standart vektöre dönüştürür
  mutate(across(everything(), ~as.numeric(.))) %>% # Artık doğrudan numeric yapabilirsiniz
  na.omit()

# Örneklem seçimi (N=800)
set.seed(456)
politom_final <- politom_df[sample(nrow(politom_df), 800), ]

# ==========================================
# 2. MODEL SEÇİMİ VE ANOVA TABLOSU
# ==========================================

mod_grm <- mirt(politom_final, 1, itemtype = 'graded')
mod_gpcm <- mirt(politom_final, 1, itemtype = 'gpcm')

# Model karşılaştırma tablosu (Hoca'nın beklediği o anova)
anova(mod_grm, mod_gpcm)
##               AIC    SABIC       HQ      BIC    logLik      X2 df   p
## mod_grm  23762.31 23840.78 23855.89 24005.91 -11829.15               
## mod_gpcm 23800.33 23878.80 23893.91 24043.93 -11848.17 -38.025  0 NaN
# ==========================================
# ADIM 2: SEÇİLEN GRM MODELİNİN VARSAYIMLARI
# ==========================================

# 1. Tek Boyutluluk İçin Mutlak Uyum İndeksleri (M2)
# (Bu komut aynı zamanda model-veri uyumunu da doğrular)
M2(mod_grm)
##            M2 df p RMSEA RMSEA_5 RMSEA_95 SRMSR   TLI   CFI
## stats 297.424 39 0 0.091   0.082    0.101 0.096 0.778 0.834
# 2. Yerel Bağımsızlık Varsayımı (Yen'in Q3 kalıntı değerleri)
# Konsolda çıkacak matriste değerlerin genel olarak < .20 olması istenir.
residuals(mod_grm, type = "LD")
## LD matrix (lower triangle) and standardized residual correlations (upper triangle)
## 
## Upper triangle summary:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -0.138  -0.109  -0.091  -0.034   0.078   0.259 
## 
##         ST27Q01 ST27Q02 ST27Q03 ST27Q04 ST27Q05 ST27Q06 ST27Q07 ST27Q08 ST27Q09
## ST27Q01          -0.112   0.259  -0.138   0.252   0.093   0.115  -0.108  -0.093
## ST27Q02  30.361          -0.115   0.070  -0.097   0.087  -0.109  -0.115  -0.084
## ST27Q03 160.497  31.518          -0.128   0.196  -0.112   0.122  -0.084  -0.127
## ST27Q04  45.560  11.778  39.061          -0.102  -0.085  -0.110   0.080  -0.073
## ST27Q05 152.416  22.766  92.366  24.810           0.131   0.177  -0.090  -0.098
## ST27Q06  20.710  18.023  30.312  17.244  41.446           0.169  -0.112  -0.130
## ST27Q07  31.868  28.352  35.823  28.956  75.542  68.200          -0.060  -0.071
## ST27Q08  27.747  31.616  16.912  15.285  19.442  29.863   8.688           0.103
## ST27Q09  20.601  17.023  38.609  12.732  23.163  40.772  12.161  25.233        
## ST27Q10  21.200  19.846  22.168  14.598  27.120  23.740  17.461  21.458  14.810
## ST27Q11  19.814  13.937  42.005  32.500  25.738  29.030   7.203  30.601  20.340
## ST27Q12  36.609  18.341  28.347   6.321  31.037  30.446  20.892  58.343  27.976
## ST27Q13  10.366  20.503  33.042  15.798  24.013  15.985  15.754  32.405  43.963
##         ST27Q10 ST27Q11 ST27Q12 ST27Q13
## ST27Q01  -0.094  -0.091  -0.124  -0.066
## ST27Q02  -0.091  -0.076   0.087  -0.092
## ST27Q03  -0.096  -0.132  -0.109  -0.117
## ST27Q04   0.078  -0.116   0.051  -0.081
## ST27Q05  -0.106  -0.104  -0.114  -0.100
## ST27Q06  -0.099   0.110  -0.113  -0.082
## ST27Q07  -0.085  -0.055  -0.093  -0.081
## ST27Q08   0.095  -0.113   0.156  -0.116
## ST27Q09   0.079  -0.092  -0.108  -0.135
## ST27Q10          -0.099   0.167  -0.093
## ST27Q11  23.700          -0.082   0.094
## ST27Q12  66.954  16.287           0.084
## ST27Q13  20.873  21.227  16.897
# ==========================================
# ADIM 4: PARAMETRELER VE MKE'LER (SE)
# ==========================================

# simplify = TRUE kullanmıyoruz ki parametrelerin hemen altında SE (MKE) değerleri görünsün
grm_parametreler <- coef(mod_grm, IRTpars = TRUE)

# İlk 4 maddenin teknik parametre ve hata çıktılarını ekrana yazdırıyoruz:
grm_parametreler[1:4]
## $ST27Q01
##             a        b1       b2       b3
## par 0.5768947 -2.685449 2.013958 4.577691
## 
## $ST27Q02
##            a        b1       b2        b3
## par 1.324775 -3.167236 -1.35082 0.7715399
## 
## $ST27Q03
##             a        b1        b2       b3
## par 0.5949024 -2.312802 0.9570928 3.376379
## 
## $ST27Q04
##            a        b1         b2       b3
## par 1.481798 -2.611004 -0.5529399 1.029426
# Modeli kurarken SE = TRUE argümanını ekliyoruz:
mod_grm <- mirt(politom_final, 1, itemtype = 'graded', SE = TRUE)

# Şimdi tekrar parametreleri çağırıyoruz:
politom_parametreler <- coef(mod_grm, IRTpars = TRUE)
politom_parametreler[1:4]
## $ST27Q01
##                 a        b1       b2       b3
## par     0.5768947 -2.685449 2.013958 4.577691
## CI_2.5  0.4129089 -3.443810 1.413476 3.294788
## CI_97.5 0.7408806 -1.927088 2.614440 5.860594
## 
## $ST27Q02
##                a        b1        b2        b3
## par     1.324775 -3.167236 -1.350820 0.7715399
## CI_2.5  1.104981 -3.669533 -1.575352 0.5987768
## CI_97.5 1.544568 -2.664939 -1.126288 0.9443031
## 
## $ST27Q03
##                 a        b1        b2       b3
## par     0.5949024 -2.312802 0.9570928 3.376379
## CI_2.5  0.4348381 -2.946250 0.6014079 2.466645
## CI_97.5 0.7549668 -1.679354 1.3127778 4.286113
## 
## $ST27Q04
##                a        b1         b2        b3
## par     1.481798 -2.611004 -0.5529399 1.0294265
## CI_2.5  1.248828 -2.986432 -0.6961710 0.8470287
## CI_97.5 1.714768 -2.235576 -0.4097089 1.2118242
# ==========================================
# 5. BAŞLIK: GRAFİKLER (Yönerge Madde 8, 9 ve 10)
# ==========================================

# Grafik 1: Kategori Tepki Eğrileri (Trace Lines)
plot(mod_grm, type = 'trace', which.items = 1:4, 
     main = "Kategori Tepki Eğrileri (Trace Lines)")

# Grafik 2: Madde Bilgi Fonksiyonları (Item Information Curves)
plot(mod_grm, type = 'infotrace', which.items = 1:4, 
     main = "Madde Bilgi Fonksiyonları (IIC)")

# Grafik 3: Test Bilgi Fonksiyonu ve Standart Hata Eğrisi (TIF & SE)
plot(mod_grm, type = 'infoSE', 
     main = "Test Bilgi Fonksiyonu ve Standart Hata Egrisi")

# Grafik 4: Test Karakteristik Eğrisi (Test Characteristic Curve)
plot(mod_grm, type = 'score', 
     main = "Test Karakteristik Egrisi (TCC)")

# ==============================================================================
# ADIM 6: BİREYSEL YETENEK PARAMETRELERİ (θ) VE GÜVENİRLİK (Çok Kategorili)
# ==============================================================================

# 1. Bireysel Yetenek Puanlarını Tahmin Etme (EAP Yöntemi)
cokat_yetenek <- fscores(mod_grm, method = "EAP", full.scores = TRUE)

# Puanların genel özet istatistiklerini görelim:
summary(cokat_yetenek)
##        F1            
##  Min.   :-3.7264192  
##  1st Qu.:-0.5608975  
##  Median :-0.0291213  
##  Mean   : 0.0002451  
##  3rd Qu.: 0.5314303  
##  Max.   : 2.7939350
sd(cokat_yetenek)
## [1] 0.9112436
# 2. Çok Kategorili Model İçin Ampirik Güvenirlik Değerini Hesaplama
ampirik_guvenirlik_cokat <- fscores(mod_grm, method = "EAP", returnList = FALSE)
# mirt paketi üzerinden marjinal güvenirlik çıktısını console'a yazdıralım:
marginal_rxx(mod_grm)
## [1] 0.8322972