Rmd Faylında Mətn Ölçüsünü Böyütmə Üsulları 1. ÜSUL: CSS Style Əlavə Etmək YAML header-ə CSS əlavə edin: yaml— title: “Bölmə 4: IRT Əsasları - Parametr Yaradılması” subtitle: “Kompüter Adaptiv Testləşmə (CAT) Tədrisi” author: “CAT Tədrisi” date: “2025-07-12” output: html_document: toc: true toc_float: true theme: flatly highlight: tango number_sections: true css: style.css pdf_document: toc: true number_sections: true —

1 Giriş

Item Response Theory (IRT) CAT sistemlərinin riyazi əsasını təşkil edir. Bu bölmədə IRT parametrlərinin necə yaradıldığını və interpretasiya edildiyini öyrənəcəksiniz. IRT parametrləri test tapşırıqlarının xarakteristikalarını riyazi olaraq təsvir edir.

IRT modellərində hər tapşırıq üç əsas parametrlə xarakterizə olunur: çətinlik (b), ayrıd edicilik (a), və təsadüfi doğru cavablama (c) parametrləri.

2 IRT Nəzəriyyəsinin Əsasları

2.1 3-Parametr Logistik (3PL) Model

IRT-nin ən geniş istifadə olunan modeli 3-parametr logistik modeldir:

\[P(\theta) = c + \frac{1-c}{1 + e^{-a(\theta - b)}}\]

Bu tənlikdə:

  • θ (theta): Test alıcısının qabiliyyət səviyyəsi

  • a: Ayrıd edicilik parametri

  • b: Çətinlik parametri

  • c: Təsadüfi doğru cavablama parametri

# IRT əyrisinin vizuallaşdırılması
plot_icc <- function(a, b, c, theta_range = c(-4, 4)) {
    theta <- seq(theta_range[1], theta_range[2], by = 0.1)
    p_theta <- c + (1 - c) / (1 + exp(-a * (theta - b)))
    
    plot_data <- data.frame(theta = theta, probability = p_theta)
    
    ggplot(plot_data, aes(x = theta, y = probability)) +
        geom_line(size = 1.2, color = "blue") +
        labs(
            title = paste("Item Xarakteristik Əyrisi"),
            subtitle = paste("a =", a, ", b =", b, ", c =", round(c, 3)),
            x = "Qabiliyyət Səviyyəsi (θ)",
            y = "Doğru Cavab Ehtimalı"
        ) +
        ylim(0, 1) +
        theme_minimal() +
        geom_hline(yintercept = 0.5, linetype = "dashed", alpha = 0.5) +
        geom_vline(xintercept = b, linetype = "dashed", alpha = 0.5, color = "red")
}

# Nümunə ICC
plot_icc(a = 1.5, b = 0.5, c = 0.2)

3 IRT Parametrlərinin Yaradılması

3.1 Əsas Parametr Yaradma Funksiyası

# IRT parametrlərinin yaradılması
create_irt_params <- function(n_items = 100, 
                             difficulty_mean = 0, 
                             difficulty_sd = 1,
                             discrimination_meanlog = 0, 
                             discrimination_sdlog = 0.3,
                             guessing_alpha = 2, 
                             guessing_beta = 6) {
    
    # Çətinlik parametrləri - normal paylanma
    difficulty <- rnorm(n_items, mean = difficulty_mean, sd = difficulty_sd)
    
    # Ayrıd edicilik parametrləri - log-normal paylanma
    discrimination <- rlnorm(n_items, meanlog = discrimination_meanlog, 
                           sdlog = discrimination_sdlog)
    
    # Təsadüfi doğru cavab parametrləri - beta paylanma
    guessing <- rbeta(n_items, guessing_alpha, guessing_beta)
    
    # Parametrləri birləşdir
    item_params <- data.frame(
        item_id = 1:n_items,
        a = discrimination,
        b = difficulty,
        c = guessing
    )
    
    return(item_params)
}

# Nümunə parametrlər yaradın
set.seed(12345)  # Təkrarlanabilir nəticələr üçün
sample_params <- create_irt_params(10)
print(sample_params)
##    item_id         a          b          c
## 1        1 0.9657268  0.5855288 0.42172455
## 2        2 1.7249423  0.7094660 0.14929394
## 3        3 1.1176054 -0.1093033 0.05833425
## 4        4 1.1689021 -0.4534972 0.05522793
## 5        5 0.7983888  0.6058875 0.17161117
## 6        6 1.2777107 -1.8179560 0.38183783
## 7        7 0.7665102  0.6300986 0.37983677
## 8        8 0.9053141 -0.2761841 0.22141943
## 9        9 1.3996382 -0.2841597 0.43009552
## 10      10 1.0937554 -0.9193220 0.66552512

