1 Giriş

Expected A Posteriori (EAP) qabiliyyət qiymətləndirmə CAT sistemlərində ən güvənilir və stabil metodlardan biridir. MLE metodundan fərqli olaraq, EAP Bayesian yanaşma istifadə edir və ekstrem cavab nümunələrində daha robust performans göstərir.

EAP metodu prior məlumatı likelihood ilə birləşdirərək posterior paylanması yaradır və bu paylanmanın ortalamasını qabiliyyət qiymətləndirilməsi kimi istifadə edir. Bu yanaşma xüsusilə CAT-ın erkən mərhələlərində və az tapşırıq cavablandırıldığında üstünlük təşkil edir.

2 EAP Metodunun Nəzəri Əsasları

2.1 Bayesian Qiymətləndirmə Prinsipləri

# EAP metodunun nəzəri əsaslarını izah edək
explain_eap_theory <- function() {
    cat("=== EAP (EXPECTED A POSTERIORI) NƏZƏRİYYƏSİ ===\n\n")
    
    cat("EAP metodu Bayesian statistikanın tətbiqidir:\n\n")
    
    cat("1. BAYES TEOREMİ:\n")
    cat("   P(θ|X) ∝ P(X|θ) × P(θ)\n")
    cat("   Burada:\n")
    cat("   • P(θ|X) = Posterior paylanma\n")
    cat("   • P(X|θ) = Likelihood (cavab nümunəsi ehtimalı)\n")
    cat("   • P(θ) = Prior paylanma\n\n")
    
    cat("2. EAP QİYMƏTLƏNDİRMƏ:\n")
    cat("   θ̂_EAP = ∫ θ × P(θ|X) dθ\n")
    cat("   (Posterior paylanmanın ortalaması)\n\n")
    
    cat("3. POSTERIOR STANDART XƏTA:\n")
    cat("   SE_EAP = √[∫ (θ - θ̂_EAP)² × P(θ|X) dθ]\n\n")
    
    cat("4. EAP ÜSTÜNLÜKLƏRİ:\n")
    cat("   ✓ Həmişə məhdud qiymət verir\n")
    cat("   ✓ Ekstrem cavab nümunələrində robust\n")
    cat("   ✓ Az tapşırıqla effektiv işləyir\n")
    cat("   ✓ Uncertainty-ni tam ölçür\n")
    cat("   ✓ Prior məlumatı əlavə edə bilir\n\n")
    
    cat("5. MLE ilə MÜQAYİSƏ:\n")
    cat("   • MLE: P(X|θ)-ni maksimallaşdırır\n")
    cat("   • EAP: P(θ|X)-in ortalamasını hesablayır\n")
    cat("   • EAP daha konservativ və stabil\n")
    
    return(invisible(NULL))
}

explain_eap_theory()
## === EAP (EXPECTED A POSTERIORI) NƏZƏRİYYƏSİ ===
## 
## EAP metodu Bayesian statistikanın tətbiqidir:
## 
## 1. BAYES TEOREMİ:
##    P(θ|X) ∝ P(X|θ) × P(θ)
##    Burada:
##    • P(θ|X) = Posterior paylanma
##    • P(X|θ) = Likelihood (cavab nümunəsi ehtimalı)
##    • P(θ) = Prior paylanma
## 
## 2. EAP QİYMƏTLƏNDİRMƏ:
##    θ̂_EAP = ∫ θ × P(θ|X) dθ
##    (Posterior paylanmanın ortalaması)
## 
## 3. POSTERIOR STANDART XƏTA:
##    SE_EAP = √[∫ (θ - θ̂_EAP)² × P(θ|X) dθ]
## 
## 4. EAP ÜSTÜNLÜKLƏRİ:
##    ✓ Həmişə məhdud qiymət verir
##    ✓ Ekstrem cavab nümunələrində robust
##    ✓ Az tapşırıqla effektiv işləyir
##    ✓ Uncertainty-ni tam ölçür
##    ✓ Prior məlumatı əlavə edə bilir
## 
## 5. MLE ilə MÜQAYİSƏ:
##    • MLE: P(X|θ)-ni maksimallaşdırır
##    • EAP: P(θ|X)-in ortalamasını hesablayır
##    • EAP daha konservativ və stabil

2.2 Əsas EAP Funksiyası

