Hierarchical Signal Detection Theory Models for Unconscious Processing

Fits hierarchical signal detection theory (SDT) models to paired direct and indirect measures, the design used to test for unconscious processing. Continuous indirect measures (typically response times) are dichotomized with the within-subject median split of Meyen et al. (2022) so that both tasks are placed on a common sensitivity scale. The package estimates a binomial probit mixed model in which the two sensitivities are correlated random effects, and tests the three hypotheses of interest: the group-level difference between sensitivities, their latent correlation, and the latent regression of the indirect on the direct measure, whose intercept is the test for unconscious processing. Frequentist estimation uses 'lme4'.


uSDT uSDT logo

R-CMD-check pkgdown

uSDT estimates hierarchical signal detection theory (SDT) models for research on unconscious processing. It jointly models sensitivity in paired direct and indirect measures, allowing researchers to compare both sensitivities, estimate their latent association, and test indirect sensitivity when direct sensitivity is zero.

Documentation

The package website is at https://ricardoreysaez.github.io/uSDT/. It contains:

  • Getting started, a tutorial that walks through the whole workflow with real data, from two trial-level data frames to the three hypotheses.
  • Reference, the help page of every function.
  • Changelog, the changes in each release.

Installation

Install the development version from GitHub:

install.packages("remotes")
remotes::install_github("RicardoReySaez/uSDT")

Example: Vadillo et al. data

The package includes the two trial-level data frames from Experiment 2 of Vadillo et al. (2025): vadillo_awareness for the direct task and vadillo_cuing for the indirect task.

library(uSDT)

data(vadillo_awareness)
data(vadillo_cuing)

d <- usdt_data_tasks(
  direct = vadillo_awareness,
  indirect = vadillo_cuing,
  subject_col = "subj",
  condition_col = "condition",
  condition_levels = c(signal = "old", noise = "new"),
  response_col = list(direct = "judged.old", indirect = "rt"),
  response_levels = list(
    direct = c(signal = 1, noise = 0),
    indirect = c(signal = "faster", noise = "slower")
  ),
  dichotomize = list(direct = FALSE, indirect = TRUE)
)

fit <- hsdt(d)
summary(fit)

Every column, level and format argument takes either one value for both tasks or one per task as list(direct = ..., indirect = ...), so the two tasks may differ in the columns they use, in the values those columns take, and in the format they arrive in.

The source data are from Vadillo, Malejka, and Shanks (2025), Mapping the reliability multiverse of contextual cuing, doi:10.1037/xlm0001410.

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("uSDT")

0.1.0 by Ricardo Rey-Sáez, 25 days ago


https://github.com/RicardoReySaez/uSDT, https://ricardoreysaez.github.io/uSDT/


Report a bug at https://github.com/RicardoReySaez/uSDT/issues


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


Authors: Ricardo Rey-Sáez [aut, cre] (ORCID: , Francisco Garre-Frutos [aut] (ORCID: , Alicia Franco-Martínez [aut] (ORCID: , Miguel Vadillo [aut]


Documentation:   PDF Manual  


GPL-3 license


Imports stats, utils, lme4, ggplot2, rlang

Suggests testthat, knitr, rmarkdown


See at CRAN