1 Giriş

Test alıcılarının simulyasiyası CAT sistemlərinin performansını qiymətləndirmək və testləmək üçün əsas komponentdir. Real test alıcılarının xarakteristikalarını əks etdirən məlumat dəstlərinin yaradılması CAT araşdırmalarının etibarlılığını və real dünya tətbiqlərinin keyfiyyətini birbaşa təsir edir.

Bu bölmədə müxtəlif populyasiya xarakteristikalarına malik test alıcılarının simulyasiyasını, onların qabiliyyət səviyyələrinin paylanmasını və sosial-demoqrafik faktorlarının CAT performansına təsirini öyrənəcəksiniz.

2 Test Alıcıları Populyasiyasının Dizaynı

2.1 Populyasiya Xarakteristikalarının Təriflənməsi

# Test alıcıları populyasiyasının xarakteristikalarını tərifləyək
define_population_characteristics <- function() {
    cat("=== TEST ALICILARI POPULYASİYASI XARAKTERİSTİKALARI ===\n\n")
    
    cat("1. QABİLİYYƏT PAYLANMASI:\n")
    cat("   • Normal paylanma: N(μ, σ²)\n")
    cat("   • Skewed paylanma: Beta, Gamma\n")
    cat("   • Multimodal: Qarışıq paylanma\n")
    cat("   • Truncated: Məhdud aralıq\n\n")
    
    cat("2. DEMOQRAFİK FAKTORLAr:\n")
    cat("   • Yaş qrupları: Gənc, orta yaş, yaşlı\n")
    cat("   • Təhsil səviyyəsi: Orta, ali, magistr, doktor\n")
    cat("   • Təcrübə: İş təcrübəsi illəri\n")
    cat("   • Cins: Kişi, qadın, digər\n")
    cat("   • Etnik mənsubiyyət: Müxtəlif qruplar\n\n")
    
    cat("3. PSİXOLOJİ AMILLƏR:\n")
    cat("   • Test həyəcanı: Aşağı, orta, yüksək\n")
    cat("   • Motivasiya: Daxili, xarici\n")
    cat("   • Risk götürmə meyli: Konservativ, risk götürən\n")
    cat("   • Özgüvən: Aşağı, orta, yüksək\n\n")
    
    cat("4. TEXNOLOJI FAKTIRLAR:\n")
    cat("   • Kompüter bilikləri: Əsas, orta, təkmil\n")
    cat("   • İnternet sürəti: Yavaş, orta, sürətli\n")
    cat("   • Cihaz növü: Desktop, laptop, tablet, mobil\n\n")
    
    cat("5. TEST DAVRANIŞI:\n")
    cat("   • Cavab sürəti: Sürətli, orta, yavaş\n")
    cat("   • Atılmış tapşırıqlar: Yoxdu, az, çox\n")
    cat("   • Response patterns: Tutarlı, qeyri-tutarlı\n")
    
    return(invisible(NULL))
}

define_population_characteristics()
## === TEST ALICILARI POPULYASİYASI XARAKTERİSTİKALARI ===
## 
## 1. QABİLİYYƏT PAYLANMASI:
##    • Normal paylanma: N(μ, σ²)
##    • Skewed paylanma: Beta, Gamma
##    • Multimodal: Qarışıq paylanma
##    • Truncated: Məhdud aralıq
## 
## 2. DEMOQRAFİK FAKTORLAr:
##    • Yaş qrupları: Gənc, orta yaş, yaşlı
##    • Təhsil səviyyəsi: Orta, ali, magistr, doktor
##    • Təcrübə: İş təcrübəsi illəri
##    • Cins: Kişi, qadın, digər
##    • Etnik mənsubiyyət: Müxtəlif qruplar
## 
## 3. PSİXOLOJİ AMILLƏR:
##    • Test həyəcanı: Aşağı, orta, yüksək
##    • Motivasiya: Daxili, xarici
##    • Risk götürmə meyli: Konservativ, risk götürən
##    • Özgüvən: Aşağı, orta, yüksək
## 
## 4. TEXNOLOJI FAKTIRLAR:
##    • Kompüter bilikləri: Əsas, orta, təkmil
##    • İnternet sürəti: Yavaş, orta, sürətli
##    • Cihaz növü: Desktop, laptop, tablet, mobil
## 
## 5. TEST DAVRANIŞI:
##    • Cavab sürəti: Sürətli, orta, yavaş
##    • Atılmış tapşırıqlar: Yoxdu, az, çox
##    • Response patterns: Tutarlı, qeyri-tutarlı

2.2 Əsas Test Alıcıları Yaradma Funksiyası

# Test alıcıları populyasiyasının yaradılması
create_examinees <- function(n_examinees = 500, ability_distribution = "normal",
                            ability_mean = 0, ability_sd = 1, seed = 12345) {
    set.seed(seed)
    
    cat("=== TEST ALICILARI YARADILMASI ===\n")
    cat("Test alıcıları sayı:", n_examinees, "\n")
    cat("Qabiliyyət paylanması:", ability_distribution, "\n\n")
    
    # Qabiliyyət səviyyələrinin yaradılması
    if(ability_distribution == "normal") {
        true_abilities <- rnorm(n_examinees, mean = ability_mean, sd = ability_sd)
    } else if(ability_distribution == "uniform") {
        true_abilities <- runif(n_examinees, min = -3, max = 3)
    } else if(ability_distribution == "skewed") {
        # Beta paylanmasından istifadə edərək skewed distribution
        beta_samples <- rbeta(n_examinees, 2, 5)
        true_abilities <- qnorm(beta_samples)  # Normal quantile-lərə çevir
    } else if(ability_distribution == "bimodal") {
        # İki normal paylanmanın qarışığı
        group1 <- rnorm(n_examinees/2, mean = -1, sd = 0.5)
        group2 <- rnorm(n_examinees - n_examinees/2, mean = 1, sd = 0.5)
        true_abilities <- c(group1, group2)
    } else {
        # Default: normal
        true_abilities <- rnorm(n_examinees, mean = ability_mean, sd = ability_sd)
    }
    
    # Sosial-demoqrafik məlumatlar
    examinees <- data.frame(
        examinee_id = paste0("E", sprintf("%04d", 1:n_examinees)),
        true_theta = true_abilities,
        
        # Demoqrafik məlumatlar
        age = sample(18:65, n_examinees, replace = TRUE),
        gender = sample(c("Kişi", "Qadın"), n_examinees, replace = TRUE, prob = c(0.48, 0.52)),
        education = sample(c("Orta", "Ali", "Magistr", "Doktor"), 
                          n_examinees, replace = TRUE, 
                          prob = c(0.4, 0.4, 0.15, 0.05)),
        experience_years = pmax(0, round(rnorm(n_examinees, 8, 5))),
        
        # Psixoloji amillər
        test_anxiety = pmax(0, rnorm(n_examinees, 2, 1)),  # 0-5 skala
        motivation = pmax(1, pmin(5, round(rnorm(n_examinees, 4, 0.8)))),  # 1-5 skala
        confidence = pmax(1, pmin(5, round(rnorm(n_examinees, 3, 1)))),  # 1-5 skala
        
        # Texnoloji məlumatlar
        computer_skills = sample(c("Əsas", "Orta", "Təkmil"), 
                                n_examinees, replace = TRUE, 
                                prob = c(0.3, 0.5, 0.2)),
        device_type = sample(c("Desktop", "Laptop", "Tablet", "Mobil"), 
                            n_examinees, replace = TRUE,
                            prob = c(0.3, 0.4, 0.2, 0.1)),
        
        # Test davranışı amillər
        typical_response_time = exp(rnorm(n_examinees, log(45), 0.4)),  # saniyə, log-normal
        guessing_tendency = rbeta(n_examinees, 2, 8),  # 0-1 aralığında
        
        stringsAsFactors = FALSE
    )
    
    # Yaş və təcrübə arasında korrelyasiya
    experience_adjustment <- (examinees$age - 18) * 0.3 + rnorm(n_examinees, 0, 2)
    examinees$experience_years <- pmax(0, round(experience_adjustment))
    
    # Təhsil və qabiliyyət arasında zəif korrelyasiya
    education_numeric <- as.numeric(factor(examinees$education, 
                                          levels = c("Orta", "Ali", "Magistr", "Doktor")))
    ability_adjustment <- (education_numeric - 2) * 0.2 + rnorm(n_examinees, 0, 0.8)
    examinees$true_theta <- examinees$true_theta + ability_adjustment
    
    return(examinees)
}