3.2 Parametrlərin Ətraflı Təhlili

# Daha böyük parametr dəsti yaradın
set.seed(12345)
full_params <- create_irt_params(100)

# Tanımlayıcı statistikalar
cat("=== IRT PARAMETR STATİSTİKALARI ===\n")
## === IRT PARAMETR STATİSTİKALARI ===
cat("Ayrıd edicilik (a) parametri:\n")
## Ayrıd edicilik (a) parametri:
cat("  Orta:", round(mean(full_params$a), 3), "\n")
##   Orta: 1.062
cat("  Standart sapma:", round(sd(full_params$a), 3), "\n")
##   Standart sapma: 0.335
cat("  Aralıq:", round(min(full_params$a), 3), "-", round(max(full_params$a), 3), "\n\n")
##   Aralıq: 0.529 - 2.218
cat("Çətinlik (b) parametri:\n")
## Çətinlik (b) parametri:
cat("  Orta:", round(mean(full_params$b), 3), "\n")
##   Orta: 0.245
cat("  Standart sapma:", round(sd(full_params$b), 3), "\n")
##   Standart sapma: 1.115
cat("  Aralıq:", round(min(full_params$b), 3), "-", round(max(full_params$b), 3), "\n\n")
##   Aralıq: -2.38 - 2.477
cat("Təsadüfi cavablama (c) parametri:\n")
## Təsadüfi cavablama (c) parametri:
cat("  Orta:", round(mean(full_params$c), 3), "\n")
##   Orta: 0.251
cat("  Standart sapma:", round(sd(full_params$c), 3), "\n")
##   Standart sapma: 0.129
cat("  Aralıq:", round(min(full_params$c), 3), "-", round(max(full_params$c), 3), "\n")
##   Aralıq: 0.021 - 0.636

3.3 Parametr Paylanmalarının Vizuallaşdırılması

# Parametr paylanmalarını göstər
library(gridExtra)

# Ayrıd edicilik parametri
p1 <- ggplot(full_params, aes(x = a)) +
    geom_histogram(bins = 20, fill = "lightblue", color = "black", alpha = 0.7) +
    geom_density(aes(y = ..scaled.. * max(..count..)), color = "red", size = 1) +
    labs(title = "Ayrıd Edicilik (a) Parametri", 
         x = "Ayrıd Edicilik", y = "Tezlik") +
    theme_minimal()

# Çətinlik parametri
p2 <- ggplot(full_params, aes(x = b)) +
    geom_histogram(bins = 20, fill = "lightgreen", color = "black", alpha = 0.7) +
    geom_density(aes(y = ..scaled.. * max(..count..)), color = "red", size = 1) +
    labs(title = "Çətinlik (b) Parametri", 
         x = "Çətinlik", y = "Tezlik") +
    theme_minimal()

# Təsadüfi cavablama parametri
p3 <- ggplot(full_params, aes(x = c)) +
    geom_histogram(bins = 20, fill = "lightyellow", color = "black", alpha = 0.7) +
    geom_density(aes(y = ..scaled.. * max(..count..)), color = "red", size = 1) +
    labs(title = "Təsadüfi Cavablama (c) Parametri", 
         x = "Təsadüfi Cavablama", y = "Tezlik") +
    theme_minimal()

# Bütün qrafikleri birləşdir
grid.arrange(p1, p2, p3, ncol = 1)

4 Parametr İnterpretasiyası

4.1 Ayrıd Edicilik Parametri (a)

# Ayrıd edicilik səviyyələri
interpret_discrimination <- function(a_values) {
    interpretation <- ifelse(a_values < 0.5, "Çox aşağı",
                   ifelse(a_values < 1.0, "Aşağı",
                   ifelse(a_values < 1.5, "Orta",
                   ifelse(a_values < 2.0, "Yüksək", "Çox yüksək"))))
    return(interpretation)
}

# Ayrıd edicilik təhlili
discrimination_analysis <- full_params %>%
    mutate(
        a_category = interpret_discrimination(a),
        a_rounded = round(a, 2)
    ) %>%
    count(a_category) %>%
    mutate(percentage = round(n / sum(n) * 100, 1))

cat("=== AYRID EDİCİLİK KATEQORİYALARI ===\n")
## === AYRID EDİCİLİK KATEQORİYALARI ===
for(i in 1:nrow(discrimination_analysis)) {
    cat(discrimination_analysis$a_category[i], ":", 
        discrimination_analysis$n[i], "tapşırıq (",
        discrimination_analysis$percentage[i], "%)\n")
}
## Aşağı : 48 tapşırıq ( 48 %)
## Orta : 42 tapşırıq ( 42 %)
## Yüksək : 8 tapşırıq ( 8 %)
## Çox yüksək : 2 tapşırıq ( 2 %)