# Expected A Posteriori (EAP) metodu
estimate_ability_eap <- function(item_indices, responses, item_bank,
                                prior_mean = 0, prior_sd = 1, 
                                theta_range = c(-4, 4), n_points = 81) {
    
    # Theta aralığı (quadrature points)
    theta_points <- seq(theta_range[1], theta_range[2], length.out = n_points)
    
    # Likelihood hesablanması
    likelihood <- sapply(theta_points, function(theta) {
        total_loglik <- 0
        
        for (i in 1:length(item_indices)) {
            item_idx <- item_indices[i]
            a <- item_bank$a[item_idx]
            b <- item_bank$b[item_idx]
            c <- item_bank$c[item_idx]
            
            # 3PL model ehtimalı
            P <- c + (1 - c) * plogis(a * (theta - b))
            P <- pmax(1e-10, pmin(1 - 1e-10, P))  # Numerical stability
            
            if (responses[i] == 1) {
                total_loglik <- total_loglik + log(P)
            } else {
                total_loglik <- total_loglik + log(1 - P)
            }
        }
        
        return(exp(total_loglik))
    })
    
    # Numerical stability üçün likelihood-i normalize et
    likelihood <- likelihood / max(likelihood)
    
    # Prior paylanma
    prior <- dnorm(theta_points, prior_mean, prior_sd)
    
    # Posterior paylanma (unnormalized)
    posterior_unnorm <- likelihood * prior
    
    # Posterior normalizasiyası
    if(sum(posterior_unnorm) > 0) {
        posterior <- posterior_unnorm / sum(posterior_unnorm)
    } else {
        # Əgər posterior 0-sa, prior-ı istifadə et
        posterior <- prior / sum(prior)
    }
    
    # EAP qiymətləndirmə (posterior ortalaması)
    theta_eap <- sum(theta_points * posterior)
    
    # Posterior variansı və standart xəta
    theta_var <- sum((theta_points - theta_eap)^2 * posterior)
    se_eap <- sqrt(theta_var)
    
    # Modal qiymətləndirmə (MAP)
    theta_map <- theta_points[which.max(posterior)]
    
    # Credible interval (95%)
    cumulative_posterior <- cumsum(posterior)
    ci_lower_idx <- which(cumulative_posterior >= 0.025)[1]
    ci_upper_idx <- which(cumulative_posterior >= 0.975)[1]
    ci_lower <- theta_points[ci_lower_idx]
    ci_upper <- theta_points[ci_upper_idx]
    
    return(list(
        theta_eap = theta_eap,
        theta_map = theta_map,
        se_eap = se_eap,
        ci_lower = ci_lower,
        ci_upper = ci_upper,
        posterior = posterior,
        likelihood = likelihood,
        prior = prior,
        theta_points = theta_points
    ))
}

# Test bank yaradımı (əgər yoxdursa)
if(!exists("item_bank")) {
    set.seed(12345)
    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)
    )
}

# Nümunə qiymətləndirmə
sample_items <- c(1, 5, 10)
sample_responses <- c(1, 0, 1)
ability_est <- estimate_ability_eap(sample_items, sample_responses, item_bank)

cat("=== EAP QİYMƏTLƏNDİRMƏ NƏTİCƏLƏRİ ===\n")
## === EAP QİYMƏTLƏNDİRMƏ NƏTİCƏLƏRİ ===
cat("EAP qiymətləndirmə:", round(ability_est$theta_eap, 3), "\n")
## EAP qiymətləndirmə: -0.109
cat("MAP qiymətləndirmə:", round(ability_est$theta_map, 3), "\n")
## MAP qiymətləndirmə: 0.1
cat("Standart xəta:", round(ability_est$se_eap, 3), "\n")
## Standart xəta: 0.904
cat("95% Credible Interval: [", round(ability_est$ci_lower, 3), ", ", 
    round(ability_est$ci_upper, 3), "]\n")
## 95% Credible Interval: [ -2 ,  1.6 ]

3 EAP Posterior Paylanmasının Vizuallaşdırılması

3.1 Posterior, Prior və Likelihood Təhlili