# Test alıcılarını yaradın
examinees <- create_examinees(500, ability_distribution = "normal")
## === TEST ALICILARI YARADILMASI ===
## Test alıcıları sayı: 500 
## Qabiliyyət paylanması: normal
# İlk 5 test alıcısını göstər
cat("İlk 5 test alıcısı:\n")
## İlk 5 test alıcısı:
print(head(examinees[, 1:8], 5))
##   examinee_id true_theta age gender education experience_years test_anxiety
## 1       E0001  1.0059213  57   Kişi   Magistr               13     3.510589
## 2       E0002  1.1999147  57  Qadın      Orta               14     1.055713
## 3       E0003  0.4031278  51   Kişi    Doktor                8     1.711395
## 4       E0004 -0.4788854  29  Qadın      Orta                4     1.856244
## 5       E0005  1.5131765  37  Qadın       Ali                5     0.000000
##   motivation
## 1          3
## 2          3
## 3          4
## 4          4
## 5          4
# Qabiliyyət paylanmasının statistikası
cat("\nQabiliyyət səviyyəsi statistikası:\n")
## 
## Qabiliyyət səviyyəsi statistikası:
print(summary(examinees$true_theta))
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -3.544127 -0.844645  0.001496 -0.007998  0.871877  3.433149
cat("\nDemoqrafik paylanma:\n")
## 
## Demoqrafik paylanma:
cat("Yaş aralığı:", range(examinees$age), "\n")
## Yaş aralığı: 18 65
cat("Təhsil paylanması:\n")
## Təhsil paylanması:
print(table(examinees$education))
## 
##     Ali  Doktor Magistr    Orta 
##     198      19      84     199

3 Populyasiya Subqruplarının Yaradılması

3.1 Məqsədli Subqrup Dizaynı

# Məqsədli subqruplarla test alıcıları yaratma
create_targeted_examinees <- function(subgroup_specs) {
    
    cat("=== MƏQSƏDLI SUBQRUP DİZAYNI ===\n\n")
    
    all_examinees <- data.frame()
    
    for(i in 1:length(subgroup_specs)) {
        spec <- subgroup_specs[[i]]
        subgroup_name <- names(subgroup_specs)[i]
        
        cat("Subqrup yaradılır:", subgroup_name, "\n")
        cat("  Sayı:", spec$n, "\n")
        cat("  Orta qabiliyyət:", spec$ability_mean, "\n")
        cat("  Qabiliyyət SD:", spec$ability_sd, "\n")
        
        # Subqrup üçün test alıcıları
        set.seed(spec$seed)
        
        subgroup_examinees <- data.frame(
            examinee_id = paste0(substr(subgroup_name, 1, 2), sprintf("%04d", 1:spec$n)),
            subgroup = subgroup_name,
            true_theta = rnorm(spec$n, spec$ability_mean, spec$ability_sd),
            
            # Subqrup spesifik xarakteristikalar
            age = round(rnorm(spec$n, spec$age_mean, spec$age_sd)),
            education = sample(spec$education_levels, spec$n, replace = TRUE, 
                              prob = spec$education_probs),
            experience_years = pmax(0, round(rnorm(spec$n, spec$experience_mean, 
                                                  spec$experience_sd))),
            
            # Psixoloji profil
            test_anxiety = pmax(0, pmin(5, rnorm(spec$n, spec$anxiety_mean, 1))),
            motivation = pmax(1, pmin(5, round(rnorm(spec$n, spec$motivation_mean, 0.8)))),
            confidence = pmax(1, pmin(5, round(rnorm(spec$n, spec$confidence_mean, 1)))),
            
            # Davranış xarakteristikaları
            typical_response_time = exp(rnorm(spec$n, log(spec$response_time_mean), 0.3)),
            guessing_tendency = rbeta(spec$n, spec$guessing_alpha, spec$guessing_beta),
            
            stringsAsFactors = FALSE
        )
        
        all_examinees <- rbind(all_examinees, subgroup_examinees)
        cat("  Yaradıldı:", nrow(subgroup_examinees), "test alıcısı\n\n")
    }
    
    return(all_examinees)
}

# Subqrup spesifikasiyaları
subgroup_specifications <- list(
    "Yeni_Mezunlar" = list(
        n = 100,
        ability_mean = -0.5, ability_sd = 0.8,
        age_mean = 23, age_sd = 2,
        education_levels = c("Ali", "Magistr"),
        education_probs = c(0.8, 0.2),
        experience_mean = 1, experience_sd = 1,
        anxiety_mean = 3.5, motivation_mean = 4.2, confidence_mean = 2.8,
        response_time_mean = 50, guessing_alpha = 3, guessing_beta = 7,
        seed = 100
    ),
    
    "Təcrübəli_Mütəxəssislər" = list(
        n = 150,
        ability_mean = 0.8, ability_sd = 0.9,
        age_mean = 38, age_sd = 8,
        education_levels = c("Ali", "Magistr", "Doktor"),
        education_probs = c(0.5, 0.35, 0.15),
        experience_mean = 12, experience_sd = 6,
        anxiety_mean = 2.0, motivation_mean = 3.8, confidence_mean = 4.0,
        response_time_mean = 35, guessing_alpha = 2, guessing_beta = 10,
        seed = 200
    ),
    
    "Orta_Performans" = list(
        n = 200,
        ability_mean = 0.0, ability_sd = 1.0,
        age_mean = 32, age_sd = 10,
        education_levels = c("Orta", "Ali", "Magistr"),
        education_probs = c(0.3, 0.6, 0.1),
        experience_mean = 7, experience_sd = 5,
        anxiety_mean = 2.8, motivation_mean = 3.5, confidence_mean = 3.2,
        response_time_mean = 42, guessing_alpha = 2.5, guessing_beta = 8,
        seed = 300
    ),
    
    "Aşağı_Performans" = list(
        n = 50,
        ability_mean = -1.2, ability_sd = 0.6,
        age_mean = 28, age_sd = 8,
        education_levels = c("Orta", "Ali"),
        education_probs = c(0.7, 0.3),
        experience_mean = 3, experience_sd = 3,
        anxiety_mean = 4.0, motivation_mean = 2.8, confidence_mean = 2.2,
        response_time_mean = 65, guessing_alpha = 4, guessing_beta = 6,
        seed = 400
    )
)

