Generalized Multicomponent Latent Trait Model for Diagnosis

Provides Bayesian estimation of Item Response Theory models that decompose item difficulty into cognitive operations or rules. Implements the Linear Logistic Test Model (LLTM; Fischer (1973) ), the Multicomponent Latent Trait Model for Diagnosis (MLTM-D; Embretson and Yang (2013) ), and the Generalized Multicomponent Latent Trait Model for Diagnosis (GMLTM-D; Ramirez et al. (2024) ), including a variant with correlated latent components. All models are estimated via Hamiltonian Monte Carlo using 'Stan' through the 'rstan' interface. Includes tools for prior predictive checks (Gelman et al., 2020), model validation, conditional reliability estimation, examinee mastery classification following Embretson (2019) , and individual diagnostic reports at the rule and component level. Supports user-defined prior distributions for all model parameters.


GMLTM

Generalized Multicomponent Latent Trait Model for Diagnosis

CRAN status License: GPL-3

The GMLTM package provides Bayesian estimation of Item Response Theory models that decompose item difficulty into cognitive operations or rules. It implements the Linear Logistic Test Model (LLTM; Fischer, 1973), the Multicomponent Latent Trait Model for Diagnosis (MLTM-D; Embretson & Yang, 2013), and the Generalized Multicomponent Latent Trait Model for Diagnosis (GMLTM-D; Ramírez et al., 2024). All models are estimated via Hamiltonian Monte Carlo using Stan through the rstan interface.

Installation

From CRAN (recommended)

install.packages("GMLTM")

From GitHub (development version)

# Install devtools if needed
install.packages("devtools")

# Install from GitHub
devtools::install_github("Eduar-Ramirez/GMLTM-D", force = TRUE)

Requirements

The package requires rstan as the Stan backend. Install it from CRAN before using GMLTM:

install.packages("rstan")

# Recommended configuration
rstan::rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())

Basic Usage

library(GMLTM)

# Load example data
data(analogy)

# Define Q-matrix (items x cognitive rules)
Q <- matrix(...)  # your Q-matrix here

# Define component structure
components <- list(
  transformation = c(1, 2, 3),
  relational     = c(4, 5)
)

# Fit GMLTM-D model
fit <- GMLTM(analogy, Q, components,
             iters = 2000, iter_warmup = 1000,
             chains = 2, cores = 2)

# Extract EAP estimates
fit$EAP$eta      # rule difficulty
fit$EAP$beta     # item difficulty
fit$EAP$alpha    # discrimination
fit$EAP$guessing # guessing parameters

# Marginal reliability
reliability(fit)

# Model fit
compute_model_validation(fit)

Custom Prior Distributions

A key feature of GMLTM is support for user-defined prior distributions via the priors argument. This enables prior sensitivity analysis — refitting models with different priors to verify that conclusions are robust.

# Conservative priors (default) — Beta(3,20) for guessing (mean ~0.13)
fit_conservative <- GMLTM(analogy, Q, components,
  iters = 2000, iter_warmup = 1000, chains = 2,
  priors = list(
    theta = list(mu = 0, sigma = 1),
    eta   = list(mu = 0, sigma = 1),
    alpha = list(mu = 0, sigma = 1),
    c     = list(shape1 = 3, shape2 = 20)
  ))

# Moderate priors — Beta(2,5) for guessing (mean ~0.29)
fit_moderate <- GMLTM(analogy, Q, components,
  iters = 2000, iter_warmup = 1000, chains = 2,
  priors = list(
    theta = list(mu = 0, sigma = 2),
    eta   = list(mu = 0, sigma = 2),
    c     = list(shape1 = 2, shape2 = 5)
  ))

# Diffuse priors — Beta(1,1) uniform for guessing
fit_diffuse <- GMLTM(analogy, Q, components,
  iters = 2000, iter_warmup = 1000, chains = 2,
  priors = list(
    theta = list(mu = 0, sigma = 5),
    eta   = list(mu = 0, sigma = 5),
    c     = list(shape1 = 1, shape2 = 1)
  ))

# Compare models using LOO-CV
loo::loo_compare(
  loo::loo(as.matrix(fit_conservative$fit, pars = "log_lik")),
  loo::loo(as.matrix(fit_moderate$fit,    pars = "log_lik")),
  loo::loo(as.matrix(fit_diffuse$fit,     pars = "log_lik"))
)

Prior parameters by model

Parameter Distribution Default Models
theta (ability) Normal(mu, sigma) N(0, 1) LLTM, MLTM, GMLTM
eta (rule difficulty) Normal(mu, sigma) N(0, 1) LLTM, MLTM, GMLTM
alpha (discrimination) Half-Normal(sigma) HN(1) MLTM, GMLTM
c (guessing) Beta(shape1, shape2) Beta(3, 20) GMLTM only

Main Functions

Function Description
GMLTM() Fit the GMLTM-D model
MLTM() Fit the MLTM-D model
LLTM() Fit the LLTM model
reliability() Marginal reliability estimation
ppchecks() Posterior predictive checks (histogram)
marginal_Pchecks() Marginal proportion checks with credible intervals
compute_model_validation() LOO-CV and WAIC model fit indices
plot_ICC_grouped() Item characteristic curves (grouped, 3×3 layout)
plot_ICC_individual() Item characteristic curves (individual)
conditional_reliability_tif() Conditional reliability via Test Information Function
generate_Q_with_interactions() Extend Q-matrix with rule interactions

References

Fischer, G. H. (1973). The linear logistic test model as an instrument in educational research. Acta Psychologica, 37(6), 359–374.

Embretson, S. E., & Yang, X. (2013). A multicomponent latent trait model for diagnosis. Psychometrika, 78, 14–36.

Ramírez, E. S., Jiménez, M., Franco, V. R., & Alvarado, J. M. (2024). Delving into the complexity of analogical reasoning: A detailed exploration with the Generalized Multicomponent Latent Trait Model for Diagnosis. Journal of Intelligence, 12, 67. https://doi.org/10.3390/jintelligence12070067

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("GMLTM")

2.0.0 by Eduar Ramirez, a month ago


https://github.com/Eduar-Ramirez/GMLTM-D


Report a bug at https://github.com/Eduar-Ramirez/GMLTM-D/issues


Browse source code at https://github.com/cran/GMLTM


Authors: Eduar Ramirez [aut, cre] , Marcos Jimenez [aut] , Vithor R. Franco [aut] , Jesus Alvarado [aut]


Documentation:   PDF Manual  


GPL (>= 3) license


Imports rstan, ggplot2, gridExtra, grid, utils, parallel, loo, RColorBrewer

Suggests testthat, knitr, rmarkdown

System requirements: C++17, GNU make


See at CRAN