dot-rotate_cf_orth: Orthogonal Crawford-Ferguson factor rotation

.rotate_cf_orthR Documentation

Orthogonal Crawford-Ferguson factor rotation

Description

Rotate a loading matrix orthogonally under the Crawford-Ferguson criterion using a gradient-projection optimizer along the orthogonal (Stiefel) manifold.

Usage

.rotate_cf_orth(
  L,
  kappa,
  eps = 1e-05,
  normalize = TRUE,
  random_starts = 0L,
  maxit = 1000L,
  max_line_search = 10L,
  step0 = 1,
  screen_keep = 5L,
  triage_maxit = 25L,
  triage_improve_tol = 0
)

Arguments

L

Numeric matrix. The unrotated loading matrix (variables by factors).

kappa

Numeric scalar in ⁠[0, 1]⁠. The Crawford-Ferguson parameter.

eps

Numeric scalar. Convergence tolerance for the projected-gradient norm.

normalize

Logical scalar. If TRUE, apply Kaiser normalization before rotation and reverse it afterwards.

random_starts

Integer scalar. Number of additional random orthogonal starts.

maxit

Integer scalar. Maximum number of projected-gradient updates.

max_line_search

Integer scalar. Maximum number of step-halving attempts after the initial trial step in each line-search phase.

step0

Numeric scalar. Initial step size used in the projected-gradient update.

screen_keep

Integer scalar. Number of screened random starts retained for triage optimization.

triage_maxit

Integer scalar. Number of short optimization iterations used in the triage stage.

triage_improve_tol

Numeric scalar. Relative improvement required for a triaged start to be promoted to full optimization.

Details

The criterion value f and its gradient dQ/dL at the rotated loadings L = A %*% T define the search; the engine maps the gradient to the orthogonal transformation T, projects it onto the tangent space, performs a non-monotone line search, and retracts back onto the orthogonal group via a polar (singular value) projection. kappa = 0 is the quartimax criterion and kappa = ncol(A) / (2 * nrow(A)) is the equamax criterion.

Additional random orthogonal starts may be requested. To bound runtime the solver screens each random start by its objective, runs a short triage optimization on the best-screened starts, and fully optimizes only those that improve on the current incumbent by at least triage_improve_tol.

Value

A named list with the rotated loadings, the orthogonal rotation matrix Th (with L %*% Th reproducing the rotated loadings), the attained criterion value, and the convergence and validity flags. The list additionally reports the criterion value reached at each optimized start in all_values, with a per-start convergence flag in all_converged.

References

Bernaards, C. A., & Jennrich, R. I. (2005). Gradient projection algorithms and software for arbitrary rotation criteria in factor analysis. Educational and Psychological Measurement, 65, 676-696.

Crawford, C. B., & Ferguson, G. A. (1970). A general rotation criterion and its use in orthogonal rotation. Psychometrika, 35, 321-332.


EFAtools documentation built on Aug. 21, 2026, 5:16 p.m.