# Məqsədli subqrupları yaradın
targeted_examinees <- create_targeted_examinees(subgroup_specifications)
## === MƏQSƏDLI SUBQRUP DİZAYNI ===
## 
## Subqrup yaradılır: Yeni_Mezunlar 
##   Sayı: 100 
##   Orta qabiliyyət: -0.5 
##   Qabiliyyət SD: 0.8 
##   Yaradıldı: 100 test alıcısı
## 
## Subqrup yaradılır: Təcrübəli_Mütəxəssislər 
##   Sayı: 150 
##   Orta qabiliyyət: 0.8 
##   Qabiliyyət SD: 0.9 
##   Yaradıldı: 150 test alıcısı
## 
## Subqrup yaradılır: Orta_Performans 
##   Sayı: 200 
##   Orta qabiliyyət: 0 
##   Qabiliyyət SD: 1 
##   Yaradıldı: 200 test alıcısı
## 
## Subqrup yaradılır: Aşağı_Performans 
##   Sayı: 50 
##   Orta qabiliyyət: -1.2 
##   Qabiliyyət SD: 0.6 
##   Yaradıldı: 50 test alıcısı
cat("Ümumi yaradılan test alıcıları:", nrow(targeted_examinees), "\n")
## Ümumi yaradılan test alıcıları: 500
cat("Subqrup paylanması:\n")
## Subqrup paylanması:
print(table(targeted_examinees$subgroup))
## 
##        Aşağı_Performans         Orta_Performans Təcrübəli_Mütəxəssislər 
##                      50                     200                     150 
##           Yeni_Mezunlar 
##                     100

4 Test Alıcıları Xarakteristikalarının Təhlili

4.1 Demoqrafik və Psixoloji Profil Təhlili

# Test alıcıları xarakteristikalarının təhlili
analyze_examinee_characteristics <- function(examinees_data) {
    
    cat("=== TEST ALICILARI XARAKTERİSTİKALARI TƏHLİLİ ===\n\n")
    
    # 1. Qabiliyyət paylanması
    cat("1. QABİLİYYƏT PAYLANMASI:\n")
    ability_stats <- summary(examinees_data$true_theta)
    print(ability_stats)
    
    ability_quantiles <- quantile(examinees_data$true_theta, 
                                 probs = c(0.1, 0.25, 0.5, 0.75, 0.9))
    cat("\nPersentillər:\n")
    print(round(ability_quantiles, 3))
    
    # 2. Demoqrafik təhlil
    cat("\n2. DEMOQRAFİK TƏHLİL:\n")
    cat("Yaş statistikaları:\n")
    print(summary(examinees_data$age))
    
    if("education" %in% names(examinees_data)) {
        cat("\nTəhsil paylanması:\n")
        education_table <- table(examinees_data$education)
        education_pct <- round(prop.table(education_table) * 100, 1)
        for(i in 1:length(education_table)) {
            cat("  ", names(education_table)[i], ":", education_table[i], 
                "(", education_pct[i], "%)\n")
        }
    }
    
    # 3. Psixoloji profil
    if("test_anxiety" %in% names(examinees_data)) {
        cat("\n3. PSİXOLOJİ PROFİL:\n")
        cat("Test həyəcanı ortalaması:", round(mean(examinees_data$test_anxiety), 2), "\n")
        
        if("motivation" %in% names(examinees_data)) {
            cat("Motivasiya ortalaması:", round(mean(examinees_data$motivation), 2), "\n")
        }
        
        if("confidence" %in% names(examinees_data)) {
            cat("Özgüvən ortalaması:", round(mean(examinees_data$confidence), 2), "\n")
        }
    }
    
    # 4. Davranış xarakteristikaları
    if("typical_response_time" %in% names(examinees_data)) {
        cat("\n4. DAVRANIŞ XARAKTERİSTİKALARI:\n")
        cat("Orta cavab vaxtı:", round(mean(examinees_data$typical_response_time), 1), "saniyə\n")
        
        if("guessing_tendency" %in% names(examinees_data)) {
            cat("Təxmin etmə meyli:", round(mean(examinees_data$guessing_tendency), 3), "\n")
        }
    }
    
    # 5. Korrelyasiya təhlili
    cat("\n5. KORRELYASİYA TƏHLİLİ:\n")
    
    # Qabiliyyət və yaş
    if("age" %in% names(examinees_data)) {
        age_ability_cor <- cor(examinees_data$age, examinees_data$true_theta)
        cat("Yaş - Qabiliyyət korrelyasiyası:", round(age_ability_cor, 3), "\n")
    }
    
    # Qabiliyyət və təcrübə
    if("experience_years" %in% names(examinees_data)) {
        exp_ability_cor <- cor(examinees_data$experience_years, examinees_data$true_theta)
        cat("Təcrübə - Qabiliyyət korrelyasiyası:", round(exp_ability_cor, 3), "\n")
    }
    
    # Həyəcan və qabiliyyət
    if("test_anxiety" %in% names(examinees_data)) {
        anxiety_ability_cor <- cor(examinees_data$test_anxiety, examinees_data$true_theta)
        cat("Həyəcan - Qabiliyyət korrelyasiyası:", round(anxiety_ability_cor, 3), "\n")
    }
    
    return(invisible(NULL))
}

# Regular examinees təhlili
cat("=== ÜMUMI POPULYASIYA TƏHLİLİ ===\n")
## === ÜMUMI POPULYASIYA TƏHLİLİ ===
analyze_examinee_characteristics(examinees)
## === TEST ALICILARI XARAKTERİSTİKALARI TƏHLİLİ ===
## 
## 1. QABİLİYYƏT PAYLANMASI:
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## -3.544127 -0.844645  0.001496 -0.007998  0.871877  3.433149 
## 
## Persentillər:
##    10%    25%    50%    75%    90% 
## -1.649 -0.845  0.001  0.872  1.607 
## 
## 2. DEMOQRAFİK TƏHLİL:
## Yaş statistikaları:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      18      30      43      42      54      65 
## 
## Təhsil paylanması:
##    Ali : 198 ( 39.6 %)
##    Doktor : 19 ( 3.8 %)
##    Magistr : 84 ( 16.8 %)
##    Orta : 199 ( 39.8 %)
## 
## 3. PSİXOLOJİ PROFİL:
## Test həyəcanı ortalaması: 2.01 
## Motivasiya ortalaması: 3.97 
## Özgüvən ortalaması: 2.97 
## 
## 4. DAVRANIŞ XARAKTERİSTİKALARI:
## Orta cavab vaxtı: 49.4 saniyə
## Təxmin etmə meyli: 0.193 
## 
## 5. KORRELYASİYA TƏHLİLİ:
## Yaş - Qabiliyyət korrelyasiyası: -0.06 
## Təcrübə - Qabiliyyət korrelyasiyası: -0.075 
## Həyəcan - Qabiliyyət korrelyasiyası: -0.006
# Targeted examinees təhlili
if(exists("targeted_examinees")) {
    cat("\n=== MƏQSƏDLI SUBQRUPLAR TƏHLİLİ ===\n")
    analyze_examinee_characteristics(targeted_examinees)
}
## 
## === MƏQSƏDLI SUBQRUPLAR TƏHLİLİ ===
## === TEST ALICILARI XARAKTERİSTİKALARI TƏHLİLİ ===
## 
## 1. QABİLİYYƏT PAYLANMASI:
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -2.70737 -0.68085  0.06990  0.08749  0.86285  3.57918 
## 
## Persentillər:
##    10%    25%    50%    75%    90% 
## -1.352 -0.681  0.070  0.863  1.468 
## 
## 2. DEMOQRAFİK TƏHLİL:
## Yaş statistikaları:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   23.00   30.00   31.45   39.00   68.00 
## 
## Təhsil paylanması:
##    Ali : 291 ( 58.2 %)
##    Doktor : 20 ( 4 %)
##    Magistr : 83 ( 16.6 %)
##    Orta : 106 ( 21.2 %)
## 
## 3. PSİXOLOJİ PROFİL:
## Test həyəcanı ortalaması: 2.76 
## Motivasiya ortalaması: 3.61 
## Özgüvən ortalaması: 3.29 
## 
## 4. DAVRANIŞ XARAKTERİSTİKALARI:
## Orta cavab vaxtı: 48.2 saniyə
## Təxmin etmə meyli: 0.252 
## 
## 5. KORRELYASİYA TƏHLİLİ:
## Yaş - Qabiliyyət korrelyasiyası: 0.276 
## Təcrübə - Qabiliyyət korrelyasiyası: 0.399 
## Həyəcan - Qabiliyyət korrelyasiyası: -0.248

