The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Exploratory Factor Analysis Workflow

Prepare and check ordinal items

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 is not dimensionality

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 with non-destructive screening

efa <- PsychoMatic::efa_auto(
  specification,
  rotation = "oblique",
  refine = "suggest",
  parallel_iter = 500,
  seed = 2401,
  verbose = FALSE,
  language = "eng"
)
summary(efa)$loadings
summary(efa)$decisions

This 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.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.