# EAP posterior paylanmasının vizuallaşdırılması
visualize_eap_posterior <- function(eap_result, title_suffix = "") {
    
    # Məlumatları data frame-ə çevir
    viz_data <- data.frame(
        theta = eap_result$theta_points,
        posterior = eap_result$posterior,
        likelihood = eap_result$likelihood / max(eap_result$likelihood),  # Normalize
        prior = eap_result$prior / max(eap_result$prior)  # Normalize
    )
    
    # Uzun format
    viz_long <- viz_data %>%
        select(theta, posterior, likelihood, prior) %>%
        tidyr::pivot_longer(cols = -theta, names_to = "Distribution", values_to = "Density")
    
    # Ana plot
    p1 <- ggplot(viz_long, aes(x = theta, y = Density, color = Distribution)) +
        geom_line(size = 1.2) +
        geom_area(data = viz_data, aes(x = theta, y = posterior), 
                  alpha = 0.3, fill = "blue", inherit.aes = FALSE) +
        geom_vline(xintercept = eap_result$theta_eap, linetype = "dashed", 
                   color = "red", size = 1) +
        geom_vline(xintercept = eap_result$theta_map, linetype = "dotted", 
                   color = "darkred", size = 1) +
        labs(title = paste("EAP Posterior Paylanması", title_suffix),
             subtitle = paste("EAP =", round(eap_result$theta_eap, 3), 
                            "| MAP =", round(eap_result$theta_map, 3),
                            "| SE =", round(eap_result$se_eap, 3)),
             x = "Qabiliyyət (θ)", y = "Normallaşdırılmış Sıxlıq",
             color = "Paylanma") +
        theme_minimal() +
        scale_color_manual(values = c("posterior" = "blue", "likelihood" = "green", 
                                     "prior" = "orange"),
                          labels = c("likelihood" = "Likelihood", 
                                    "posterior" = "Posterior", 
                                    "prior" = "Prior")) +
        annotate("text", x = eap_result$theta_eap + 0.5, y = max(viz_data$posterior) * 0.8,
                 label = "EAP", color = "red") +
        annotate("text", x = eap_result$theta_map + 0.5, y = max(viz_data$posterior) * 0.6,
                 label = "MAP", color = "darkred")
    
    # Credible interval highlight
    ci_data <- viz_data[viz_data$theta >= eap_result$ci_lower & 
                       viz_data$theta <= eap_result$ci_upper, ]
    
    p2 <- ggplot(viz_data, aes(x = theta, y = posterior)) +
        geom_line(size = 1.2, color = "blue") +
        geom_ribbon(data = ci_data, aes(ymin = 0, ymax = posterior), 
                    alpha = 0.5, fill = "lightblue") +
        geom_vline(xintercept = c(eap_result$ci_lower, eap_result$ci_upper), 
                   linetype = "dashed", color = "blue", alpha = 0.7) +
        geom_vline(xintercept = eap_result$theta_eap, color = "red", size = 1) +
        labs(title = "95% Credible Interval",
             subtitle = paste("CI: [", round(eap_result$ci_lower, 3), ", ", 
                             round(eap_result$ci_upper, 3), "]"),
             x = "Qabiliyyət (θ)", y = "Posterior Sıxlığı") +
        theme_minimal()
    
    grid.arrange(p1, p2, ncol = 1)
    
    return(list(plot1 = p1, plot2 = p2))
}

# Posterior vizuallaşdırması
if(!require(tidyr, quietly = TRUE)) {
    # tidyr yoxdursa, manual reshape
    viz_data <- data.frame(
        theta = ability_est$theta_points,
        posterior = ability_est$posterior,
        likelihood = ability_est$likelihood / max(ability_est$likelihood),
        prior = ability_est$prior / max(ability_est$prior)
    )
    
    p1 <- ggplot(viz_data, aes(x = theta)) +
        geom_line(aes(y = posterior, color = "Posterior"), size = 1.2) +
        geom_line(aes(y = likelihood, color = "Likelihood"), size = 1.2) +
        geom_line(aes(y = prior, color = "Prior"), size = 1.2) +
        geom_area(aes(y = posterior), alpha = 0.3, fill = "blue") +
        geom_vline(xintercept = ability_est$theta_eap, linetype = "dashed", color = "red") +
        labs(title = "EAP Posterior Paylanması",
             x = "Qabiliyyət (θ)", y = "Normallaşdırılmış Sıxlıq") +
        theme_minimal() +
        scale_color_manual(values = c("Posterior" = "blue", "Likelihood" = "green", "Prior" = "orange"))
    
    print(p1)
} else {
    posterior_plots <- visualize_eap_posterior(ability_est, "(3 tapşırıq)")
}