4.2 Subqrup Müqayisəsi və Vizuallaşdırma

# Subqrup müqayisəsi və vizuallaşdırma
visualize_examinee_characteristics <- function(examinees_data, by_subgroup = FALSE) {
    
    if(by_subgroup && "subgroup" %in% names(examinees_data)) {
        # Subqruplara görə qabiliyyət paylanması
        p1 <- ggplot(examinees_data, aes(x = true_theta, fill = subgroup)) +
            geom_density(alpha = 0.7) +
            labs(title = "Subqruplara Görə Qabiliyyət Paylanması",
                 x = "Həqiqi Qabiliyyət (θ)", y = "Sıxlıq",
                 fill = "Subqrup") +
            theme_minimal() +
            scale_fill_viridis_d()
        
        # Subqruplara görə boxplot
        p2 <- ggplot(examinees_data, aes(x = subgroup, y = true_theta, fill = subgroup)) +
            geom_boxplot() +
            geom_jitter(width = 0.2, alpha = 0.3, size = 0.8) +
            labs(title = "Subqruplara Görə Qabiliyyət Paylanması",
                 x = "Subqrup", y = "Həqiqi Qabiliyyət (θ)") +
            theme_minimal() +
            theme(axis.text.x = element_text(angle = 45, hjust = 1),
                  legend.position = "none") +
            scale_fill_viridis_d()
        
        # Yaş vs qabiliyyət
        p3 <- ggplot(examinees_data, aes(x = age, y = true_theta, color = subgroup)) +
            geom_point(alpha = 0.6) +
            geom_smooth(method = "lm", se = FALSE) +
            labs(title = "Yaş vs Qabiliyyət (Subqruplara görə)",
                 x = "Yaş", y = "Həqiqi Qabiliyyət (θ)",
                 color = "Subqrup") +
            theme_minimal() +
            scale_color_viridis_d()
        
        # Psixoloji profil radar chart (orta dəyərlər)
        if(all(c("test_anxiety", "motivation", "confidence") %in% names(examinees_data))) {
            psych_summary <- examinees_data %>%
                group_by(subgroup) %>%
                summarise(
                    Həyəcan = mean(test_anxiety, na.rm = TRUE),
                    Motivasiya = mean(motivation, na.rm = TRUE),
                    Özgüvən = mean(confidence, na.rm = TRUE),
                    .groups = 'drop'
                ) %>%
                tidyr::pivot_longer(cols = -subgroup, names_to = "Faktor", values_to = "Dəyər")
            
            p4 <- ggplot(psych_summary, aes(x = Faktor, y = Dəyər, fill = subgroup)) +
                geom_col(position = "dodge") +
                labs(title = "Subqruplara Görə Psixoloji Profil",
                     x = "Psixoloji Faktor", y = "Orta Dəyər",
                     fill = "Subqrup") +
                theme_minimal() +
                scale_fill_viridis_d()
        } else {
            p4 <- ggplot() + labs(title = "Psixoloji məlumat mövcud deyil") + theme_minimal()
        }
        
    } else {
        # Ümumi populyasiya vizuallaşdırması
        p1 <- ggplot(examinees_data, aes(x = true_theta)) +
            geom_histogram(bins = 30, fill = "lightblue", color = "black", alpha = 0.7) +
            geom_density(aes(y = ..scaled.. * max(..count..)), color = "red", size = 1) +
            labs(title = "Qabiliyyət Paylanması",
                 x = "Həqiqi Qabiliyyət (θ)", y = "Tezlik") +
            theme_minimal() +
            geom_vline(xintercept = mean(examinees_data$true_theta), 
                       color = "red", linetype = "dashed")
        
        # Yaş paylanması
        p2 <- ggplot(examinees_data, aes(x = age)) +
            geom_histogram(bins = 20, fill = "lightgreen", color = "black", alpha = 0.7) +
            labs(title = "Yaş Paylanması",
                 x = "Yaş", y = "Tezlik") +
            theme_minimal()
        
        # Təhsil paylanması
        if("education" %in% names(examinees_data)) {
            education_summary <- examinees_data %>%
                count(education) %>%
                mutate(percentage = round(n / sum(n) * 100, 1))
            
            p3 <- ggplot(education_summary, aes(x = reorder(education, n), y = n, fill = education)) +
                geom_col() +
                geom_text(aes(label = paste0(n, " (", percentage, "%)")), 
                          hjust = -0.1, size = 3) +
                coord_flip() +
                labs(title = "Təhsil Səviyyəsi Paylanması",
                     x = "Təhsil Səviyyəsi", y = "Sayı") +
                theme_minimal() +
                theme(legend.position = "none") +
                scale_fill_viridis_d()
        } else {
            p3 <- ggplot() + labs(title = "Təhsil məlumatı mövcud deyil") + theme_minimal()
        }
        
        # Yaş vs qabiliyyət scatter
        p4 <- ggplot(examinees_data, aes(x = age, y = true_theta)) +
            geom_point(alpha = 0.6, color = "darkblue") +
            geom_smooth(method = "lm", se = TRUE, color = "red") +
            labs(title = "Yaş vs Qabiliyyət Əlaqəsi",
                 x = "Yaş", y = "Həqiqi Qabiliyyət (θ)") +
            theme_minimal()
    }
    
    # Layout
    grid.arrange(p1, p2, p3, p4, ncol = 2)
    
    return(list(p1 = p1, p2 = p2, p3 = p3, p4 = p4))
}

# Ümumi populyasiya vizuallaşdırması
cat("Ümumi populyasiya vizuallaşdırması:\n")
## Ümumi populyasiya vizuallaşdırması:
general_plots <- visualize_examinee_characteristics(examinees, by_subgroup = FALSE)

# Subqrup vizuallaşdırması (əgər mövcuddursa)
if(exists("targeted_examinees") && "subgroup" %in% names(targeted_examinees)) {
    cat("\nSubqrup müqayisə vizuallaşdırması:\n")
    
    # tidyr yoxlayaq
    if(!require(tidyr, quietly = TRUE)) {
        # Manual reshape
        psych_summary <- targeted_examinees %>%
            group_by(subgroup) %>%
            summarise(
                test_anxiety_mean = mean(test_anxiety, na.rm = TRUE),
                motivation_mean = mean(motivation, na.rm = TRUE),
                confidence_mean = mean(confidence, na.rm = TRUE),
                .groups = 'drop'
            )
        
        # Simple visualization without pivot_longer
        p_anxiety <- ggplot(targeted_examinees, aes(x = subgroup, y = test_anxiety, fill = subgroup)) +
            geom_boxplot() +
            labs(title = "Subqruplara Görə Test Həyəcanı", x = "Subqrup", y = "Test Həyəcanı") +
            theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1),
                                   legend.position = "none") +
            scale_fill_viridis_d()
        
        print(p_anxiety)
    }
    
    subgroup_plots <- visualize_examinee_characteristics(targeted_examinees, by_subgroup = TRUE)
}
## 
## Subqrup müqayisə vizuallaşdırması:

