tests/testthat/_snaps/efa_mi.md

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()).


Try the EFAtools package in your browser

Any scripts or data that you put into this service are public.

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