4 EAP vs MLE Müqayisəsi

4.1 Metodların Performans Müqayisəsi

# MLE qiymətləndirmə funksiyası (müqayisə üçün)
estimate_ability_mle <- function(item_indices, responses, item_bank, max_iter = 20) {
    
    if(length(responses) == 0) return(list(theta = 0, se = 1, converged = FALSE))
    
    # Əgər bütün cavablar 0 və ya 1-dirsə
    if(all(responses == 0)) return(list(theta = -3, se = 1, converged = FALSE))
    if(all(responses == 1)) return(list(theta = 3, se = 1, converged = FALSE))
    
    theta <- 0  # Başlanğıc dəyər
    
    for(iter in 1:max_iter) {
        first_deriv <- 0
        second_deriv <- 0
        information <- 0
        
        for(i in 1:length(item_indices)) {
            item_idx <- item_indices[i]
            response <- responses[i]
            
            a <- item_bank$a[item_idx]
            b <- item_bank$b[item_idx]
            c <- item_bank$c[item_idx]
            
            P <- c + (1 - c) * plogis(a * (theta - b))
            P <- pmax(1e-6, pmin(1 - 1e-6, P))  # Stability
            Q <- 1 - P
            
            # First və second derivatives
            P_star <- (P - c) / (1 - c)
            first_deriv <- first_deriv + a * (response - P) / (P * Q) * (P - c)
            
            # Information (negative second derivative)
            info_item <- a^2 * (P - c)^2 * Q / ((1 - c)^2 * P)
            information <- information + info_item
        }
        
        if(information > 0) {
            theta_new <- theta + first_deriv / information
            if(abs(theta_new - theta) < 0.001) break
            theta <- pmax(-4, pmin(4, theta_new))
        } else {
            break
        }
    }
    
    se <- ifelse(information > 0, 1/sqrt(information), 1)
    
    return(list(
        theta = theta, 
        se = se, 
        information = information,
        converged = iter < max_iter
    ))
}

# EAP vs MLE müqayisəsi funksiyası
compare_eap_mle <- function(item_bank, n_simulations = 100, true_theta_range = c(-2, 2)) {
    
    cat("=== EAP vs MLE MÜQAYİSƏ SİMULYASİYASI ===\n")
    cat("Simulyasiya sayı:", n_simulations, "\n")
    cat("Həqiqi θ aralığı:", true_theta_range, "\n\n")
    
    set.seed(12345)
    
    # Müxtəlif test uzunluqları
    test_lengths <- c(3, 5, 10, 15)
    comparison_results <- data.frame()
    
    for(test_length in test_lengths) {
        cat("Test uzunluğu:", test_length, "tapşırıq\n")
        
        eap_errors <- numeric(n_simulations)
        mle_errors <- numeric(n_simulations)
        eap_ses <- numeric(n_simulations)
        mle_ses <- numeric(n_simulations)
        mle_convergence <- numeric(n_simulations)
        
        for(sim in 1:n_simulations) {
            # Təsadüfi həqiqi θ
            true_theta <- runif(1, true_theta_range[1], true_theta_range[2])
            
            # Təsadüfi item seç
            selected_items <- sample(1:nrow(item_bank), test_length)
            
            # Cavabları simulyasiya et
            responses <- numeric(test_length)
            for(i in 1:test_length) {
                item_idx <- selected_items[i]
                a <- item_bank$a[item_idx]
                b <- item_bank$b[item_idx]
                c <- item_bank$c[item_idx]
                
                prob <- c + (1 - c) * plogis(a * (true_theta - b))
                responses[i] <- rbinom(1, 1, prob)
            }
            
            # EAP qiymətləndirmə
            eap_result <- estimate_ability_eap(selected_items, responses, item_bank)
            eap_errors[sim] <- abs(eap_result$theta_eap - true_theta)
            eap_ses[sim] <- eap_result$se_eap
            
            # MLE qiymətləndirmə
            mle_result <- estimate_ability_mle(selected_items, responses, item_bank)
            mle_errors[sim] <- abs(mle_result$theta - true_theta)
            mle_ses[sim] <- mle_result$se
            mle_convergence[sim] <- as.numeric(mle_result$converged)
        }
        
        # Nəticələri topla
        temp_results <- data.frame(
            Test_Length = test_length,
            Method = rep(c("EAP", "MLE"), each = n_simulations),
            Error = c(eap_errors, mle_errors),
            SE = c(eap_ses, mle_ses),
            Converged = c(rep(1, n_simulations), mle_convergence)
        )
        
        comparison_results <- rbind(comparison_results, temp_results)
        
        # Statistikalar
        cat("  EAP orta xəta:", round(mean(eap_errors), 4), 
            "| EAP orta SE:", round(mean(eap_ses), 4), "\n")
        cat("  MLE orta xəta:", round(mean(mle_errors), 4), 
            "| MLE orta SE:", round(mean(mle_ses), 4), 
            "| MLE konvergensiya:", round(mean(mle_convergence) * 100, 1), "%\n\n")
    }
    
    return(comparison_results)
}