4.2 Çətinlik Parametri (b)

# Çətinlik səviyyələri
interpret_difficulty <- function(b_values) {
    interpretation <- ifelse(b_values < -2, "Çox asan",
                   ifelse(b_values < -1, "Asan",
                   ifelse(b_values < 0, "Orta-asan",
                   ifelse(b_values < 1, "Orta-çətin",
                   ifelse(b_values < 2, "Çətin", "Çox çətin")))))
    return(interpretation)
}

# Çətinlik təhlili
difficulty_analysis <- full_params %>%
    mutate(
        b_category = interpret_difficulty(b),
        b_rounded = round(b, 2)
    ) %>%
    count(b_category) %>%
    mutate(percentage = round(n / sum(n) * 100, 1))

cat("\n=== ÇƏTİNLİK KATEQORİYALARI ===\n")
## 
## === ÇƏTİNLİK KATEQORİYALARI ===
for(i in 1:nrow(difficulty_analysis)) {
    cat(difficulty_analysis$b_category[i], ":", 
        difficulty_analysis$n[i], "tapşırıq (",
        difficulty_analysis$percentage[i], "%)\n")
}
## Asan : 11 tapşırıq ( 11 %)
## Orta-asan : 27 tapşırıq ( 27 %)
## Orta-çətin : 38 tapşırıq ( 38 %)
## Çox asan : 2 tapşırıq ( 2 %)
## Çox çətin : 6 tapşırıq ( 6 %)
## Çətin : 16 tapşırıq ( 16 %)

4.3 Təsadüfi Cavablama Parametri (c)

# Təsadüfi cavablama təhlili
interpret_guessing <- function(c_values) {
    interpretation <- ifelse(c_values < 0.1, "Çox aşağı",
                   ifelse(c_values < 0.2, "Aşağı",
                   ifelse(c_values < 0.3, "Orta",
                   ifelse(c_values < 0.4, "Yüksək", "Çox yüksək"))))
    return(interpretation)
}

guessing_analysis <- full_params %>%
    mutate(
        c_category = interpret_guessing(c),
        c_rounded = round(c, 3)
    ) %>%
    count(c_category) %>%
    mutate(percentage = round(n / sum(n) * 100, 1))

cat("\n=== TƏSADÜFI CAVABLAMA KATEQORİYALARI ===\n")
## 
## === TƏSADÜFI CAVABLAMA KATEQORİYALARI ===
for(i in 1:nrow(guessing_analysis)) {
    cat(guessing_analysis$c_category[i], ":", 
        guessing_analysis$n[i], "tapşırıq (",
        guessing_analysis$percentage[i], "%)\n")
}
## Aşağı : 28 tapşırıq ( 28 %)
## Orta : 29 tapşırıq ( 29 %)
## Yüksək : 19 tapşırıq ( 19 %)
## Çox aşağı : 10 tapşırıq ( 10 %)
## Çox yüksək : 14 tapşırıq ( 14 %)

5 Çoxlu ICC Əyrilərinin Müqayisəsi

# Müxtəlif parametrlərlə ICC əyrilərini müqayisə edin
compare_icc_curves <- function() {
    theta <- seq(-4, 4, by = 0.1)
    
    # Müxtəlif parametr dəstləri
    params_list <- list(
        list(a = 0.5, b = 0, c = 0.2, label = "Aşağı ayrıd edicilik"),
        list(a = 1.5, b = 0, c = 0.2, label = "Yüksək ayrıd edicilik"),
        list(a = 1.0, b = -1, c = 0.2, label = "Asan tapşırıq"),
        list(a = 1.0, b = 1, c = 0.2, label = "Çətin tapşırıq"),
        list(a = 1.0, b = 0, c = 0.1, label = "Aşağı təsadüfi cavab"),
        list(a = 1.0, b = 0, c = 0.3, label = "Yüksək təsadüfi cavab")
    )
    
    # Bütün əyriləri hesablayın
    all_curves <- data.frame()
    
    for(i in 1:length(params_list)) {
        params <- params_list[[i]]
        p_theta <- params$c + (1 - params$c) / (1 + exp(-params$a * (theta - params$b)))
        
        curve_data <- data.frame(
            theta = theta,
            probability = p_theta,
            curve = params$label
        )
        
        all_curves <- rbind(all_curves, curve_data)
    }
    
    # Qrafik yaradın
    ggplot(all_curves, aes(x = theta, y = probability, color = curve)) +
        geom_line(size = 1.2) +
        labs(
            title = "Müxtəlif IRT Parametrləri ilə ICC Əyriləri",
            x = "Qabiliyyət Səviyyəsi (θ)",
            y = "Doğru Cavab Ehtimalı",
            color = "Parametr Növü"
        ) +
        theme_minimal() +
        theme(legend.position = "bottom") +
        guides(color = guide_legend(nrow = 3))
}

