IRT information, scoring, and diagnostics

knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(eyeprocess)

The native IRT layer provides transparent mathematical utilities for common dichotomous and polytomous families. Estimation is not silently approximated when a specialized external engine is required.

items <- data.frame(
  item_id = paste0("I", 1:8), a = seq(.8, 1.5, length.out = 8),
  b = seq(-1.5, 1.5, length.out = 8), c = 0, d = 1
)
info <- eyeprocess_irt_test_information(seq(-3, 3, by = .25), items)
head(info)
eyeprocess_irt_measurement_precision_profile(info$theta, items)

The module also supplies EAP/MAP/MLE score utilities, conditional uncertainty, bank targeting, residual fit, Q3/local-dependence summaries, and Infit/Outfit-style diagnostics. Person-fit quantities are model diagnostics; they must not be converted into claims about cheating, disengagement, diagnosis, or mental state.

Stan's current User Guide emphasizes explicit identification for IRT models and sparse encodings when response matrices are incomplete. These principles motivate eyeprocess_irt_identification_audit() and eyeprocess_irt_sparse_design_audit().

Primary source: https://mc-stan.org/docs/stan-users-guide/item-response-models.html.

Visual diagnostics

The following deterministic example illustrates two native diagnostic views. These figures demonstrate software behaviour for a synthetic item bank; they are not empirical evidence of construct validity.

viz_items <- data.frame(
  item_id = paste0('I', 1:8),
  a = seq(0.8, 1.5, length.out = 8),
  b = seq(-1.5, 1.5, length.out = 8),
  c = 0,
  d = 1
)

viz_theta <- seq(-3, 3, by = 0.25)

viz_information <- eyeprocess::eyeprocess_irt_test_information(
  viz_theta,
  viz_items
)

stopifnot(
  inherits(viz_information, 'eye_irt_information_profile')
)

plot(viz_information)
viz_sim <- eyeprocess::simulate_eyeprocess_irt_binary(
  80L,
  viz_items,
  missing_rate = 0.10,
  seed = 12L
)

viz_q3 <- eyeprocess::eyeprocess_irt_q3(
  viz_sim$responses,
  viz_sim$probabilities
)

stopifnot(
  inherits(viz_q3, 'eye_irt_q3_matrix')
)

plot(viz_q3)


Try the eyeprocess package in your browser

Any scripts or data that you put into this service are public.

eyeprocess documentation built on Sept. 28, 2026, 5:08 p.m.