# EAP vs MLE müqayisəsi
comparison_data <- compare_eap_mle(item_bank, n_simulations = 50)
## === EAP vs MLE MÜQAYİSƏ SİMULYASİYASI ===
## Simulyasiya sayı: 50 
## Həqiqi θ aralığı: -2 2 
## 
## Test uzunluğu: 3 tapşırıq
##   EAP orta xəta: 0.7133 | EAP orta SE: 0.8261 
##   MLE orta xəta: 2.7714 | MLE orta SE: 22.6532 | MLE konvergensiya: 4 %
## 
## Test uzunluğu: 5 tapşırıq
##   EAP orta xəta: 0.6138 | EAP orta SE: 0.7602 
##   MLE orta xəta: 3.0887 | MLE orta SE: 6.2638 | MLE konvergensiya: 4 %
## 
## Test uzunluğu: 10 tapşırıq
##   EAP orta xəta: 0.5059 | EAP orta SE: 0.6219 
##   MLE orta xəta: 3.5878 | MLE orta SE: 2.6076 | MLE konvergensiya: 2 %
## 
## Test uzunluğu: 15 tapşırıq
##   EAP orta xəta: 0.4023 | EAP orta SE: 0.532 
##   MLE orta xəta: 4.0373 | MLE orta SE: 2.0266 | MLE konvergensiya: 0 %

4.2 Müqayisə Nəticələrinin Vizuallaşdırılması

# EAP vs MLE müqayisə vizuallaşdırması
visualize_eap_mle_comparison <- function(comparison_data) {
    
    # Xəta müqayisəsi
    p1 <- ggplot(comparison_data, aes(x = factor(Test_Length), y = Error, fill = Method)) +
        geom_boxplot() +
        labs(title = "EAP vs MLE: Qiymətləndirmə Xətası Müqayisəsi",
             x = "Test Uzunluğu", y = "Mütləq Xəta |θ̂ - θ|",
             fill = "Metod") +
        theme_minimal() +
        scale_fill_manual(values = c("EAP" = "lightblue", "MLE" = "lightcoral"))
    
    # SE müqayisəsi
    p2 <- ggplot(comparison_data, aes(x = factor(Test_Length), y = SE, fill = Method)) +
        geom_boxplot() +
        labs(title = "EAP vs MLE: Standart Xəta Müqayisəsi",
             x = "Test Uzunluğu", y = "Standart Xəta",
             fill = "Metod") +
        theme_minimal() +
        scale_fill_manual(values = c("EAP" = "lightblue", "MLE" = "lightcoral"))
    
    # Ortalama xəta trends
    summary_data <- comparison_data %>%
        group_by(Test_Length, Method) %>%
        summarise(
            Mean_Error = mean(Error),
            Mean_SE = mean(SE),
            Convergence_Rate = mean(Converged) * 100,
            .groups = 'drop'
        )
    
    p3 <- ggplot(summary_data, aes(x = Test_Length, y = Mean_Error, color = Method)) +
        geom_line(size = 1.2) +
        geom_point(size = 3) +
        labs(title = "Ortalama Xəta Trendi",
             x = "Test Uzunluğu", y = "Ortalama Mütləq Xəta",
             color = "Metod") +
        theme_minimal() +
        scale_color_manual(values = c("EAP" = "blue", "MLE" = "red"))
    
    # Konvergensiya nisbəti
    convergence_data <- summary_data %>% filter(Method == "MLE")
    
    p4 <- ggplot(convergence_data, aes(x = Test_Length, y = Convergence_Rate)) +
        geom_line(size = 1.2, color = "red") +
        geom_point(size = 3, color = "red") +
        labs(title = "MLE Konvergensiya Nisbəti",
             x = "Test Uzunluğu", y = "Konvergensiya Faizi (%)") +
        theme_minimal() +
        ylim(0, 100)
    
    grid.arrange(p1, p2, p3, p4, ncol = 2)
    
    # Summary cədvəl
    cat("\n=== PERFORMANS XÜLASƏSİ ===\n")
    print(summary_data)
    
    return(summary_data)
}