5 Korrelyasiya Matrisi və Faktörlərin Əlaqəsi

5.1 Çoxölçülü Əlaqə Təhlili

# Test alıcıları arasında faktörlərin korrelyasiya təhlili
analyze_factor_correlations <- function(examinees_data) {
    
    cat("=== FAKTORLAR ARASI KORRELYASİYA TƏHLİLİ ===\n\n")
    
    # Korrelyasiya üçün rəqəmsal dəyişənləri seç
    numeric_vars <- c("true_theta", "age")
    
    if("experience_years" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "experience_years")
    }
    if("test_anxiety" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "test_anxiety")
    }
    if("motivation" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "motivation")
    }
    if("confidence" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "confidence")
    }
    if("typical_response_time" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "typical_response_time")
    }
    if("guessing_tendency" %in% names(examinees_data)) {
        numeric_vars <- c(numeric_vars, "guessing_tendency")
    }
    
    # Korrelyasiya matrisi
    correlation_data <- examinees_data[, numeric_vars, drop = FALSE]
    correlation_matrix <- cor(correlation_data, use = "complete.obs")
    
    cat("Korrelyasiya matrisi:\n")
    print(round(correlation_matrix, 3))
    
    # Əhəmiyyətli korrelyasiyaları müəyyən et
    cat("\nƏHƏMİYYƏTLİ KORRELYASİYALAR (|r| > 0.3):\n")
    significant_correlations <- which(abs(correlation_matrix) > 0.3 & 
                                     correlation_matrix != 1, arr.ind = TRUE)
    
    if(nrow(significant_correlations) > 0) {
        for(i in 1:nrow(significant_correlations)) {
            row_idx <- significant_correlations[i, 1]
            col_idx <- significant_correlations[i, 2]
            
            if(row_idx < col_idx) {  # Təkrarları önlə
                var1 <- rownames(correlation_matrix)[row_idx]
                var2 <- colnames(correlation_matrix)[col_idx]
                corr_value <- correlation_matrix[row_idx, col_idx]
                
                cat("  ", var1, " - ", var2, ": r =", round(corr_value, 3), "\n")
            }
        }
    } else {
        cat("  Əhəmiyyətli korrelyasiya tapılmadı.\n")
    }
    
    # Korrelyasiya matrisi vizuallaşdırması
    if(require(corrplot, quietly = TRUE)) {
        corrplot(correlation_matrix, method = "color", type = "upper", 
                 order = "hclust", tl.cex = 0.8, tl.col = "black")
        title("Test Alıcıları Faktörləri Korrelyasiya Matrisi")
    } else {
        # ggplot ilə alternativ
        correlation_melted <- expand.grid(Var1 = rownames(correlation_matrix),
                                         Var2 = colnames(correlation_matrix))
        correlation_melted$value <- as.vector(correlation_matrix)
        
        p_corr <- ggplot(correlation_melted, aes(Var1, Var2, fill = value)) +
            geom_tile(color = "white") +
            geom_text(aes(label = round(value, 2)), color = "black", size = 3) +
            scale_fill_gradient2(low = "blue", high = "red", mid = "white", 
                               midpoint = 0, limit = c(-1,1), space = "Lab", 
                               name="Korrelyasiya") +
            labs(title = "Korrelyasiya Matrisi", x = "", y = "") +
            theme_minimal() +
            theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
        
        print(p_corr)
    }
    
    return(correlation_matrix)
}

# Faktör korrelyasiya təhlili
if(exists("targeted_examinees")) {
    correlation_results <- analyze_factor_correlations(targeted_examinees)
} else {
    correlation_results <- analyze_factor_correlations(examinees)
}
## === FAKTORLAR ARASI KORRELYASİYA TƏHLİLİ ===
## 
## Korrelyasiya matrisi:
##                       true_theta    age experience_years test_anxiety
## true_theta                 1.000  0.276            0.399       -0.248
## age                        0.276  1.000            0.339       -0.268
## experience_years           0.399  0.339            1.000       -0.321
## test_anxiety              -0.248 -0.268           -0.321        1.000
## motivation                 0.091 -0.071            0.015        0.005
## confidence                 0.298  0.331            0.290       -0.296
## typical_response_time     -0.274 -0.256           -0.254        0.224
## guessing_tendency         -0.282 -0.243           -0.299        0.189
##                       motivation confidence typical_response_time
## true_theta                 0.091      0.298                -0.274
## age                       -0.071      0.331                -0.256
## experience_years           0.015      0.290                -0.254
## test_anxiety               0.005     -0.296                 0.224
## motivation                 1.000      0.052                -0.135
## confidence                 0.052      1.000                -0.257
## typical_response_time     -0.135     -0.257                 1.000
## guessing_tendency         -0.045     -0.214                 0.270
##                       guessing_tendency
## true_theta                       -0.282
## age                              -0.243
## experience_years                 -0.299
## test_anxiety                      0.189
## motivation                       -0.045
## confidence                       -0.214
## typical_response_time             0.270
## guessing_tendency                 1.000
## 
## ƏHƏMİYYƏTLİ KORRELYASİYALAR (|r| > 0.3):
##    true_theta  -  experience_years : r = 0.399 
##    age  -  experience_years : r = 0.339 
##    experience_years  -  test_anxiety : r = -0.321 
##    age  -  confidence : r = 0.331

6 Test Alıcıları Davranış Simulyasiyası

6.1 Response Pattern Simulyasiyası

