The example creates three simulated domains with explicit reverse keys.
set.seed(2401)
latent <- matrix(stats::rnorm(300 * 3), ncol = 3)
ordinal_items <- as.data.frame(sapply(seq_len(12), function(j) {
as.integer(cut(0.8 * latent[, ceiling(j / 4)] + stats::rnorm(300, sd = 0.6),
breaks = c(-Inf, -1, -0.3, 0.3, 1, Inf), labels = FALSE))
}))
names(ordinal_items) <- sprintf("item%02d", 1:12)
attr(ordinal_items, "reverse_keys") <- c("item03", "item07", "item11")
ordinal_items[attr(ordinal_items, "reverse_keys")] <-
lapply(ordinal_items[attr(ordinal_items, "reverse_keys")], function(x) 6L - x)
attr(ordinal_items, "factor_structure") <- list(
factor1 = names(ordinal_items)[1:4], factor2 = names(ordinal_items)[5:8],
factor3 = names(ordinal_items)[9:12]
)
items <- PsychoMatic::reverse_items(
ordinal_items,
items = attr(ordinal_items, "reverse_keys"),
min_score = 1,
max_score = 5,
overwrite = TRUE
)
specification <- PsychoMatic::psychomatic_spec(
items,
level = "ordinal",
missing = "available",
language = "eng"
)An explicit ordered declaration prevents integer codes from carrying more meaning than the researcher intended. Item membership still requires substantive judgment.
reliability <- PsychoMatic::reliability_auto(
items,
items = attr(ordinal_items, "factor_structure")$factor1,
level = "ordinal",
language = "eng"
)
#>
#> ================================================================================
#> RELIABILITY
#> ================================================================================
#>
#> DATA AND METHOD
#> N: 300
#> Items: 4
#> Complete: 300
#> Measurement: ordinal
#> Keying: none
#>
#> RELIABILITY COEFFICIENTS
#> group factor coefficient estimate status reason
#> Data sample All selected items Alpha (Cronbach) 0.854 Adequate >= 0.70
#> Data sample All selected items Ordinal alpha 0.877 Adequate >= 0.70
#> Data sample All selected items Omega 0.855 Adequate >= 0.70
#>
#> ITEM ANALYSIS: RELIABILITY IF DELETED
#> item N cases Item-rest r Alpha if deleted Ordinal alpha if deleted
#> item01 300 0.738 0.796 0.827
#> item02 300 0.679 0.821 0.848
#> item03 300 0.673 0.824 0.851
#> item04 300 0.694 0.815 0.843
#> Omega if deleted
#> 0.795
#> 0.820
#> 0.823
#> 0.815
#>
#> COMPUTATION AND INTERPRETATION
#> Alpha (Cronbach): k/(k-1) * (1 - sum of item variances / variance of the sum).
#> Uses the raw covariance matrix with pairwise available observations.
#>
#> Ordinal alpha applies the alpha formula to the polychoric matrix. Its estimand
#> is the continuous latent-response scale, not the observed score.
#>
#> Omega: single-factor congeneric model (ML for continuous data; WLSMV for
#> ordinal data), without equal-loading constraints. Ordinal omega targets
#> observed-score reliability using Green and Yang's correction. It does not
#> establish unidimensionality or good model fit.
#>
#> Corrected item-total correlation excludes the item from the sum and uses
#> full-scale complete cases. Alpha uses pairwise observations; omega uses
#> complete cases per fit. Item deletion refits omega and may change N. A
#> coefficient increase alone does not justify deleting an item.
#>
#> Selected-item alpha and model factor coefficients may refer to different
#> scores. Overall alpha does not establish unidimensionality.
#>
#>
#> REFERENCES
#> Cronbach, L. J. (1951). Coefficient alpha and the internal structure of tests.
#> Psychometrika, 16, 297-334. https://doi.org/10.1007/BF02310555
#>
#> Green, S. B., & Yang, Y. (2009). Reliability of summed item scores using
#> structural equation modeling: An alternative to coefficient alpha.
#> Psychometrika, 74(1), 155-167. https://doi.org/10.1007/s11336-008-9099-3
#>
#> Jorgensen, T. D., Pornprasertmanit, S., Schoemann, A. M., & Rosseel, Y. (2026).
#> semTools: Useful tools for structural equation modeling (Version 0.5.10) [R
#> package]. https://CRAN.R-project.org/package=semTools
#>
#> McDonald, R. P. (1999). Test theory: A unified treatment. Lawrence Erlbaum
#> Associates.
#>
#> Zumbo, B. D., Gadermann, A. M., & Zeisser, C. (2007). Ordinal versions of
#> coefficients alpha and theta for Likert rating scales. Journal of Modern
#> Applied Statistical Methods, 6(1), 21-29.
#> https://doi.org/10.22237/jmasm/1177992180
summary(reliability)$coefficients
#> group factor coefficient estimate estimand
#> 1 <NA> <NA> alpha_observed 0.8537928 observed_score
#> 2 <NA> <NA> alpha_ordinal 0.8768378 latent_response
#> 3 <NA> <NA> omega 0.8552822 observed_score_congeneric
#> matrix keying status reason diagnostic_value
#> 1 raw_covariance none ok <NA> 0.853792....
#> 2 polychoric none ok <NA> 0.876837....
#> 3 ordinal_observed_score none ok <NA> 0.855282....The example estimates reliability within the first known simulated
domain, not across the three-domain item set.
reliability_auto() labels each coefficient’s estimand and
correlation basis. Coefficient alpha, ordinal alpha, and omega rely on
different assumptions and none demonstrates unidimensionality or
validity by itself.
efa <- PsychoMatic::efa_auto(
specification,
rotation = "oblique",
refine = "suggest",
parallel_iter = 500,
seed = 2401,
verbose = FALSE,
language = "eng"
)
summary(efa)$loadings
summary(efa)$decisionsThis model-fitting chunk is not evaluated during vignette
construction because polychoric estimation plus parallel simulation can
be slow on constrained CRAN workers. refine = "suggest"
retains all items and reports flags; automatic removal is not a
replacement for content review or cross-validation. Loading,
communality, cross-loading, KMO, Bartlett, and retention cutoffs are
heuristics. Inspect requested/effective correlation methods,
missing-case counts, repaired status, conditions, and any
not_evaluable configuration before interpreting the factor
solution.