# Müqayisə vizuallaşdırması
performance_summary <- visualize_eap_mle_comparison(comparison_data)

## 
## === PERFORMANS XÜLASƏSİ ===
## # A tibble: 8 × 5
##   Test_Length Method Mean_Error Mean_SE Convergence_Rate
##         <dbl> <chr>       <dbl>   <dbl>            <dbl>
## 1           3 EAP         0.713   0.826              100
## 2           3 MLE         2.77   22.7                  4
## 3           5 EAP         0.614   0.760              100
## 4           5 MLE         3.09    6.26                 4
## 5          10 EAP         0.506   0.622              100
## 6          10 MLE         3.59    2.61                 2
## 7          15 EAP         0.402   0.532              100
## 8          15 MLE         4.04    2.03                 0

5 Prior Paylanmasının Təsiri

5.1 Müxtəlif Prior Parametrləri

# Prior paylanmasının EAP-a təsirinin təhlili
analyze_prior_effects <- function(item_indices, responses, item_bank) {
    
    cat("=== PRIOR PAYLANMASININ TƏSİRİ ===\n\n")
    
    # Müxtəlif prior parametrləri
    prior_configs <- list(
        list(mean = 0, sd = 1, label = "Standard (0, 1)"),
        list(mean = 0, sd = 0.5, label = "Dar (0, 0.5)"),
        list(mean = 0, sd = 2, label = "Geniş (0, 2)"),
        list(mean = 1, sd = 1, label = "Yüksək orta (1, 1)"),
        list(mean = -1, sd = 1, label = "Aşağı orta (-1, 1)")
    )
    
    prior_results <- data.frame()
    
    for(i in 1:length(prior_configs)) {
        config <- prior_configs[[i]]
        
        # EAP qiymətləndirmə
        eap_result <- estimate_ability_eap(
            item_indices, responses, item_bank,
            prior_mean = config$mean, prior_sd = config$sd
        )
        
        # Nəticələri saxla
        temp_result <- data.frame(
            Prior_Config = config$label,
            Prior_Mean = config$mean,
            Prior_SD = config$sd,
            EAP_Estimate = eap_result$theta_eap,
            EAP_SE = eap_result$se_eap,
            CI_Lower = eap_result$ci_lower,
            CI_Upper = eap_result$ci_upper
        )
        
        prior_results <- rbind(prior_results, temp_result)
        
        cat("Prior:", config$label, "\n")
        cat("  EAP θ:", round(eap_result$theta_eap, 3), "\n")
        cat("  SE:", round(eap_result$se_eap, 3), "\n")
        cat("  95% CI: [", round(eap_result$ci_lower, 3), ", ", 
            round(eap_result$ci_upper, 3), "]\n\n")
    }
    
    return(prior_results)
}