# Test alıcıları davranış simulyasiyası
simulate_examinee_behavior <- function(examinees_subset, item_bank = NULL, n_items = 10) {
    
    cat("=== TEST ALICILARI DAVRANIŞ SİMULYASİYASI ===\n\n")
    
    # Sadə item bank yaradılması (əgər verilməyibsə)
    if(is.null(item_bank)) {
        set.seed(567)
        item_bank <- data.frame(
            item_id = 1:50,
            a = runif(50, 0.8, 2.5),
            b = rnorm(50, 0, 1.2),
            c = runif(50, 0.1, 0.25)
        )
    }
    
    cat("Test alıcıları sayı:", nrow(examinees_subset), "\n")
    cat("İstifadə edilən item sayı:", n_items, "\n\n")
    
    # Təsadüfi itemlər seç
    selected_items <- sample(1:nrow(item_bank), n_items)
    
    simulation_results <- data.frame()
    
    for(i in 1:nrow(examinees_subset)) {
        examinee <- examinees_subset[i, ]
        
        # Test alıcısının response pattern-ı
        responses <- numeric(n_items)
        response_times <- numeric(n_items)
        
        for(j in 1:n_items) {
            item_idx <- selected_items[j]
            a <- item_bank$a[item_idx]
            b <- item_bank$b[item_idx]
            c <- item_bank$c[item_idx]
            
            # Əsas doğru cavab ehtimalı
            base_prob <- c + (1 - c) * plogis(a * (examinee$true_theta - b))
            
            # Psixoloji faktorların təsiri
            if("test_anxiety" %in% names(examinee)) {
                # Yüksək həyəcan performansı azaldır
                anxiety_effect <- -0.1 * (examinee$test_anxiety - 2.5)  # Center around 2.5
                base_prob <- base_prob + anxiety_effect
            }
            
            if("motivation" %in% names(examinee)) {
                # Yüksək motivasiya performansı artırır
                motivation_effect <- 0.05 * (examinee$motivation - 3)  # Center around 3
                base_prob <- base_prob + motivation_effect
            }
            
            if("confidence" %in% names(examinee)) {
                # Özgüvən risk götürmə davranışını təsir edir
                confidence_effect <- 0.03 * (examinee$confidence - 3)
                base_prob <- base_prob + confidence_effect
            }
            
            # Təxmin etmə davranışı
            if("guessing_tendency" %in% names(examinee)) {
                if(base_prob < 0.4) {  # Çətin sual olduqda
                    guessing_boost <- examinee$guessing_tendency * 0.2
                    base_prob <- base_prob + guessing_boost
                }
            }
            
            # Ehtimalı 0-1 aralığında saxla
            base_prob <- pmax(0.05, pmin(0.95, base_prob))
            
            # Response simulyasiya et
            responses[j] <- rbinom(1, 1, base_prob)
            
            # Response time simulyasiya et
            base_time <- ifelse("typical_response_time" %in% names(examinee),
                               examinee$typical_response_time, 45)
            
            # Çətinlik təsiri
            difficulty_effect <- 1 + 0.3 * (b - examinee$true_theta)
            difficulty_effect <- pmax(0.5, pmin(2.0, difficulty_effect))
            
            # Həyəcan təsiri
            if("test_anxiety" %in% names(examinee)) {
                anxiety_time_effect <- 1 + 0.1 * (examinee$test_anxiety - 2.5)
                anxiety_time_effect <- pmax(0.8, pmin(1.5, anxiety_time_effect))
            } else {
                anxiety_time_effect <- 1
            }
            
            final_time <- base_time * difficulty_effect * anxiety_time_effect
            response_times[j] <- max(5, rnorm(1, final_time, final_time * 0.3))
        }
        
        # Nəticələri saxla
        temp_result <- data.frame(
            examinee_id = examinee$examinee_id,
            true_theta = examinee$true_theta,
            total_correct = sum(responses),
            proportion_correct = mean(responses),
            average_response_time = mean(response_times),
            total_time = sum(response_times),
            responses_string = paste(responses, collapse = ""),
            stringsAsFactors = FALSE
        )
        
        # Subqrup məlumatı (əgər var)
        if("subgroup" %in% names(examinee)) {
            temp_result$subgroup <- examinee$subgroup
        }
        
        simulation_results <- rbind(simulation_results, temp_result)
    }
    
    cat("Simulyasiya tamamlandı!\n")
    cat("Orta doğru cavab faizi:", round(mean(simulation_results$proportion_correct) * 100, 1), "%\n")
    cat("Orta response time:", round(mean(simulation_results$average_response_time), 1), "saniyə\n")
    
    return(list(
        results = simulation_results,
        selected_items = selected_items,
        item_bank = item_bank
    ))
}

# Davranış simulyasiyası (kiçik nümunə)
if(exists("targeted_examinees")) {
    sample_examinees <- targeted_examinees[sample(1:nrow(targeted_examinees), 20), ]
} else {
    sample_examinees <- examinees[sample(1:nrow(examinees), 20), ]
}

behavior_simulation <- simulate_examinee_behavior(sample_examinees, n_items = 8)
## === TEST ALICILARI DAVRANIŞ SİMULYASİYASI ===
## 
## Test alıcıları sayı: 20 
## İstifadə edilən item sayı: 8 
## 
## Simulyasiya tamamlandı!
## Orta doğru cavab faizi: 67.5 %
## Orta response time: 48.5 saniyə
cat("\nSimulyasiya nəticələri:\n")
## 
## Simulyasiya nəticələri:
print(head(behavior_simulation$results))
##   examinee_id  true_theta total_correct proportion_correct
## 1      Or0024  0.13489312             4              0.500
## 2      Ye0004  0.20942785             5              0.625
## 3      Or0029 -0.09936222             4              0.500
## 4      Tə0137  0.10189920             8              1.000
## 5      Aş0025 -0.26533785             6              0.750
## 6      Ye0097 -1.16599664             3              0.375
##   average_response_time total_time responses_string                subgroup
## 1              71.60568   572.8454         10110010         Orta_Performans
## 2              36.59077   292.7262         10111001           Yeni_Mezunlar
## 3              50.07423   400.5938         11011000         Orta_Performans
## 4              17.43800   139.5040         11111111 Təcrübəli_Mütəxəssislər
## 5              92.24354   737.9483         11110011        Aşağı_Performans
## 6              50.19139   401.5311         00111000           Yeni_Mezunlar

6.2 Performance vs Ability Təhlili

# Performance vs ability təhlili
analyze_performance_ability <- function(simulation_results) {
    
    cat("=== PERFORMANS vs QABİLİYYƏT TƏHLİLİ ===\n\n")
    
    results_data <- simulation_results$results
    
    # Performance vs True Ability
    ability_performance_cor <- cor(results_data$true_theta, results_data$proportion_correct)
    cat("Həqiqi qabiliyyət - Performans korrelyasiyası:", round(ability_performance_cor, 3), "\n")
    
    # Response time vs Ability
    if("average_response_time" %in% names(results_data)) {
        time_ability_cor <- cor(results_data$true_theta, results_data$average_response_time)
        cat("Həqiqi qabiliyyət - Response time korrelyasiyası:", round(time_ability_cor, 3), "\n")
    }
    
    # Subqrup müqayisəsi (əgər mövcuddursa)
    if("subgroup" %in% names(results_data)) {
        cat("\nSubqrup performans müqayisəsi:\n")
        subgroup_performance <- results_data %>%
            group_by(subgroup) %>%
            summarise(
                Mean_Ability = round(mean(true_theta), 3),
                Mean_Performance = round(mean(proportion_correct), 3),
                Mean_Response_Time = round(mean(average_response_time), 1),
                Count = n(),
                .groups = 'drop'
            )
        
        print(subgroup_performance)
    }
    
    # Vizuallaşdırma
    p1 <- ggplot(results_data, aes(x = true_theta, y = proportion_correct)) +
        geom_point(alpha = 0.7, size = 3) +
        geom_smooth(method = "lm", se = TRUE, color = "red") +
        labs(title = "Həqiqi Qabiliyyət vs Performans",
             x = "Həqiqi Qabiliyyət (θ)",
             y = "Doğru Cavab Faizi") +
        theme_minimal() +
        annotate("text", x = min(results_data$true_theta) + 0.5, 
                 y = max(results_data$proportion_correct) - 0.1,
                 label = paste("r =", round(ability_performance_cor, 3)))
    
    if("average_response_time" %in% names(results_data)) {
        p2 <- ggplot(results_data, aes(x = true_theta, y = average_response_time)) +
            geom_point(alpha = 0.7, size = 3, color = "darkgreen") +
            geom_smooth(method = "lm", se = TRUE, color = "blue") +
            labs(title = "Həqiqi Qabiliyyət vs Response Time",
                 x = "Həqiqi Qabiliyyət (θ)",
                 y = "Orta Response Time (saniyə)") +
            theme_minimal()
    } else {
        p2 <- ggplot() + labs(title = "Response time məlumatı yoxdur") + theme_minimal()
    }
    
    # Subqrup performansı (əgər mövcuddursa)
    if("subgroup" %in% names(results_data)) {
        p3 <- ggplot(results_data, aes(x = subgroup, y = proportion_correct, fill = subgroup)) +
            geom_boxplot() +
            geom_jitter(width = 0.2, alpha = 0.6) +
            labs(title = "Subqruplara Görə Performans",
                 x = "Subqrup", y = "Doğru Cavab Faizi") +
            theme_minimal() +
            theme(axis.text.x = element_text(angle = 45, hjust = 1),
                  legend.position = "none") +
            scale_fill_viridis_d()
    } else {
        p3 <- ggplot() + labs(title = "Subqrup məlumatı yoxdur") + theme_minimal()
    }
    
    # Performance distribution
    p4 <- ggplot(results_data, aes(x = proportion_correct)) +
        geom_histogram(bins = 10, fill = "lightcoral", color = "black", alpha = 0.7) +
        geom_vline(xintercept = mean(results_data$proportion_correct), 
                   color = "red", linetype = "dashed") +
        labs(title = "Performans Paylanması",
             x = "Doğru Cavab Faizi", y = "Tezlik") +
        theme_minimal()
    
    grid.arrange(p1, p2, p3, p4, ncol = 2)
    
    return(list(correlation = ability_performance_cor, 
                subgroup_performance = if("subgroup" %in% names(results_data)) subgroup_performance else NULL))
}

