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.
# 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ı
# 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ı:
## 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 səviyyəsi statistikası:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.544127 -0.844645 0.001496 -0.007998 0.871877 3.433149
##
## Demoqrafik paylanma:
## Yaş aralığı: 18 65
## Təhsil paylanması:
##
## Ali Doktor Magistr Orta
## 198 19 84 199
# 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ı
## Ümumi yaradılan test alıcıları: 500
## Subqrup paylanması:
##
## Aşağı_Performans Orta_Performans Təcrübəli_Mütəxəssislər
## 50 200 150
## Yeni_Mezunlar
## 100
# 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İ ===
## === 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
# 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ı:
# 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ı:
# 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
# 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ə
##
## Simulyasiya nəticələri:
## 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
# 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
# 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!
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.
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.