# Prior təsiri təhlili
prior_effects <- analyze_prior_effects(sample_items, sample_responses, item_bank)
## === PRIOR PAYLANMASININ TƏSİRİ ===
## 
## Prior: Standard (0, 1) 
##   EAP θ: -0.109 
##   SE: 0.904 
##   95% CI: [ -2 ,  1.6 ]
## 
## Prior: Dar (0, 0.5) 
##   EAP θ: -0.001 
##   SE: 0.478 
##   95% CI: [ -1 ,  0.9 ]
## 
## Prior: Geniş (0, 2) 
##   EAP θ: -0.511 
##   SE: 1.482 
##   95% CI: [ -3.5 ,  2.2 ]
## 
## Prior: Yüksək orta (1, 1) 
##   EAP θ: 0.646 
##   SE: 0.846 
##   95% CI: [ -1.1 ,  2.3 ]
## 
## Prior: Aşağı orta (-1, 1) 
##   EAP θ: -1.007 
##   SE: 0.983 
##   95% CI: [ -3 ,  0.8 ]
# Prior təsiri vizuallaşdırması
visualize_prior_effects <- function(prior_results) {
    
    # EAP qiymətləndirmələri
    p1 <- ggplot(prior_results, aes(x = reorder(Prior_Config, EAP_Estimate), y = EAP_Estimate)) +
        geom_point(size = 3, color = "blue") +
        geom_errorbar(aes(ymin = CI_Lower, ymax = CI_Upper), width = 0.2) +
        coord_flip() +
        labs(title = "Prior Paylanmasının EAP Qiymətləndirməsinə Təsiri",
             x = "Prior Konfiqurasiyası", y = "EAP Qiymətləndirmə") +
        theme_minimal()
    
    # SE müqayisəsi
    p2 <- ggplot(prior_results, aes(x = reorder(Prior_Config, EAP_SE), y = EAP_SE)) +
        geom_col(fill = "lightcoral", alpha = 0.7) +
        coord_flip() +
        labs(title = "Prior Paylanmasının SE-yə Təsiri",
             x = "Prior Konfiqurasiyası", y = "Standart Xəta") +
        theme_minimal()
    
    grid.arrange(p1, p2, ncol = 1)
}

visualize_prior_effects(prior_effects)

6 Informative vs Non-informative Priors

6.1 Prior Seçim Strategiyaları

# Informative vs Non-informative prior müqayisəsi
compare_prior_strategies <- function(item_bank, n_scenarios = 20) {
    
    cat("=== INFORMATIVE vs NON-INFORMATIVE PRIOR MÜQAYİSƏSİ ===\n\n")
    
    set.seed(789)
    comparison_results <- data.frame()
    
    # Müxtəlif ssenari növləri
    scenarios <- data.frame(
        true_theta = c(rep(-1.5, 5), rep(-0.5, 5), rep(0.5, 5), rep(1.5, 5)),
        test_length = rep(c(3, 5, 8, 10, 15), 4)
    )
    
    for(i in 1:nrow(scenarios)) {
        true_theta <- scenarios$true_theta[i]
        test_length <- scenarios$test_length[i]
        
        # Təsadüfi tapşırıqlar seç
        selected_items <- sample(1:nrow(item_bank), test_length)
        
        # Cavabları simulyasiya et
        responses <- numeric(test_length)
        for(j in 1:test_length) {
            item_idx <- selected_items[j]
            a <- item_bank$a[item_idx]
            b <- item_bank$b[item_idx]
            c <- item_bank$c[item_idx]
            
            prob <- c + (1 - c) * plogis(a * (true_theta - b))
            responses[j] <- rbinom(1, 1, prob)
        }
        
        # Müxtəlif prior strategiyaları
        prior_strategies <- list(
            list(mean = 0, sd = 1, type = "Non-informative", label = "Standard N(0,1)"),
            list(mean = 0, sd = 2, type = "Non-informative", label = "Vague N(0,4)"),
            list(mean = true_theta, sd = 0.5, type = "Informative", label = "Doğru informative"),
            list(mean = true_theta + 0.5, sd = 0.3, type = "Mis-informative", label = "Yanlış informative")
        )
        
        for(strategy in prior_strategies) {
            eap_result <- estimate_ability_eap(
                selected_items, responses, item_bank,
                prior_mean = strategy$mean, prior_sd = strategy$sd
            )
            
            temp_result <- data.frame(
                Scenario = i,
                True_Theta = true_theta,
                Test_Length = test_length,
                Prior_Type = strategy$type,
                Prior_Label = strategy$label,
                Prior_Mean = strategy$mean,
                Prior_SD = strategy$sd,
                EAP_Estimate = eap_result$theta_eap,
                EAP_SE = eap_result$se_eap,
                Absolute_Error = abs(eap_result$theta_eap - true_theta),
                Bias = eap_result$theta_eap - true_theta
            )
            
            comparison_results <- rbind(comparison_results, temp_result)
        }
        
        if(i %% 5 == 0) cat("Ssenari", i, "/", nrow(scenarios), "tamamlandı\n")
    }
    
    return(comparison_results)
}