# Performance-ability təhlili
performance_analysis <- analyze_performance_ability(behavior_simulation)
## === PERFORMANS vs QABİLİYYƏT TƏHLİLİ ===
## 
## Həqiqi qabiliyyət - Performans korrelyasiyası: 0.549 
## Həqiqi qabiliyyət - Response time korrelyasiyası: -0.697 
## 
## Subqrup performans müqayisəsi:
## # A tibble: 4 × 5
##   subgroup                Mean_Ability Mean_Performance Mean_Response_Time Count
##   <chr>                          <dbl>            <dbl>              <dbl> <int>
## 1 Aşağı_Performans              -0.338            0.625               74.4     2
## 2 Orta_Performans               -0.356            0.531               57.7     4
## 3 Təcrübəli_Mütəxəssislər        0.787            0.861               31.4     9
## 4 Yeni_Mezunlar                 -0.464            0.475               61.6     5

7 Populyasiya Generasiya Tövsiyələri

7.1 Best Practices və Stratejilər

# Test alıcıları populyasiyası yaratma tövsiyələri
provide_population_recommendations <- function() {
    
    cat("=== TEST ALICILARI POPULYASİYASI YARATMA TOVSİYƏLƏRİ ===\n\n")
    
    cat("1. QABİLİYYƏT PAYLANMASI DİZAYNI:\n")
    cat("   ✓ Target populyasiyaya uyğun paylanma seçin\n")
    cat("   ✓ Normal paylanma: Ümumi populyasiya üçün\n")
    cat("   ✓ Skewed paylanma: Selektiv qruplar üçün\n")
    cat("   ✓ Bimodal: Qarışıq populyasiyalar üçün\n")
    cat("   ✓ Minimum 200-300 test alıcısı simulyasiya üçün\n\n")
    
    cat("2. DEMOQRAFİK REALİZM:\n")
    cat("   ✓ Real populyasiya demographiclərinə uyğun\n")
    cat("   ✓ Yaş, təhsil, təcrübə korrelyasiyalarını daxil edin\n")
    cat("   ✓ Representativ sampling stratejilər\n")
    cat("   ✓ Subqrup balansına diqqət edin\n\n")
    
    cat("3. PSİXOLOJİ FAKTORLARıN MODELLƏŞDİRİLMƏSİ:\n")
    cat("   ✓ Test həyəcanı: 0-5 skala, orta 2.5\n")
    cat("   ✓ Motivasiya: 1-5 skala, orta 3.5-4.0\n")
    cat("   ✓ Özgüvən: Qabiliyyətlə zəif pozitiv korrelyasiya\n")
    cat("   ✓ Individual fərqliliklər: Variasiya əlavə edin\n\n")
    
    cat("4. DAVRANIŞ PARAMETRLƏRİ:\n")
    cat("   ✓ Response time: Log-normal paylanma\n")
    cat("   ✓ Guessing tendency: Beta paylanma (2, 8)\n")
    cat("   ✓ Qabiliyyət-davranış əlaqələri\n")
    cat("   ✓ Fatigue effects uzun testlər üçün\n\n")
    
    cat("5. VALİDASİYA və KEYFİYYƏT NƏZARƏTI:\n")
    cat("   ✓ Populyasiya parametrlərini yoxlayın\n")
    cat("   ✓ Korrelyasiya strukturunu təsdiqləyin\n")
    cat("   ✓ Outlier detection və cleaning\n")
    cat("   ✓ Real data ilə müqayisə edin\n\n")
    
    cat("6. SUBQRUP STRATEGİYALARI:\n")
    cat("   ✓ Məqsədli subqruplar: 50-100 test alıcısı\n")
    cat("   ✓ Balanced representation\n")
    cat("   ✓ Between-group variasiya\n")
    cat("   ✓ Within-group homogeniety\n\n")
    
    # Praktiki template
    cat("7. PRATİKİ İMPLEMENTASİYA TEMPLATE:\n")
    
    template_example <- data.frame(
        Populyasiya_Tipi = c("Ümumi", "Yüksək Performans", "Başlanğıc", "Qarışıq"),
        Örnekləm_Sayı = c("300-500", "100-150", "100-150", "500-1000"),
        Qabiliyyət_Orta = c("0.0", "1.0", "-1.0", "0.0"),
        Qabiliyyət_SD = c("1.0", "0.8", "0.8", "1.2"),
        Yaş_Aralığı = c("18-65", "25-45", "18-30", "18-65"),
        Həyəcan_Səviyyəsi = c("Orta", "Aşağı", "Yüksək", "Variasiyalı")
    )
    
    print(template_example)
    
    return(invisible(NULL))
}

