% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/EFAtools-superseded.R
\name{EFA_POOLED}
\alias{EFA_POOLED}
\title{Exploratory factor analysis on multiple data imputations}
\usage{
EFA_POOLED(
  data_list,
  p = 0.05,
  target_method = c("first_target", "consensus"),
  align_unrotated = c("signed_tucker_congruence", "none", "procrustes"),
  fit_pool_method = c("D2"),
  consensus_args = list(),
  procrustes_args = list(),
  rmsea_ci_level = 0.9,
  rmsr_upper = TRUE,
  ...
)
}
\arguments{
\item{data_list}{A list of length \eqn{m}, where \eqn{m} is the number of
imputations. Each list element is a data frame or matrix of raw data, or a
correlation matrix. See argument \code{x} in \code{\link[=efa_fit]{efa_fit()}}. A \code{mids} object from
\pkg{mice} must be converted first, with \code{mice::complete(x, "all")}.}

\item{p}{Numeric in \eqn{(0, 1)}. One minus the confidence level for the
pooled confidence intervals, whichever \code{se} method produced them
(\code{"information"}, \code{"np-boot"}, or \code{"sandwich"}). For example, \code{p = .05}
gives 95\% intervals.}

\item{target_method}{Character. How rotated solutions are aligned across imputations
before pooling: \code{"first_target"} (the default) aligns every imputation to the first
imputation's rotated solution, while \code{"consensus"} refines a centroid target by
Generalized Procrustes Analysis, started from the medoid imputation so that the
pooled rotated solution does not depend on the order of \code{data_list} (orthogonal
rotations only). See \emph{Aligning solutions across imputations} in Details.}

\item{align_unrotated}{Character. How unrotated loadings are aligned before pooling:
\code{"signed_tucker_congruence"} (the default; sign/permutation via Tucker congruence,
anchored on the medoid imputation and returned in the extraction's canonical
gauge), \code{"procrustes"} (orthogonal Procrustes to the first imputation), or
\code{"none"}. See \emph{Aligning solutions across imputations} in Details.}

\item{fit_pool_method}{Character. Only \code{"D2"} is implemented for pooling
chi-square-type fit. If no chi-square is available, only residual-based
fit and descriptive quantities are returned. See \emph{Pooling the model chi-square and
fit indices} in Details.}

\item{consensus_args}{List of additional arguments controlling the
GPA-consensus iteration when \code{target_method = "consensus"}. Recognised tuning
parameters include the convergence tolerances \code{tol} and \code{loss_tol}, the
iteration bounds \code{min_iter} and \code{max_iter}, the target-update damping \code{alpha},
the multi-start controls \code{multi_start} and \code{starts}, and \code{start}, which
overrides the medoid imputation the iteration is otherwise started from.}

\item{procrustes_args}{List of \code{\link[=efa_procrustes]{efa_procrustes()}} algorithm controls for
fixed-target alignment, for example \code{oblique_maxit} or \code{oblique_random_starts}.
The loadings \code{A}, the alignment \code{Target}, the \code{rotation} family, and the
cross-product \code{S} are derived from the imputations and cannot be set here.}

\item{rmsea_ci_level}{Numeric. Confidence level for the RMSEA CI.}

\item{rmsr_upper}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Deprecated and ignored.
\code{efa_mi()} now always computes RMSR the same way, from the unique
off-diagonal residuals; SRMR is reported alongside it. Supplying it to
\code{\link[=efa_mi]{efa_mi()}} signals a deprecation warning; the superseded \code{\link[=EFA_POOLED]{EFA_POOLED()}}
accepts it silently.}

\item{...}{Additional arguments passed to \code{\link[=efa_fit]{efa_fit()}} (e.g. \code{estimator}, \code{rotation}, \code{se},
\code{n_factors}, \code{N}). These select the estimator, rotation, standard-error method, and
fit indices used for every imputation; see \code{\link[=efa_fit]{efa_fit()}} for the available options, their
properties, and which combinations are valid. Two of them shape the pooled object
rather than a single fit: \code{seed} sets the random state once for the whole
\code{efa_mi()} call -- every component bootstrap and every random-start rotation draws
from it, so a seeded call is reproducible as a whole, and the caller's random stream
is restored afterwards -- and \code{b_boot} sets the number of bootstrap replicates drawn
per imputation under \code{se = "np-boot"}, which is what the pooled within-imputation
variances are estimated from and is recorded in \code{settings$b_boot}. The
\code{\link[=estimate_control]{estimate_control()}} and
\code{\link[=rotate_control]{rotate_control()}} objects are accepted through \code{...} as well, although they are not
declared formals: pass them as \verb{estimate_control =} / \verb{rotate_control =} exactly as you
would to \code{\link[=efa_fit]{efa_fit()}}.}
}
\value{
The value of \code{\link[=efa_mi]{efa_mi()}}, normally a list of class
\code{c("efa_mi", "EFA_POOLED", "efa", "EFA")}; see there for the components.
}
\description{
\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#superseded}{\figure{lifecycle-superseded.svg}{options: alt='[Superseded]'}}}{\strong{[Superseded]}}

\code{EFA_POOLED()} has been superseded by \code{\link[=efa_mi]{efa_mi()}}, which is the recommended
interface going forward. It remains available and unchanged so existing code
keeps working.
}
\seealso{
\code{\link[=efa_mi]{efa_mi()}}
}
