Runs the four-step tailored procedure of Andrich, Marais and Humphry
(2012) on a dichotomous analysis.
Step 1 is the supplied fit. Step 2 (tailored) sets to missing every
observed response whose modelled probability of success, at the step-1
person and item estimates, is below chance, and re-estimates
items and persons. Step 3 (origin-equated) re-analyses the
original data with the mean location of the anchor items fixed at
its tailored value by average item anchoring (see pcml):
every item keeps its initial position relative to the others and the
calibration as a whole moves onto the tailored origin, so the two
calibrations can be compared item by item. Step 4 (all-anchored) fixes
every item at its tailored difficulty and re-estimates persons on the
original data. Guessing is
indicated when difficult items are estimated harder in the tailored
analysis than in the origin-equated one; the comparison table and
plot_equate on the two calibrations show it directly.
Usage
tailored_analysis(
fit,
chance = 0.25,
anchor_items = NULL,
se_method = c("none", "bootstrap"),
boot_reps = 999L,
seed = NULL
)Arguments
- fit
An unanchored, unconstrained dichotomous fit from
rasch. The procedure estimates its own common origin.- chance
The guessing floor: the probability of success by chance (1/number of options; default 0.25).
- anchor_items
Items whose mean location fixes the common origin in step 3. The default takes the third of the test (at least two items) least affected by tailoring – fewest responses removed, ties broken towards the easier tailored location – which are the easy items the procedure trusts.
- se_method
"none"(default) reports the item shifts descriptively."bootstrap"resamples persons and repeats the complete four-step procedure, including automatic anchor selection, to obtain standard errors, percentile intervals, and Holm-adjusted tests. When a person identifier occurs on several rows, all of that person's rows are resampled together. A resample requiring no tailoring contributes zero item shifts.- boot_reps
Person-bootstrap replicates when
se_method = "bootstrap"; at least 50, default 999. The sign-count bootstrap p-value has resolution floor2/(boot_reps + 1), so after the Holm adjustment across m items the smallest achievable adjusted p is2m/(boot_reps + 1); a warning fires when that floor is at or above 0.05 (the procedure declares significance only below 0.05, so detection would be impossible).- seed
Optional non-negative whole-number seed for the person bootstrap. The caller's random-number state is restored on exit; see
rasch_rngfor generator support.
Value
A list of class "rasch_tailored": tailored,
origin_equated, and anchored fits, the comparison
table (initial, tailored, origin-equated locations, the
tailored-minus-equated shift; bootstrap uncertainty columns when
requested), the number of
responses removed, the anchor items used, se_method, and bootstrap
accounting: requested, usable, non-converged, other failures, and the
minimum usable count. anchor_items_requested distinguishes anchors
supplied by the analyst from automatic anchor selection; it is
NULL for the latter. The algorithm identifier and fitted-model and
result signatures authenticate a saved result against the calibration
and procedure from which it was computed.
The final anchored component is a fixed-calibration scoring fit.
Its person estimates and observed diagnostics remain available, but
downstream item changes and refit-based bootstraps are not supported.
Returned fits retain keyed scoring and structural records. Raw option
data in the tailored fit exclude the responses removed by tailoring.
For item-shift uncertainty, use this function's person bootstrap on the
original calibration.
References
Waller, M. I. (1989). Modeling guessing behavior: A comparison of two IRT models. Applied Psychological Measurement, 13, 233-243. Andrich, D., Marais, I. and Humphry, S. (2012). Using a theorem by Andersen and the dichotomous Rasch model to assess the presence of random guessing in multiple choice items. Journal of Educational and Behavioral Statistics, 37, 417-442.
Examples
set.seed(1); N <- 800
d <- seq(-2, 2.5, length.out = 10); th <- rnorm(N)
P <- plogis(outer(th, d, "-"))
P <- 0.25 + 0.75 * P # uniform guessing floor
X <- matrix(rbinom(N * 10, 1, P), N, 10)
colnames(X) <- paste0("I", 1:10)
ta <- tailored_analysis(rasch(X), chance = 0.25)
ta$table
#> item initial tailored origin_equated removed shift se ci_low ci_high p p_adj
#> I1 -1.673 -1.770 -1.767 0 -0.003
#> I2 -1.221 -1.360 -1.315 0 -0.044
#> I3 -0.751 -0.826 -0.845 7 0.019
#> I4 -0.340 -0.405 -0.434 33 0.029
#> I5 0.112 0.048 0.018 33 0.031
#> I6 0.272 0.265 0.177 90 0.088
#> I7 0.542 0.513 0.448 90 0.065
#> I8 0.901 0.883 0.806 206 0.077
#> I9 1.037 1.284 0.943 206 0.341
#> I10 1.120 1.369 1.026 206 0.343
#> significant
#>
#>
#>
#>
#>
#>
#>
#>
#>
#>