compare_icc_curves()

6 Keyfiyyətli Parametr Yaradma Strategiyaları

6.1 Adaptiv Parametr Yaradma

# Adaptiv test üçün optimal parametr yaradma
create_adaptive_params <- function(n_items = 100, theta_range = c(-3, 3)) {
    # Çətinlik parametrlərini theta aralığına görə paylaşdırın
    target_difficulties <- seq(theta_range[1], theta_range[2], 
                               length.out = n_items)
    
    # Kiçik təsadüfi variasiya əlavə edin
    difficulties <- target_difficulties + rnorm(n_items, 0, 0.3)
    
    # Yüksək ayrıd edicilik parametrləri
    discriminations <- rlnorm(n_items, meanlog = 0.2, sdlog = 0.2)
    # Minimum 0.8, maksimum 3.0 məhdudiyyəti
    discriminations <- pmax(0.8, pmin(3.0, discriminations))
    
    # Aşağı təsadüfi cavablama
    guessing <- rbeta(n_items, 3, 12)  # Ortalama ~0.2
    
    params <- data.frame(
        item_id = 1:n_items,
        a = discriminations,
        b = difficulties,
        c = guessing
    )
    
    return(params)
}

# Adaptiv parametrlər yaradın
adaptive_params <- create_adaptive_params(50)

# Qarşılaşdırma
cat("=== ADAPTİV PARAMETR MÜQAYİSƏSİ ===\n")
## === ADAPTİV PARAMETR MÜQAYİSƏSİ ===
cat("Standart parametrlər:\n")
## Standart parametrlər:
cat("  a orta:", round(mean(full_params$a[1:50]), 3), 
    ", b orta:", round(mean(full_params$b[1:50]), 3),
    ", c orta:", round(mean(full_params$c[1:50]), 3), "\n")
##   a orta: 1.054 , b orta: 0.18 , c orta: 0.263
cat("Adaptiv parametrlər:\n")
## Adaptiv parametrlər:
cat("  a orta:", round(mean(adaptive_params$a), 3), 
    ", b orta:", round(mean(adaptive_params$b), 3),
    ", c orta:", round(mean(adaptive_params$c), 3), "\n")
##   a orta: 1.268 , b orta: 0.073 , c orta: 0.223

6.2 Məzmun Sahələri üçün Parametr Yaradma

# Məzmun sahələrinə görə parametr yaradma
create_content_based_params <- function() {
    # Məzmun sahələri təyin edin
    content_areas <- c("Ədəd", "Cəbr", "Həndəsə", "Ehtimal")
    items_per_area <- 25
    
    all_params <- data.frame()
    
    for(i in 1:length(content_areas)) {
        area <- content_areas[i]
        
        # Hər sahə üçün xüsusi parametr xarakteristikaları
        if(area == "Ədəd") {
            # Ədəd: orta çətinlik, yüksək ayrıd edicilik
            b_params <- list(mean = -0.5, sd = 0.8)
            a_params <- list(meanlog = 0.3, sdlog = 0.25)
        } else if(area == "Cəbr") {
            # Cəbr: yüksək çətinlik, orta ayrıd edicilik
            b_params <- list(mean = 0.5, sd = 1.0)
            a_params <- list(meanlog = 0.1, sdlog = 0.3)
        } else if(area == "Həndəsə") {
            # Həndəsə: geniş çətinlik aralığı
            b_params <- list(mean = 0, sd = 1.2)
            a_params <- list(meanlog = 0.2, sdlog = 0.3)
        } else {  # Ehtimal
            # Ehtimal: yüksək çətinlik, aşağı ayrıd edicilik
            b_params <- list(mean = 1.0, sd = 0.8)
            a_params <- list(meanlog = -0.1, sdlog = 0.4)
        }
        
        # Parametrləri yaradın
        area_params <- data.frame(
            item_id = ((i-1) * items_per_area + 1):(i * items_per_area),
            content_area = area,
            a = rlnorm(items_per_area, a_params$meanlog, a_params$sdlog),
            b = rnorm(items_per_area, b_params$mean, b_params$sd),
            c = rbeta(items_per_area, 2, 8)
        )
        
        all_params <- rbind(all_params, area_params)
    }
    
    return(all_params)
}

