| RMitemInfitCutoff | R Documentation |
Uses parametric bootstrap simulation to determine appropriate cutoff values
for RMitemInfit. This function simulates data from a correctly fitting
Rasch model that mimics your data and returns per-item empirical cutoffs.
RMitemInfitCutoff(
data,
iterations = 400,
parallel = TRUE,
n_cores = NULL,
verbose = FALSE,
seed = NULL,
cutoff_method = "hdci",
hdci_width = 0.95,
dgp = c("resample", "conditional")
)
data |
A data.frame or matrix of item responses. Items must be scored
starting at 0 (non-negative integers). Only complete cases (rows without
any |
iterations |
Integer. Number of simulation iterations (default 400). |
parallel |
Logical. Use parallel processing via |
n_cores |
Integer or |
verbose |
Logical. Show a progress bar (default |
seed |
Integer or |
cutoff_method |
Character string specifying how cutoff intervals are
computed. Either |
hdci_width |
Numeric. Width of the HDCI when The interval is a description of where a fitting item's statistic is
expected to fall, not a decision rule. Flagging every item outside a
width- |
dgp |
Character. Data-generating process for the parametric bootstrap.
|
The generating model is CML item parameters (via psychotools) with WLE
person locations. For each iteration a dataset is simulated under the chosen
dgp, the model is refitted by CML (psychotools::pcmodel(), which handles
dichotomous and polytomous data and is accepted by iarm), and conditional
infit and outfit MSQ are computed via iarm::out_infit(). The distribution
of these statistics across iterations provides empirical critical values per
item. Failed iterations (e.g., degenerate simulated data) are silently
discarded.
Parallel processing is provided by the mirai package (optional). Install
it with install.packages("mirai") to enable parallelisation.
The iarm package must be installed (it is in Suggests, not Imports).
A list with components:
resultsdata.frame with columns iteration, Item,
InfitMSQ, OutfitMSQ (one row per item per successful iteration).
item_cutoffsdata.frame with per-item cutoff summaries: Item,
infit_low, infit_high, outfit_low, outfit_high. Bounds are
computed using the method specified by cutoff_method.
actual_iterationsNumber of successful iterations. Everything
downstream rests on this rather than on iterations, so it is the
number to report.
requested_iterationsThe iterations argument, kept so callers
can tell how many simulated datasets were discarded.
sample_nNumber of complete cases used.
sample_n_totalNumber of respondents in the raw input data, before the complete-case filter.
sample_has_naLogical. Whether the raw input data contained any missing values.
sample_summarySummary statistics of estimated person parameters.
item_namesCharacter vector of item names from data.
cutoff_methodThe method used to compute cutoffs ("hdci" or
"quantile").
hdci_widthThe HDCI width used (only meaningful when
cutoff_method = "hdci").
dgpThe data-generating process used ("resample" or
"conditional").
Johansson, M. (2025). Detecting item misfit in Rasch models. Educational Methods & Psychometrics, 3(18). \Sexpr[results=rd]{tools:::Rd_expr_doi("10.61186/emp.2025.5")}
Johansson, M. (2026). Simulation-based cutoffs for conditional item fit in Rasch models: Iterations, multiplicity correction, and decision stability. PsyArXiv. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.31234/osf.io/7pqz4_v2")}
RMitemInfit
if (requireNamespace("iarm", quietly = TRUE) &&
requireNamespace("ggdist", quietly = TRUE)) {
set.seed(42)
sim_data <- as.data.frame(
matrix(sample(0:1, 200 * 10, replace = TRUE), nrow = 200, ncol = 10)
)
colnames(sim_data) <- paste0("Item", 1:10)
# Run 100 iterations sequentially for a quick demo
cutoff_res <- RMitemInfitCutoff(sim_data, iterations = 100,
parallel = FALSE, seed = 42)
cutoff_res$item_cutoffs
# Use the cutoffs in RMitemInfit()
RMitemInfit(sim_data)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.