Internal helper that constructs a Generalized Procrustes Analysis (GPA)
consensus target across a list of loading matrices and returns the aligned
loadings, the centroid target, and convergence diagnostics. Used by
efa_mi() under target_method = "consensus" to build a common
rotation target across imputations. Oblique rotations are not supported
here: the iteration is degenerate for oblique transforms with more than
one factor (cf. Lorenzo-Seva & Van Ginkel 2016, who use a Promin step on
top of the centroid rather than iterated oblique Procrustes); callers
should pass the unrotated solutions of an orthogonal rotation, or use
target_method = "first_target".
.gpa_consensus_target(
unrotated_list,
init_targets = NULL,
rotation = c("orthogonal", "oblique"),
start = 1,
multi_start = FALSE,
starts = NULL,
tol = 0.001,
loss_tol = 1e-06,
loss_patience = 5,
convergence = c("either", "target", "loss", "both"),
min_iter = 2,
max_iter = 200,
alpha = 1,
match_target = TRUE,
hyper_cutoff = 0.15,
verbose = FALSE
)A list with the converged target, aligned matrices, pooled loadings,
pooled Phi, convergence history, inner-alignment diagnostics, and
hyperplane summaries. If multi_start = TRUE, the multi_start element also
contains the per-start losses, convergence indicators, run summaries, all
run objects, and between-run Tucker congruence matrices.
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.
Logical. If FALSE, perform one consensus-target run. If
TRUE, repeat the single-start algorithm for each element of starts.
Integer vector selecting elements of init_targets used as
starting targets when multi_start = TRUE. If NULL, all elements of
init_targets are used. Duplicate entries are removed.
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.
Logical; if TRUE, print convergence messages for the outer
loop.
The iteration alternates two steps:
each loading matrix is aligned to the current target with efa_procrustes();
the target is updated to the elementwise centroid of the aligned matrices.
The outer loop stops when the target stabilises, when the consensus loss stabilises, or when both criteria are satisfied.
If multi_start = FALSE, one consensus run is performed. If
multi_start = TRUE, the same engine is repeated for the selected starting
targets and the run with the smallest final mean loss is returned as the
main result; all runs and a between-run congruence summary are retained in
the multi_start component.
Gower, J. C. (1975). Generalized Procrustes analysis. Psychometrika, 40, 33-51.
Van Ginkel, J. R., & Kroonenberg, P. M. (2014). Using Generalized Procrustes Analysis for Multiple Imputation in Principal Component Analysis. Journal of Classification, 31, 242-269.
Lorenzo-Seva, U., & Van Ginkel, J. R. (2016). Multiple Imputation of missing values in exploratory factor analysis of multidimensional scales: estimating latent trait scores. Anales de Psicologia, 32, 596-608.