This internal helper performs a single consensus-target run from one starting target. Users should normally call [CONSENSUS_PROCRUSTES()] instead.
.consensus_target_procrustes_single(
unrotated_list,
init_targets = NULL,
rotation = c("orthogonal", "oblique"),
start = 1,
tol = 0.001,
loss_tol = 1e-07,
loss_patience = 5,
convergence = c("either", "target", "loss", "both"),
min_iter = 2,
max_iter = 200,
alpha = 1,
match_target = TRUE,
hyper_cutoff = 0.15,
oblique_maxit = 300,
oblique_eps = 1e-05,
oblique_max_line_search = 10,
oblique_step0 = 1,
oblique_normalize = FALSE,
oblique_random_starts = 0,
oblique_random_starts_stage = c("final", "none", "outer", "both"),
oblique_screen_keep = 2,
oblique_triage_maxit = 25,
oblique_triage_improve_tol = 0,
verbose = FALSE
)List of unrotated loading matrices to be aligned. All matrices must be numeric, finite, and have identical dimensions.
Optional list of starting target matrices. These are typically rotated loading matrices from the corresponding analyses. If `NULL`, `unrotated_list` is used.
Character string, either `"orthogonal"` or `"oblique"`.
Either a single integer selecting an element of `init_targets`, or an explicit target matrix. Used when `multi_start = FALSE`.
Positive relative Frobenius-norm convergence tolerance for the outer target update.
Positive tolerance for the relative change in the outer consensus loss. If `NULL`, loss-based convergence is disabled. It cannot be `NULL` when `convergence` is `"loss"` or `"both"`.
Positive integer. Number of consecutive iterations with relative loss change below `loss_tol` required for loss-based convergence.
Character string controlling the stopping rule. `"either"` stops when either target or loss convergence is satisfied; `"target"` uses only target change; `"loss"` uses only loss change; `"both"` requires both.
Non-negative integer. Minimum number of outer iterations before convergence can be declared.
Positive integer. Maximum number of outer consensus iterations.
Damping factor for the target update. `alpha = 1` uses the full centroid update. Smaller values, such as `0.5`, can reduce oscillation.
Logical. If `TRUE`, the updated centroid is signed and column-matched to the previous target before convergence is evaluated.
Non-negative cutoff used by `.hyperplane_count()` for summary output.
Parameters passed to `PROCRUSTES()` when `rotation = "oblique"`.
Number of random starts used by the inner oblique solver. See `oblique_random_starts_stage` for when these are used.
Character string controlling whether random starts are used during the outer consensus loop, the final alignment pass, both, or neither. The default `"final"` keeps the outer loop smooth by using warm starts during iteration and applies random-start protection only in the final pass.
Screening and triage parameters passed to the compiled oblique solver when random starts are used.
Logical; if `TRUE`, print convergence messages for the outer loop.