RM* function that returns a ggplot
now applies three shared internal theme helpers:
er2_axis_margins() — extra breathing room around the x
and y axis titles.er2_plot_caption() — left-aligned 9 pt plot caption.
When the optional ggtext package is installed (new in
Suggests), the caption renders via
ggtext::element_markdown() so the APA-conventional italic
“Note.” prefix can sit alongside roman body text. Without
ggtext, it falls back to a plain
element_text(face = "italic") and a plain “Note.” prefix —
no markdown asterisks ever leak through to the rendered text.er2_caption() — builds the caption string with the
“Note.” prefix and wraps long captions at 90 characters via
strwrap() so they no longer run off the right edge of the
plot. The body text is wrapped first then prefixed, so the prefix is
never broken by a line break.@noRd) and not
exported.RMitemCatProb() plots model-implied
category-response probability curves per item, similar to
eRm::plotICC() or mirt trace plots but with a
ggplot2 / viridis output. Each item gets its own facet
panel; one curve per response category is coloured from low to high
using a continuous viridis palette. Polytomous items are fit with
eRm::PCM(); dichotomous items fall back to
eRm::RM() (recovering the standard two-category logistic
ICC). Optional descriptive item_labels and
category_labels make the output report-ready.
label_curves = "path" mode
(requires the optional geomtextpath package, in Suggests)
writes each category’s label along its own curve in the classic
IRT trace-plot style. Single-item only — pass the full multi-item
dataset and use the item argument to choose which item’s
curves to plot. The model is still fit on all items (CML threshold
estimation needs the full dataset); only the rendering is filtered. Each
category’s label is positioned at that curve’s modal theta (the peak of
its bell for middle categories; the relevant edge for the monotone
extreme categories), clamped a small margin in from the plot edges to
prevent clipping.This release renames 22 exported functions under a
consistent domain-prefix → method → variant-suffix scheme so
that autocompletion on a prefix (RMdif,
RMlocdep, RMitem, RMdim,
RMplot) surfaces every related function. No semantic
changes; only names.
A complete mapping is on the new ?easyRasch2-renaming
help page. The short version:
| Domain | Prefix | Examples |
|---|---|---|
| DIF | RMdif |
RMdifGamma(), RMdifGammaCutoff(),
RMdifGammaPlot(), RMdifLR(),
RMdifTree() |
| Local dependence | RMlocdep |
RMlocdepQ3(), RMlocdepQ3Cutoff(),
RMlocdepQ3Plot(), RMlocdepGamma(),
RMlocdepGammaCutoff(),
RMlocdepGammaPlot() |
| Item statistics | RMitem |
RMitemInfit(), RMitemInfitCutoff(),
RMitemInfitCutoffPlot(), RMitemInfitMI(),
RMitemInfitCutoffMI(), RMitemRestscore(),
RMitemRestscoreBoot(), RMitemICCPlot(),
RMitemHierarchy() |
| Dimensionality | RMdim |
RMdimResidualPCA(),
RMdimResidualPCACutoff(), RMdimCFACutoff(),
RMdimCFAPlot(), RMdimMartinLof(),
RMdimMartinLofResiduals() |
| Descriptive plot | RMplot |
RMplotTile(), RMplotBar(),
RMplotStackedbar() |
Unchanged: RMreliability(),
RMUreliability(), RMtargeting(),
RMscoreSE().
Breaking change. No deprecation aliases are shipped
— existing scripts will need a search-and-replace. See
?easyRasch2-renaming for the full table.
RMlocdepQ3plot() for visualising
per-pair simulated Q3 distributions against observed Q3 values,
mirroring the design of RMpgLDplot() and
RMpgDIFplot(). Supports items and
n_pairs filters; with data supplied, ranks
n_pairs by
|observed Q3 - median(simulated Q3 per pair)|.RMlocdepQ3cutoff() now retains per-pair iteration-level
data: the returned list gains pair_results,
pair_cutoffs, item_names,
cutoff_method, and hdci_width. Existing scalar
outputs (suggested_cutoff etc.) are unchanged. New
arguments cutoff_method ("hdci" /
"quantile") and hdci_width (default
0.99) control how per-pair credible intervals are
computed.RMlocdepQ3() can now be called with the full list
returned by RMlocdepQ3cutoff() (it auto-extracts
$suggested_cutoff), matching the partial-gamma family
convention. Numeric scalar still works.RMpartgamLD() and RMpgLDplot() gain an
n_pairs argument to keep only the top-N pairs by
|gamma| (LD) or by |observed - median(sim)|
deviation (plot).RMpartgamLD(), RMpartgamDIF(), and
RMitemrestscore() now use consistent column headers:
Adj. p-value (BH) and a new p-value sign.
star-string column. RMitemrestscore()’s former
Absolute_difference column is now a signed
Difference (observed − expected), so over- and underfit are
visually distinguishable at a glance.RMbarplot() and
RMstackedbarplot() join
RMtileplot() for easy visualization of item response data
distributions.RMciccPlot() for conditional item
characteristic curves plot, also includes DIF analysis for categorical
DIF variables.RMitemHierarchy(), which outputs a
plot illustrating the item hierarchy with item thresholds and confidence
intervals.RMcfaCutoff() to only use .scaled metrics for
RMSEA and CFI, for stability. See documentation for more details.RMmartinLof() with dichotomous items.RMitemHierarchy() making option
item_labels work as intended.RMcfaCutoff() for testing
unidimensionality against simulation-based cutoff values for model fit
metrics.
RMcfaPlot() shows figure with
distribution of simulation results and observed model fit values.RMdifTree() for testing DIF with
continuous variables, such as age in years, as well as combinations of
DIF variables (DIF interactions).
stablelearner, as recommended by
Henninger et al.
?RMdifTree) for more details:
RMdifLR() for testing DIF of
categorical variables using Andersens’s Likelihood Ratio test as
implemented in package eRmRMtileplot().
group faceting, which is useful for
DIF-analyses.RMmartinLof() based on Christensen &
Kreiner (2007, doi: 10.1177/0146621605286204), for both dichotomous and
polytomous (PCM) items.
RMmartinLofresiduals().RMresidualPCA() for evaluating
patterns in the standardized residuals from the RM/PCM. Outputs either a
table with eigenvalues and explained variance or a figure with
standardized loadings on the first residual contrast and item
locations.RMpcaCutoff() to determine a
simulation-based critical value for the largest eigenvalue.RMbootRestscore() for use with
large sample sizes. See https://pgmj.github.io/rasch_itemfit/ for more
details.RMscoreSE() that produces a
transformation table (or figure) from ordinal sum scores to WLE
(Weighted Likelihood Estimation) interval scores.RMlocdepQ3cutoff() to improve speed.RMtargeting() for Wright map style
plots.mice.
RMinfitcutoff_mi() uses the
mids object containing multiple imputated datasets (output
by mice::mice()) to run simulations on each datasets and
combines the results. Splits iterations across imputations (e.g. 250
total / 5 imputations = 50 each).RMiteminfit_mi() calculates and pools
conditional infit from the imputated datasets and optionally uses the
RMinfitcutoff_mi() output for cutoff values.RMinfitcutoffPlot()RMpartgamLD() and
RMpgLDcutoff() for evaluating local
dependency of item pairs in both directions.
RMpgLDplot(), similar to
RMpgDIFplot()RMpartgamDIF() and
RMpgDIFcutoff() for evaluating DIF of
categorical external variables.
RMpgDIFplot(),
similar to RMinfitcutoffPlot()RMinfitcutoffPlot() to
illustrate distribution of simulated conditional item infit MSQ values
together with the observed value.RMinfitcutoff() gains
cutoff_method and hdci_width
parameters: By default (cutoff_method = "hdci",
hdci_width = 0.999), per-item cutoff intervals are now
computed using the Highest Density Interval via
ggdist::hdci() (99.9% HDCI). Set
cutoff_method = "quantile" to restore the previous
behaviour (2.5th/97.5th percentiles). The ggdist package is
only required when cutoff_method = "hdci" (added to
Suggests). The returned list now also includes
cutoff_method and hdci_width fields.
RMiteminfit() caption updated: When
cutoff is the return value of RMinfitcutoff(),
the kable caption now states the cutoff method, e.g.
"Cutoff values based on 250 simulation iterations (99.9% HDCI)."
or
"Cutoff values based on 250 simulation iterations (2.5th/97.5th percentile).".
RMiteminfit() gains optional
cutoff parameter: Accepts the return value of
RMinfitcutoff() (or its $item_cutoffs
data.frame directly). When provided, per-item cutoff boundaries
(Infit_low, Infit_high) and a logical
Flagged column are added to both "dataframe"
and "kable" output. The kable caption includes the number
of simulation iterations when available.
New RMinfitcutoff():
Simulation-based (parametric bootstrap) cutoff determination for
[RMiteminfit()]. Supports both dichotomous and polytomous data. Optional
parallel processing via mirai (falls back to sequential if
not installed). Returns per-item 2.5th and 97.5th percentiles of
simulated infit and outfit MSQ distributions
($item_cutoffs), together with the full iteration-level
results ($results). Requires the iarm package
(Suggests).
New RMiteminfit(): Computes
conditional infit MSQ statistics for each item via
iarm::out_infit(), enriched with item locations relative to
the sample mean person location. Supports both dichotomous (Rasch model
via eRm::RM()) and polytomous (Partial Credit Model via
eRm::PCM()) data. Requires the iarm package
(Suggests). Output options: "kable" (default, plain-text
knitr::kable()) or "dataframe". Optional
sort = "infit" sorts by infit MSQ descending. Only complete
cases are used for conditional fit calculation.
New RMitemrestscore(): Computes
observed and model-expected item-restscore correlations via
iarm::item_restscore(), enriched with absolute differences
between observed and expected values, item average locations, and item
locations relative to the sample mean person location. Supports both
dichotomous (Rasch model via eRm::RM()) and polytomous
(Partial Credit Model via eRm::PCM()) data. Requires the
iarm package (Suggests). Output options:
"kable" (default, plain-text knitr::kable())
or "dataframe". Optional sort = "diff" sorts
by absolute difference descending.
RMlocdepQ3(): cutoff is
now optional (default NULL). When omitted, the raw Q3
residual correlation matrix is returned without any dynamic cut-off
applied. When provided, the dynamic cut-off (mean Q3 + cutoff) is shown
in the kable caption as before. Supersedes the requirement to always
supply a cutoff value (PRs #2 and #3).RMlocdepQ3cutoff():
Simulation-based (parametric bootstrap) cutoff determination for
RMlocdepQ3(). Supports both dichotomous and polytomous
data. Optional parallel processing via mirai (falls back to
sequential if not installed). The $suggested_cutoff is the
99th percentile of the simulated Q3 max–mean distribution.R/utils-simulation.R: sim_poly_item(),
sim_partial_score(), and
extract_item_thresholds().eRm,
psychotools (>= 0.7-3), parallel, and
utils moved/added to Imports. mirai added to
Suggests.RMlocdepQ3() for Yen’s Q3 residual correlation
analysis of local dependence.