Running a CAT based based on real response data

Source code notebook

Running a CAT based based on real response data

This example shows how to run a CAT end-to-end on real data.

First a 1-dimensional IRT model is fitted based on open response data to the vocabulary IQ test using the IRTSupport package which internally, this uses the mirt R package. Next, the model is used to administer the test interactively.

using Base.Filesystem
using ComputerAdaptiveTesting
using FittedItemBanks.DummyData: std_normal
using ComputerAdaptiveTesting.Sim
using ComputerAdaptiveTesting.NextItemRules
using ComputerAdaptiveTesting.TerminationConditions
using ComputerAdaptiveTesting.Aggregators
using FittedItemBanks
using FittedItemBanks: item_params
import PsychometricsBazaarBase.IntegralCoeffs
using PsychometricsBazaarBase.Integrators
using PsychometricsBazaarBase.Optimizers
using ItemResponseDatasets: prompt_readline
using ItemResponseDatasets.VocabIQ
using RIrtWrappers.Mirt

function get_item_bank()
    fit_4pl(get_marked_df_cached(); TOL = 1e-2)
end

function run_vocab_iq_cat()
    item_bank, labels = get_item_bank()
    integrator = FixedGKIntegrator(-6, 6, 61)
    ability_integrator = AbilityIntegrator(integrator)
    dist_ability_est = PriorAbilityEstimator(std_normal)
    optimizer = AbilityOptimizer(OneDimOptimOptimizer(-6.0, 6.0, NelderMead()))
    ability_estimator = ModeAbilityEstimator(dist_ability_est, optimizer)
    @info "run_cat" ability_estimator
    rules = CatRules(ability_estimator,
        AbilityVarianceStateCriterion(dist_ability_est, ability_integrator),
        FixedItemsTerminationCondition(45))
    function get_response(response_idx, response_name)
        params = item_params(item_bank, response_idx)
        println("Parameters for next question: $params")
        prompt_readline(VocabIQ.questions[response_idx])
    end
    function new_response_callback(tracked_responses, terminating)
        if tracked_responses.responses.values[end] > 0
            println("Correct")
        else
            println("Wrong")
        end
        ability = ability_estimator(tracked_responses)
        var = variance_given_mean(ability_integrator,
            dist_ability_est,
            tracked_responses,
            ability)
        println("Got ability estimate: $ability ± $var")
        println("")
    end
    loop_config = CatLoopConfig(rules = rules,
        get_response = get_response,
        new_response_callback = new_response_callback)
    run_cat(loop_config, item_bank)
end

run_vocab_iq_cat()

This page was generated using DemoCards.jl and Literate.jl.