# a whole retention object as n_factors names the component that holds the counts

    Code
      cat(bad_n_factors(ret))
    Output
      `n_factors` must be a single count, not an <efa_retain> object.
      i Its `$n_factors` holds 3 suggested counts; supply one of them.

---

    Code
      cat(bad_n_factors(suppressMessages(efa_ekc(cm, N = 500))))
    Output
      `n_factors` must be a single count, not an <efa_retention> object.
      i Its `$n_factors` holds 1 suggested count; supply it.

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

    Code
      print(efa_psych)
    Output
      
      EFA performed with estimator = 'PAF' and rotation = 'promax'.
      
      -- 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 output is stable (ML, promax)

    Code
      print(efa_ml_moderate)
    Output
      
      EFA performed with estimator = 'ML' and rotation = 'promax'.
      
      -- 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 -------------------------------------------------------------------
      
      χ²(102) = <num>, p = <num>
      CFI: <num>
      TLI: <num>
      RMSEA [90% CI]: <num> [ <num>; <num>]
      AIC: <num>
      BIC: <num>
      ECVI: <num>
      CAF: <num>
      SRMR: <num>

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

    Code
      print(summary(efa_psych))
    Output
      
      EFA performed with estimator = 'PAF' and rotation = 'promax'.
      
      -- Model Diagnostics -----------------------------------------------------------
      
      Factors: 3
      Variables: 18
      N: 500
      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 output is stable (ML, promax)

    Code
      print(summary(efa_ml_moderate))
    Output
      
      EFA performed with estimator = 'ML' and rotation = 'promax'.
      
      -- Model Diagnostics -----------------------------------------------------------
      
      Factors: 3
      Variables: 18
      N: 500
      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>
      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>
      
      -- 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 -------------------------------------------------------------------
      
      χ²(102) = <num>, p = <num>
      CFI: <num>
      TLI: <num>
      RMSEA [90% CI]: <num> [ <num>; <num>]
      AIC: <num>
      BIC: <num>
      ECVI: <num>
      CAF: <num>
      SRMR: <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/summary.efa omit the inapplicable tables for a rotated single factor

    Code
      print(efa_1fac)
    Output
      
      EFA performed with estimator = 'PAF' and rotation = 'promax'.
      
      -- Rotated Loadings ------------------------------------------------------------
      
            F1    h2    u2
      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>
      
      -- Variances Accounted for -----------------------------------------------------
      
      No variance-accounted table available.
      
      -- Model Fit -------------------------------------------------------------------
      
      CAF: <num>
      SRMR: <num>
      df: 135

---

    Code
      print(summary(efa_1fac))
    Output
      
      EFA performed with estimator = 'PAF' and rotation = 'promax'.
      
      -- Model Diagnostics -----------------------------------------------------------
      
      Factors: 1
      Variables: 18
      N: 500
      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>
      
      -- Rotated Loadings ------------------------------------------------------------
      
            F1    h2    u2
      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>
      
      -- Variances Accounted for -----------------------------------------------------
      
      No variance-accounted table available.
      
      -- Model Fit -------------------------------------------------------------------
      
      CAF: <num>
      SRMR: <num>
      df: 135
      
      -- Residual Diagnostics --------------------------------------------------------
      
      Residual cutoff: |r| > <num>
      Number of large residuals: 9
      Largest absolute residual: <num>
      
      Largest residuals:
      * V10 ~~ V12: <num>
      * V1 ~~ V6: <num>
      * V9 ~~ V10: <num>
      * V14 ~~ V17: <num>
      * V8 ~~ V10: <num>
      * V1 ~~ V4: <num>
      * V13 ~~ V17: <num>
      * V17 ~~ V18: <num>
      * V4 ~~ V5: <num>
      
      Inspect the residual matrix for details (e.g., with residuals()).

# the Heywood warning names the affected variables

    Code
      for (est in c("ML", "ULS")) {
        cat("--", est, "--\n")
        withCallingHandlers(efa_fit(R_bnd, 1, N = 200, estimator = est), efa_heywood = function(
          w) cat(conditionMessage(w), "\n"), warning = function(w) invokeRestart(
          "muffleWarning"))
      }
    Output
      -- ML --
      Heywood case detected for "item1": the solution is improper (a communality at or above 1, or a uniqueness fixed at the estimation boundary).
      i Interpret the affected loadings and uniquenesses with caution. 
      -- ULS --
      Heywood case detected for "item1": the solution is improper (a communality at or above 1, or a uniqueness fixed at the estimation boundary).
      i Interpret the affected loadings and uniquenesses with caution. 

