Fits a unidimensional IRT model to the responses in a pipeline and checks
whether the items are fit to enter an item bank. The checks (thresholds
from mv_rules()):
Arguments
- p
a pipeline with responses from
add_responses().- model
the item type passed to
mirt::mirt(), such as"Rasch","2PL","3PL","graded"or"gpcm", or"auto"to letselect_model()choose.- dif
logical; test for DIF. Defaults to
TRUEwhen the pipeline has a grouping variable.- reference
the reference group for DIF. Defaults to the largest group.
- ...
further arguments passed to
mirt::mirt().
Value
The pipeline with the fitted model (p$model), the DIF results
(p$dif) and the calibration flags added.
Details
not_converged(block): the estimation did not converge.model_fit(review): M2-based RMSEA abovermseaor CFI belowcfi, which suggests more than one dimension or a poorly fitting model.local_dependence(review): pairs of items whose absolute Q3 residual correlation exceedsq3.item_misfit(review): S-X2 item fit p-value belowfit_alphaafterfit_adjustadjustment.parameter_range(review): discrimination outsidea_mintoa_max, an absolute difficulty aboveb_max, or a guessing parameter abovec_max.dif_large(block) anddif_moderate(review): differential item functioning between the groups given toadd_responses(), classified with the ETS A/B/C rules. 0/1 items use the Mantel-Haenszel D-DIF statistic (category C: |D-DIF| at leastdif_cand a significant Mantel-Haenszel test; B: at leastdif_band significant). Polytomous items use the standardized mean difference divided by the item's standard deviation with the Mantel test (dif_poly_c,dif_poly_b). Respondents are matched on their total score; with more than two groups each group is compared with the reference group.low_reliability(review): marginal reliability belowreliability.person_misfit(info): the share of respondents whose Zh (lz) person-fit statistic is belowperson_misfit; they are listed inp$persons.
Examples
# \donttest{
p <- add_responses(mv_pipeline(), certexam, items = 3:34, key = certexam_key,
group = "language")
p <- calibrate(p, model = "3PL")
#> Warning: Calibration is running with 1 block open flag(s) from earlier stages:
#> #1 [block] possible_miskey: Q14 (p = 0.18, item-total r = -0.23)
#> Flags only warn because strict = FALSE. See flags(p).
flags(p, stage = "calibration")
#> # A tibble: 7 × 10
#> id stage check target value rule level advice status note
#> <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 2 calibration not_converged test not … esti… block Try a… open ""
#> 2 6 calibration dif_large Q09 MH D… ETS … block Have … open ""
#> 3 3 calibration local_dependen… Q21 &… Q3 =… |Q3|… revi… The i… open ""
#> 4 4 calibration parameter_range Q14 a = … a in… revi… Extre… open ""
#> 5 5 calibration parameter_range Q21 c = … a in… revi… Extre… open ""
#> 6 7 calibration dif_moderate Q27 MH D… ETS … revi… Revie… open ""
#> 7 8 calibration person_misfit 26 re… 2.2%… Zh <… info About… open ""
# }