easyRasch2

Buy Me A Coffee

easyRasch2 is an R package for Rasch measurement theory analysis workflows. It is the successor to easyRasch, offering a lightweight and consistent structure with proper namespacing and minimal dependencies.

A central design choice is simulation-based critical values for various fit statistics. Rather than relying on rule-of-thumb cutoffs, most diagnostics are paired with a parametric-bootstrap function that generates an empirical null distribution from the fitted Rasch / PCM model and the observed sample.

The Get Started link above contains a short introduction. For broader Rasch-analysis tutorials, see the vignette for the sibling package easyRasch.

Key design principles

Functions by domain

Item fit

Local dependence

Dimensionality / unidimensionality

Differential item functioning

Item category threshold ordering

Reliability, targeting, score conversion

Data visualization

Installation

Install the development version from GitHub:

# install.packages("remotes")
remotes::install_github("pgmj/easyRasch2")

Example

library(easyRasch2)
data("pcmdat2", package = "eRm")
options(mc.cores = 4)
set.seed(42)

# Conditional item infit with simulation-based cutoffs
simfit <- RMitemInfitCutoff(pcmdat2, iterations = 250)
RMitemInfit(pcmdat2, cutoff = simfit)

# Test of unidimensionality via posterior-predictive ordinal CFA
cfa_res <- RMdimCFACutoff(pcmdat2, iterations = 250)
cfa_res                # kable: observed vs simulated cutoffs
RMdimCFAPlot(cfa_res)     # histogram + observed diamond

# DIF analysis via Andersen's LR test
grp <- factor(sample(c("A", "B"), nrow(pcmdat2), replace = TRUE))
RMdifLR(pcmdat2, dif_var = grp)

# Rasch-tree DIF with effect-size classification on continuous +
# categorical covariates simultaneously
covs <- data.frame(
  group = grp,
  band  = sample(c("low", "high"), nrow(pcmdat2), replace = TRUE)
)
RMdifTree(pcmdat2, covariates = covs)

References

Credits

As mentioned earlier, this is based on my easyRasch package, and I am using Claude to “transfer” functions to this more properly formatted package. While it uses my earlier code, most of the code in this package is produced by the LLM and bug fixed by me.

RMdifTree() adapts MIT-licensed code from Mirka Henninger and Jan Radek’s raschtreeMH and effecttree packages for the effect-size and ETS-classification algorithms.

Magnus Johansson is a licensed psychologist with a PhD in behavior analysis. He works as a research specialist at Karolinska Institutet, Department of Clinical Neuroscience, Center for Psychiatry Research.

License

GPL (>= 3)