Skip to content

Commit 98c3b06

Browse files
author
Frankie Robertson
committed
Use expected_item_information for previous items in multidim case (mirtcat compatible)
1 parent 8aab64f commit 98c3b06

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/next_item_rules/criteria/item/information.jl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ function compute_criterion(
2626
return -item_criterion.expected_item_information(ir, ability)
2727
end
2828

29-
struct InformationMatrixCriteria{AbilityEstimatorT <: AbilityEstimator, F} <:
29+
struct InformationMatrixCriteria{AbilityEstimatorT <: AbilityEstimator, F, G} <:
3030
ItemMultiCriterion
3131
ability_estimator::AbilityEstimatorT
32-
expected_item_information::F
32+
known_item_information::F
33+
expected_item_information::G
3334
end
3435

3536
function InformationMatrixCriteria(ability_estimator)
36-
InformationMatrixCriteria(ability_estimator, expected_item_information)
37+
InformationMatrixCriteria(ability_estimator, expected_item_information, expected_item_information)
3738
end
3839

3940
function init_thread(item_criterion::InformationMatrixCriteria,
@@ -42,7 +43,8 @@ function init_thread(item_criterion::InformationMatrixCriteria,
4243
# θ update.
4344
# TODO: Update this to use track!(...) mechanism
4445
ability = maybe_tracked_ability_estimate(responses, item_criterion.ability_estimator)
45-
responses_information(responses.item_bank, responses.responses, ability)
46+
responses_information(responses.item_bank, responses.responses, ability;
47+
information_func=item_criterion.known_item_information)
4648
end
4749

4850
function compute_multi_criterion(
@@ -52,9 +54,9 @@ function compute_multi_criterion(
5254
# TODO: Add in information from the prior
5355
ability = maybe_tracked_ability_estimate(
5456
tracked_responses, item_criterion.ability_estimator)
55-
return acc_info .+
56-
item_criterion.expected_item_information(
57+
exp_info = item_criterion.expected_item_information(
5758
ItemResponse(tracked_responses.item_bank, item_idx), ability)
59+
return acc_info .+ exp_info
5860
end
5961

6062
should_minimize(::InformationMatrixCriteria) = false

src/next_item_rules/criteria/pointwise/information_support.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,16 @@ function expected_item_information(ir::ItemResponse, θ::Vector)
9494
return -sum(eachslice(hess, dims=1) .* exp_resp)
9595
end
9696

97+
expected_item_information(ir::ItemResponse, _, θ::Vector) = expected_item_information(ir, θ)
98+
9799
function known_item_information(ir::ItemResponse, resp_value, θ)
98100
-ForwardDiff.hessian-> log_resp(ir, resp_value, θ), θ)
99101
end
100102

101-
function responses_information(item_bank::AbstractItemBank, responses::BareResponses, θ)
103+
function responses_information(item_bank::AbstractItemBank, responses::BareResponses, θ; information_func=known_item_information)
102104
d = domdims(item_bank)
103105
reduce(.+,
104-
(known_item_information(ItemResponse(item_bank, resp_idx), resp_value > 0, θ)
106+
(information_func(ItemResponse(item_bank, resp_idx), resp_value > 0, θ)
105107
for (resp_idx, resp_value)
106108
in zip(responses.indices, responses.values)); init = zeros(d, d))
107109
end

0 commit comments

Comments
 (0)