provide_population_recommendations()
## === TEST ALICILARI POPULYASİYASI YARATMA TOVSİYƏLƏRİ ===
## 
## 1. QABİLİYYƏT PAYLANMASI DİZAYNI:
##    ✓ Target populyasiyaya uyğun paylanma seçin
##    ✓ Normal paylanma: Ümumi populyasiya üçün
##    ✓ Skewed paylanma: Selektiv qruplar üçün
##    ✓ Bimodal: Qarışıq populyasiyalar üçün
##    ✓ Minimum 200-300 test alıcısı simulyasiya üçün
## 
## 2. DEMOQRAFİK REALİZM:
##    ✓ Real populyasiya demographiclərinə uyğun
##    ✓ Yaş, təhsil, təcrübə korrelyasiyalarını daxil edin
##    ✓ Representativ sampling stratejilər
##    ✓ Subqrup balansına diqqət edin
## 
## 3. PSİXOLOJİ FAKTORLARıN MODELLƏŞDİRİLMƏSİ:
##    ✓ Test həyəcanı: 0-5 skala, orta 2.5
##    ✓ Motivasiya: 1-5 skala, orta 3.5-4.0
##    ✓ Özgüvən: Qabiliyyətlə zəif pozitiv korrelyasiya
##    ✓ Individual fərqliliklər: Variasiya əlavə edin
## 
## 4. DAVRANIŞ PARAMETRLƏRİ:
##    ✓ Response time: Log-normal paylanma
##    ✓ Guessing tendency: Beta paylanma (2, 8)
##    ✓ Qabiliyyət-davranış əlaqələri
##    ✓ Fatigue effects uzun testlər üçün
## 
## 5. VALİDASİYA və KEYFİYYƏT NƏZARƏTI:
##    ✓ Populyasiya parametrlərini yoxlayın
##    ✓ Korrelyasiya strukturunu təsdiqləyin
##    ✓ Outlier detection və cleaning
##    ✓ Real data ilə müqayisə edin
## 
## 6. SUBQRUP STRATEGİYALARI:
##    ✓ Məqsədli subqruplar: 50-100 test alıcısı
##    ✓ Balanced representation
##    ✓ Between-group variasiya
##    ✓ Within-group homogeniety
## 
## 7. PRATİKİ İMPLEMENTASİYA TEMPLATE:
##    Populyasiya_Tipi Örnekləm_Sayı Qabiliyyət_Orta Qabiliyyət_SD Yaş_Aralığı
## 1             Ümumi       300-500             0.0           1.0       18-65
## 2 Yüksək Performans       100-150             1.0           0.8       25-45
## 3         Başlanğıc       100-150            -1.0           0.8       18-30
## 4           Qarışıq      500-1000             0.0           1.2       18-65
##   Həyəcan_Səviyyəsi
## 1              Orta
## 2             Aşağı
## 3            Yüksək
## 4       Variasiyalı
# Test alıcıları keyfiyyət yoxlaması
quality_check_examinees <- function(examinees_data) {
    
    cat("\n=== TEST ALICILARI KEYFİYYƏT YOXLAMASI ===\n\n")
    
    issues <- c()
    
    # 1. Örnekləm sayı yoxlaması
    n_examinees <- nrow(examinees_data)
    if(n_examinees < 100) {
        issues <- c(issues, paste("Kiçik örnekləm sayı:", n_examinees))
    }
    cat("Örnekləm sayı:", n_examinees, 
        ifelse(n_examinees >= 200, "✅", "⚠️"), "\n")
    
    # 2. Qabiliyyət paylanması yoxlaması
    ability_mean <- mean(examinees_data$true_theta)
    ability_sd <- sd(examinees_data$true_theta)
    
    if(abs(ability_mean) > 0.5) {
        issues <- c(issues, paste("Qabiliyyət ortalaması mərkəzdən uzaq:", round(ability_mean, 3)))
    }
    if(ability_sd < 0.5 || ability_sd > 2.0) {
        issues <- c(issues, paste("Qabiliyyət SD qeyri-normal:", round(ability_sd, 3)))
    }
    
    cat("Qabiliyyət ortalaması:", round(ability_mean, 3), 
        ifelse(abs(ability_mean) <= 0.5, "✅", "⚠️"), "\n")
    cat("Qabiliyyət SD:", round(ability_sd, 3), 
        ifelse(ability_sd >= 0.5 && ability_sd <= 2.0, "✅", "⚠️"), "\n")
    
    # 3. Missing values yoxlaması
    missing_counts <- sapply(examinees_data, function(x) sum(is.na(x)))
    high_missing <- names(missing_counts)[missing_counts > nrow(examinees_data) * 0.1]
    
    if(length(high_missing) > 0) {
        issues <- c(issues, paste("Çox missing values:", paste(high_missing, collapse = ", ")))
    }
    cat("Missing values:", ifelse(length(high_missing) == 0, "✅ Yoxdur", 
                                paste("⚠️", length(high_missing), "dəyişəndə")), "\n")
    
    # 4. Outlier yoxlaması
    ability_outliers <- sum(abs(scale(examinees_data$true_theta)) > 3)
    outlier_rate <- ability_outliers / n_examinees
    
    if(outlier_rate > 0.05) {
        issues <- c(issues, paste("Çox outlier:", ability_outliers))
    }
    cat("Outlier nisbəti:", round(outlier_rate * 100, 1), "% (",
        ability_outliers, "/", n_examinees, ")",
        ifelse(outlier_rate <= 0.05, "✅", "⚠️"), "\n")
    
    # Final qiymət
    cat("\n=== KEYFİYYƏT QİYMƏTI ===\n")
    if(length(issues) == 0) {
        cat("🎉 Test alıcıları populyasiyası keyfiyyətlidir!\n")
    } else {
        cat("⚠️ Aşağıdakı problemlər var:\n")
        for(issue in issues) {
            cat("  -", issue, "\n")
        }
    }
    
    return(list(issues = issues, quality_score = max(0, 100 - length(issues) * 20)))
}

# Keyfiyyət yoxlaması
if(exists("targeted_examinees")) {
    quality_result <- quality_check_examinees(targeted_examinees)
} else {
    quality_result <- quality_check_examinees(examinees)
}
## 
## === TEST ALICILARI KEYFİYYƏT YOXLAMASI ===
## 
## Örnekləm sayı: 500 ✅ 
## Qabiliyyət ortalaması: 0.087 ✅ 
## Qabiliyyət SD: 1.062 ✅ 
## Missing values: ✅ Yoxdur 
## Outlier nisbəti: 0.2 % ( 1 / 500 ) ✅ 
## 
## === KEYFİYYƏT QİYMƏTI ===
## 🎉 Test alıcıları populyasiyası keyfiyyətlidir!

8 Nəticə

Bu bölmədə CAT tədqiqatları və qiymətləndirmələr üçün realistik test alıcıları populyasiyasının yaradılmasını öyrəndik. Keyfiyyətli test alıcıları simulyasiyası CAT sistemlərinin etibarlı qiymətləndirmə və optimallaşdırılması üçün əsasdır.

8.1 Əsas Nəticələr

  1. Realistik populyasiya dizaynı real dünya xarakteristikalarını əks etdirməlidir
  2. Çoxölçülü modelləşdirmə qabiliyyət, demoqrafik və psixoloji faktorları birləşdirməlidir
  3. Subqrup strategiyası məqsədli təhlillər üçün daha effektivdir
  4. Davranış simulyasiyası test performansının realistik modelləşdirilməsini təmin edir
  5. Keyfiyyət nəzarəti etibarlı nəticələr üçün vacibdir

8.2 Praktiki Tövsiyələr

8.2.1 Populyasiya Dizayn Prinsipləri

  • Ədəquat örnekləm: Minimum 200-300 test alıcısı
  • Realistik paylanma: Target populyasiyaya uyğun
  • Faktör əlaqələri: Real dünya korrelyasiyalarını daxil edin
  • Variasiya balansı: Həm within-group həm between-group variasiya

8.2.2 Implementation Best Practices

  • Pilot testing kiçik nümunə ilə
  • Progressive validation böyük nümunədə
  • Documentation bütün parametrlərin
  • Version control populyasiya dəyişikliklərinin

8.2.3 Validasiya Strategiyası

  • Real data ilə müqayisə
  • Expert review demografik realizmə görə
  • Statistical validation korrelyasiya strukturunun
  • Sensitivity analysis parametr dəyişikliklərinə görə

8.3 Növbəti Addımlar

  • Bölmə 13: CAT Simulyasiya Mühitinin Qurulması
  • Bölmə 14: Comprehensive CAT Performance Evaluation
  • Bölmə 15: CAT System Deployment və Real-world Implementation

Qeyd: Test alıcıları populyasiyası CAT tədqiqatının əsasını təşkil edir. Realistik və keyfiyyətli populyasiya dizaynı CAT sistemlərinin etibarlı qiymətləndirilməsi və real dünya performansının proqnozlaşdırılması üçün kritik əhəmiyyət daşıyır.