An assessment pipeline takes a test from response data to a score report in stages. Each stage does its work, then runs a set of checks (a gate) and records what it finds as flags that the user should consider before the next stage. The stages available so far (numbered as in the pipeline plan; start at any of them):
Usage
mv_pipeline(
title = "Assessment pipeline",
rules = mv_rules(),
strict = FALSE,
verbose = interactive()
)
# S3 method for class 'mv_pipeline'
tidy(x, ...)Arguments
- title
a name for the pipeline, used as the report title.
- rules
thresholds for the checks, from
mv_rules().- strict
logical; if
TRUE, openreviewandblockflags stop the next stage until a decision is recorded.- verbose
logical; print a summary of each stage's flags.
- x
a pipeline.
- ...
not used.
Value
An object of class mv_pipeline. Use flags() to list its flags
and tidy() to get all of them as a tibble.
Details
set_blueprint(): the construct, content cells and score use.generate_items()oradd_items(): item writing with a language model or by people (keys, distractors, rubrics, duplicates, coverage).review_packet()andread_reviews(): human content and sensitivity review, with an optional AI screen (reviewers, alignment, bias, agreement).design_field_test(): forms, anchors and sample sizes for the field test, with simulated parameter recovery.add_responses(): data intake and cleaning (scoring with a key, missing data, miskeyed items, straight-lining, rapid guessing, sparse categories).calibrate(): model fitting with mirt (convergence, model fit, local dependence, item fit, parameter ranges, DIF, reliability, person fit).link_to_bank()andbank_items()(optional): put the calibration on the scale of an item bank through anchor items and add the new items to the bank (anchor drift, linking constants).assemble_forms(),simulate_cat()orassemble_mst(): fixed forms, adaptive or multistage tests (blueprint, parallelism, precision, exposure, routing).set_cuts(): cut scores and classification accuracy and consistency.score_open()andscore_persons(): open-ended scoring by a language model or a trained model, checked against human scores, and ability estimates.check_security(): preknowledge, leakage, parameter drift, answer copying, aberrant timing, site anomalies and score gains.pipeline_report(): an HTML technical report that also lists every flag and every decision made about it.monitor_bank()andretire_items(): after each administration, the bank's health over time (over-exposed items, content cells running short, reliability trend, unused items).
Flags have three levels. info flags are shown for awareness. review
flags point at something a psychometrician should look at. block flags
point at problems that make later stages unsafe, such as a model that did
not converge or an item with large DIF.
By default flags only warn: every stage runs, and a warning lists the open
flags it is moving past. With strict = TRUE, a stage refuses to run while
an earlier stage has open review flags (record a decision with
acknowledge()) or open block flags (fix the problem, for example with
drop_items(), or record a reason with override()). Every decision is
logged with its time and note and printed in the report.
Examples
# \donttest{
p <- mv_pipeline("Certification exam")
p <- add_responses(p, certexam, items = 3:34, key = certexam_key,
id = "id", group = "language")
flags(p)
#> # A tibble: 1 × 10
#> id stage check target value rule level advice status note
#> <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 1 intake possible_miskey Q14 p = 0.18,… p < … block Check… open ""
p <- drop_items(p, "Q14", note = "Miskeyed; confirmed with the item writer")
p <- calibrate(p, model = "3PL")
p
#> <mv_pipeline> Certification exam
#> flags warn (strict = FALSE); rules: standards
#>
#> [ ] 0 Blueprint not run
#> [ ] 1 Item generation not run
#> [ ] 2 Item review not run
#> [ ] 3 Field-test design not run
#> [x] 4 Data intake 1,200 respondents, 32 items, scored with key
#> [x] 5 Calibration 3PL, NOT converged, reliability 0.83 | open: 2 block, 4 review, 1 info
#> [ ] 6 Linking and bank not run
#> [ ] 7 Forms not run
#> [ ] 8 Cut scores not run
#> [ ] 9 Scoring not run
#> [ ] 10 Test security not run
#> [ ] 11 Reporting not run
#> [ ] 12 Bank monitoring not run
#>
#> Open flags: 2 block, 4 review, 1 info. See flags(p). 1 decision(s) recorded.
f <- pipeline_report(p, file = tempfile(fileext = ".html"))
#> Warning: Reporting is running with 2 block and 4 review open flag(s) from earlier stages:
#> #2 [block] not_converged: test (not converged)
#> #3 [review] local_dependence: Q21 & Q22 (Q3 = 0.28)
#> #4 [review] parameter_range: Q17 (c = 0.41)
#> #5 [review] parameter_range: Q21 (c = 0.60)
#> #6 [block] dif_large: Q09 (MH D-DIF = -2.01, French vs English (favours English))
#> #7 [review] dif_moderate: Q27 (MH D-DIF = -1.01, French vs English (favours English))
#> Flags only warn because strict = FALSE. See flags(p).
# }