# a failing component fit names its imputation and keeps the original condition

    Code
      efa_mi(raw, n_factors = 1, estimator = "PAF", rotation = "none")
    Message
      i `x` is not a correlation matrix; computing correlations from the raw data.
    Condition
      Error in `efa_mi()`:
      ! Imputation 2 could not be fitted.
      i Inspect `data_list[[2]]`, then re-fit or replace it.
      Caused by error:
      ! The correlation matrix could not be computed from the raw data.
      x Column "V3" has zero variance.
      i A constant variable correlates with nothing; drop it before the analysis.

# bootstrap arrays are pooled into MI SEs and CIs

    Code
      print(summary(pooled_boot))
    Output
      
      Pooled EFA across 2 imputations performed with estimator = 'ML' and
        rotation = 'none'.
      Pooling settings: align_unrotated = 'signed_tucker_congruence',
        fit_pool_method = 'D2'.
      
      -- Pooled Model Diagnostics ----------------------------------------------------
      
      Factors: 1
      Variables: 8
      N: 250
      Imputations: 2
      Pooling: align_unrotated = 'signed_tucker_congruence', fit_pool_method = 'D2'
      Bootstrap samples per imputation: 6
      Valid target-rotated samples: 6 out of 6 per imputation
      Heywood cases: 0
      Cross-loading items (|loading| >= <num>): 0
      Items without salient loading (|loading| >= <num>): 0
      Factors with fewer than 3 salient indicators: 0
      Items with primary-loading gap < <num>: 0
      Largest |residual|: <num>
      
      -- Unrotated Loadings ----------------------------------------------------------
      
                  F1    h2    u2
      fun <num> <num> <num>
      friends <num> <num> <num>
      enjoy <num> <num> <num>
      hurt <num> <num> <num>
      part <num> <num> <num>
      commonly <num> <num> <num>
      chances <num> <num> <num>
      attracted <num> <num> <num>
      
      -- 95% bootstrap/MI CIs for salient unrotated loadings -------------------------
      
      Variable   Factor  est    lower  upper
      fun        F1 <num> <num> <num>
      friends    F1 <num> <num> <num>
      enjoy      F1 <num> <num> <num>
      hurt       F1 <num> <num> <num>
      part       F1 <num> <num> <num>
      commonly   F1 <num> <num> <num>
      chances    F1 <num> <num> <num>
      attracted  F1 <num> <num> <num>
      
      -- Variances Accounted for -----------------------------------------------------
      
                      F1
      SS loadings <num>
      Prop Tot Var <num>
      
      -- Model Fit -------------------------------------------------------------------
      
      D2-pooled χ²(20) = <num>, p = <num>
      CFI (avg. over imputations) [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      TLI (avg. over imputations) [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      RMSEA [90% CI] [95% bootstrap/MI-CI]: <num> [ <num>; <num>] [ <num>, <num>]
      AIC [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      BIC [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      ECVI [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      CAF [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      SRMR [95% bootstrap/MI-CI]: <num> [ <num>, <num>]
      Note: the pooled χ² is the D2 statistic; its p uses the D2 reference F(20, <num>),
      not the χ²(20) tail.
      Note: CFI and TLI are averaged over the imputations, not formed from the
      separately pooled model and baseline statistics in `mi_diagnostics`.
      
      Note: Bootstrap/MI CIs based on 6 bootstrap samples per imputation.
      
      -- MI Uncertainty Summary ------------------------------------------------------
      
      Largest available FMI: <num>
      Median available FMI: <num>
      Largest available RIV: <num>
      Median available RIV: <num>
      
      -- Residual Diagnostics --------------------------------------------------------
      
      Residual cutoff: |r| > <num>
      Number of large residuals: 0
      Largest absolute residual: <num>
      
      No absolute residuals > <num> occurred.
      
      Inspect the residual matrix for details (e.g., with residuals()).

# print.efa_mi output is stable (PAF, promax)

    Code
      print(pooled_obl)
    Output
      
      Pooled EFA across 3 imputations performed with estimator = 'PAF' and
        rotation = 'promax'.
      Pooling settings: target_method = 'first_target',
        align_unrotated = 'signed_tucker_congruence', fit_pool_method = 'D2'.
      
      -- Rotated Loadings ------------------------------------------------------------
      
             F1     F2     F3    h2    u2
      V1 <num> <num> <num> <num> <num>
      V2 <num> <num> <num> <num> <num>
      V3 <num> <num> <num> <num> <num>
      V4 <num> <num> <num> <num> <num>
      V5 <num> <num> <num> <num> <num>
      V6 <num> <num> <num> <num> <num>
      V7 <num> <num> <num> <num> <num>
      V8 <num> <num> <num> <num> <num>
      V9 <num> <num> <num> <num> <num>
      V10 <num> <num> <num> <num> <num>
      V11 <num> <num> <num> <num> <num>
      V12 <num> <num> <num> <num> <num>
      V13 <num> <num> <num> <num> <num>
      V14 <num> <num> <num> <num> <num>
      V15 <num> <num> <num> <num> <num>
      V16 <num> <num> <num> <num> <num>
      V17 <num> <num> <num> <num> <num>
      V18 <num> <num> <num> <num> <num>
      
      -- Factor Intercorrelations ----------------------------------------------------
      
            F1 F2 F3
      F1 <num>
      F2 <num> <num>
      F3 <num> <num> <num>
      
      -- Variances Accounted for -----------------------------------------------------
      
                           F1 F2 F3
      SS loadings <num> <num> <num>
      Prop Tot Var <num> <num> <num>
      Cum Prop Tot Var <num> <num> <num>
      Prop Comm Var <num> <num> <num>
      Cum Prop Comm Var <num> <num> <num>
      
      -- Model Fit -------------------------------------------------------------------
      
      CAF: <num>
      SRMR: <num>
      df: 102

# print.efa_mi output is stable (ML, unrotated)

    Code
      print(pooled_none)
    Output
      
      Pooled EFA across 3 imputations performed with estimator = 'ML' and
        rotation = 'none'.
      Pooling settings: align_unrotated = 'signed_tucker_congruence',
        fit_pool_method = 'D2'.
      
      -- Unrotated Loadings ----------------------------------------------------------
      
                  F1    h2    u2
      fun <num> <num> <num>
      friends <num> <num> <num>
      enjoy <num> <num> <num>
      hurt <num> <num> <num>
      part <num> <num> <num>
      commonly <num> <num> <num>
      chances <num> <num> <num>
      attracted <num> <num> <num>
      
      -- Variances Accounted for -----------------------------------------------------
      
                      F1
      SS loadings <num>
      Prop Tot Var <num>
      
      -- Model Fit -------------------------------------------------------------------
      
      D2-pooled χ²(20) = <num>, p = <num>
      CFI (avg. over imputations): <num>
      TLI (avg. over imputations): <num>
      RMSEA [90% CI]: <num> [ <num>; <num>]
      AIC: <num>
      BIC: <num>
      ECVI: <num>
      CAF: <num>
      SRMR: <num>
      Note: the pooled χ² is the D2 statistic; its p uses the D2 reference F(20, <num>),
      not the χ²(20) tail.
      Note: CFI and TLI are averaged over the imputations, not formed from the
      separately pooled model and baseline statistics in `mi_diagnostics`.

# summary.efa_mi output is stable (PAF, promax)

    Code
      print(summary(pooled_obl))
    Output
      
      Pooled EFA across 3 imputations performed with estimator = 'PAF' and
        rotation = 'promax'.
      Pooling settings: target_method = 'first_target',
        align_unrotated = 'signed_tucker_congruence', fit_pool_method = 'D2'.
      
      -- Pooled Model Diagnostics ----------------------------------------------------
      
      Factors: 3
      Variables: 18
      N: 500
      Imputations: 3
      Pooling: target_method = 'first_target',
        align_unrotated = 'signed_tucker_congruence', fit_pool_method = 'D2'
      Alignment: method = 'first_target', converged
      Heywood cases: 0
      Cross-loading items (|loading| >= <num>): 0
      Items without salient loading (|loading| >= <num>): 0
      Factors with fewer than 3 salient indicators: 0
      Items with primary-loading gap < <num>: 1
      Largest |residual|: <num>
      Factor intercorrelations > <num>: none
      
      -- Rotated Loadings ------------------------------------------------------------
      
             F1     F2     F3    h2    u2
      V1 <num> <num> <num> <num> <num>
      V2 <num> <num> <num> <num> <num>
      V3 <num> <num> <num> <num> <num>
      V4 <num> <num> <num> <num> <num>
      V5 <num> <num> <num> <num> <num>
      V6 <num> <num> <num> <num> <num>
      V7 <num> <num> <num> <num> <num>
      V8 <num> <num> <num> <num> <num>
      V9 <num> <num> <num> <num> <num>
      V10 <num> <num> <num> <num> <num>
      V11 <num> <num> <num> <num> <num>
      V12 <num> <num> <num> <num> <num>
      V13 <num> <num> <num> <num> <num>
      V14 <num> <num> <num> <num> <num>
      V15 <num> <num> <num> <num> <num>
      V16 <num> <num> <num> <num> <num>
      V17 <num> <num> <num> <num> <num>
      V18 <num> <num> <num> <num> <num>
      
      -- Factor Intercorrelations ----------------------------------------------------
      
            F1 F2 F3
      F1 <num>
      F2 <num> <num>
      F3 <num> <num> <num>
      
      -- Structure Matrix ------------------------------------------------------------
      
            F1 F2 F3
      V1 <num> <num> <num>
      V2 <num> <num> <num>
      V3 <num> <num> <num>
      V4 <num> <num> <num>
      V5 <num> <num> <num>
      V6 <num> <num> <num>
      V7 <num> <num> <num>
      V8 <num> <num> <num>
      V9 <num> <num> <num>
      V10 <num> <num> <num>
      V11 <num> <num> <num>
      V12 <num> <num> <num>
      V13 <num> <num> <num>
      V14 <num> <num> <num>
      V15 <num> <num> <num>
      V16 <num> <num> <num>
      V17 <num> <num> <num>
      V18 <num> <num> <num>
      
      -- Simple Structure Diagnostics ------------------------------------------------
      
      Items with primary-loading gap < <num>:
      * V11: F2 = <num>, F3 = <num>
      
      
      -- Variances Accounted for -----------------------------------------------------
      
                           F1 F2 F3
      SS loadings <num> <num> <num>
      Prop Tot Var <num> <num> <num>
      Cum Prop Tot Var <num> <num> <num>
      Prop Comm Var <num> <num> <num>
      Cum Prop Comm Var <num> <num> <num>
      
      -- Model Fit -------------------------------------------------------------------
      
      CAF: <num>
      SRMR: <num>
      df: 102
      
      -- Residual Diagnostics --------------------------------------------------------
      
      Residual cutoff: |r| > <num>
      Number of large residuals: 0
      Largest absolute residual: <num>
      
      No absolute residuals > <num> occurred.
      
      Inspect the residual matrix for details (e.g., with residuals()).

# summary.efa_mi output is stable (ML, unrotated)

    Code
      print(summary(pooled_none))
    Output
      
      Pooled EFA across 3 imputations performed with estimator = 'ML' and
        rotation = 'none'.
      Pooling settings: align_unrotated = 'signed_tucker_congruence',
        fit_pool_method = 'D2'.
      
      -- Pooled Model Diagnostics ----------------------------------------------------
      
      Factors: 1
      Variables: 8
      N: 810
      Imputations: 3
      Pooling: align_unrotated = 'signed_tucker_congruence', fit_pool_method = 'D2'
      Heywood cases: 0
      Cross-loading items (|loading| >= <num>): 0
      Items without salient loading (|loading| >= <num>): 0
      Factors with fewer than 3 salient indicators: 0
      Items with primary-loading gap < <num>: 0
      Largest |residual|: <num>
      
      -- Unrotated Loadings ----------------------------------------------------------
      
                  F1    h2    u2
      fun <num> <num> <num>
      friends <num> <num> <num>
      enjoy <num> <num> <num>
      hurt <num> <num> <num>
      part <num> <num> <num>
      commonly <num> <num> <num>
      chances <num> <num> <num>
      attracted <num> <num> <num>
      
      -- Variances Accounted for -----------------------------------------------------
      
                      F1
      SS loadings <num>
      Prop Tot Var <num>
      
      -- Model Fit -------------------------------------------------------------------
      
      D2-pooled χ²(20) = <num>, p = <num>
      CFI (avg. over imputations): <num>
      TLI (avg. over imputations): <num>
      RMSEA [90% CI]: <num> [ <num>; <num>]
      AIC: <num>
      BIC: <num>
      ECVI: <num>
      CAF: <num>
      SRMR: <num>
      Note: the pooled χ² is the D2 statistic; its p uses the D2 reference F(20, <num>),
      not the χ²(20) tail.
      Note: CFI and TLI are averaged over the imputations, not formed from the
      separately pooled model and baseline statistics in `mi_diagnostics`.
      
      -- Residual Diagnostics --------------------------------------------------------
      
      Residual cutoff: |r| > <num>
      Number of large residuals: 0
      Largest absolute residual: <num>
      
      No absolute residuals > <num> occurred.
      
      Inspect the residual matrix for details (e.g., with residuals()).