# Məzmun əsaslı parametrlər
content_params <- create_content_based_params()

# Məzmun sahələrinə görə təhlil
content_summary <- content_params %>%
    group_by(content_area) %>%
    summarise(
        n_items = n(),
        a_mean = round(mean(a), 3),
        b_mean = round(mean(b), 3),
        c_mean = round(mean(c), 3),
        .groups = 'drop'
    )

cat("\n=== MƏZMUN SAHƏLƏRİNƏ GÖRƏ PARAMETRLƏR ===\n")
## 
## === MƏZMUN SAHƏLƏRİNƏ GÖRƏ PARAMETRLƏR ===
print(content_summary)
## # A tibble: 4 × 5
##   content_area n_items a_mean b_mean c_mean
##   <chr>          <int>  <dbl>  <dbl>  <dbl>
## 1 Cəbr              25  1.29   0.401  0.206
## 2 Ehtimal           25  0.967  1.09   0.221
## 3 Həndəsə           25  1.35  -0.027  0.199
## 4 Ədəd              25  1.28  -0.789  0.22

7 Parametr Keyfiyyətinin Yoxlanması

7.1 Statistik Yoxlama

# Parametr keyfiyyətini yoxlayın
quality_check <- function(params) {
    issues <- c()
    
    # Ayrıd edicilik yoxlaması
    low_discrimination <- sum(params$a < 0.5)
    if(low_discrimination > nrow(params) * 0.1) {
        issues <- c(issues, paste("Çox aşağı ayrıd edicilik:", low_discrimination, "tapşırıq"))
    }
    
    # Çətinlik yoxlaması
    extreme_difficulty <- sum(abs(params$b) > 3)
    if(extreme_difficulty > nrow(params) * 0.05) {
        issues <- c(issues, paste("Həddindən artıq çətinlik:", extreme_difficulty, "tapşırıq"))
    }
    
    # Təsadüfi cavablama yoxlaması
    high_guessing <- sum(params$c > 0.4)
    if(high_guessing > nrow(params) * 0.05) {
        issues <- c(issues, paste("Çox yüksək təsadüfi cavab:", high_guessing, "tapşırıq"))
    }
    
    # Nəticələr
    if(length(issues) == 0) {
        cat("✅ Parametr keyfiyyəti yaxşıdır\n")
        return(TRUE)
    } else {
        cat("⚠️ Parametr problemləri:\n")
        for(issue in issues) {
            cat("  -", issue, "\n")
        }
        return(FALSE)
    }
}

# Keyfiyyət yoxlaması
cat("Standart parametrlər:\n")
## Standart parametrlər:
quality_check(full_params)
## ⚠️ Parametr problemləri:
##   - Çox yüksək təsadüfi cavab: 14 tapşırıq
## [1] FALSE
cat("\nAdaptiv parametrlər:\n")
## 
## Adaptiv parametrlər:
quality_check(adaptive_params)
## ⚠️ Parametr problemləri:
##   - Çox yüksək təsadüfi cavab: 3 tapşırıq
## [1] FALSE
cat("\nMəzmun əsaslı parametrlər:\n")
## 
## Məzmun əsaslı parametrlər:
quality_check(content_params)
## ✅ Parametr keyfiyyəti yaxşıdır
## [1] TRUE

8 Nəticə

Bu bölmədə IRT parametrlərinin yaradılması və interpretasiyasını öyrəndik. Keyfiyyətli IRT parametrləri CAT sistemlərinin effektiv işləməsi üçün əsasdır.

8.1 Əsas Nəticələr

  1. 3PL model CAT üçün ən uyğun IRT modelidir
  2. Parametr paylanmaları sistemin keyfiyyətini müəyyən edir
  3. Adaptiv parametr yaradma CAT effektivliyini artırır
  4. Məzmun əsaslı parametrlər test balansını təmin edir
  5. Keyfiyyət yoxlaması problemli parametrləri aşkar edir

8.2 Növbəti Addımlar

  • Bölmə 5: Real Verilənlərdən IRT Parametrlərinin Qiymətləndirilməsi

  • Bölmə 6: Item Bankının Yaradılması və İdarə Edilməsi

  • Bölmə 7: CAT Simulyasiyalarının Aparılması


Qeyd: Bu bölmədə yaradılan parametrlər simulyasiya məqsədləri üçündür. Real CAT sistemləri üçün empirik verilənlərdən qiymətləndirilmiş parametrlər istifadə edilməlidir.