Skip to contents

NEST uses many synthetic datasets to generate reference eigenvalues against which to compare the empirical eigenvalues. This is similar to parallel analysis, but other than parallel analysis, NEST does not just rely on synthetic eigenvalues based on an identity matrix as null model. It was introduced by Achim (2017), see also Brandenburg and Papenberg (2024) and Caron (2025) for further simulation studies including NEST.

Usage

efa_nest(
  x,
  N = NA,
  alpha = 0.05,
  use = c("pairwise.complete.obs", "all.obs", "complete.obs", "everything",
    "na.or.complete"),
  cor_method = c("pearson", "spearman", "kendall", "poly", "tetra"),
  n_datasets = 1000,
  estimate_control = NULL,
  ...
)

Source

Achim, A. (2017). Testing the number of required dimensions in exploratory factor analysis. The Quantitative Methods for Psychology, 13(1), 64–74. https://doi.org/10.20982/tqmp.13.1.p064

Brandenburg, N., & Papenberg, M. (2024). Reassessment of innovative methods to determine the number of factors: A simulation-based comparison of exploratory graph analysis and Next Eigenvalue Sufficiency Test. Psychological Methods, 29(1), 21–47. https://doi.org/10.1037/met0000527

Caron, P.-O. (2025). A Comparison of the Next Eigenvalue Sufficiency Test to Other Stopping Rules for the Number of Factors in Factor Analysis. Educational and Psychological Measurement, Online-first publication. https://doi.org/10.1177/00131644241308528

Arguments

x

data.frame or matrix. Dataframe or matrix of raw data or matrix with correlations.

N

numeric. The number of observations. Only needed if x is a correlation matrix.

alpha

numeric. The alpha level to use (i.e., 1-alpha percentile of eigenvalues is used for reference values).

use

character. Passed to stats::cor() if raw data is given as input. Default is "pairwise.complete.obs".

cor_method

character. One of "pearson", "spearman", or "kendall", passed to stats::cor(). "poly" and "tetra" are not supported because NEST compares the data against simulated continuous reference data. Default is "pearson".

n_datasets

numeric. The number of datasets to simulate. Default is 1000.

estimate_control

an estimate_control() object with the estimation settings for the efa_fit() reference-model fits. NULL (default) uses the efa_fit() defaults. The reference models are unrotated, so no rotation settings apply.

...

Additional arguments passed to efa_fit(). For example, estimator, to change the estimator (default is "PAF"). PAF is more robust, but it will take longer compared to the other estimators available ("ML" and "ULS"). The estimation tuning knobs are not passed here; they live in estimate_control.

Value

An object of class efa_retention (see print.efa_retention() for the print method). Its main fields are:

n_factors

A named numeric vector ("NEST") with the suggested number of factors according to the NEST procedure.

results

A list with a single record holding the empirical eigenvalues and the reference eigenvalues.

settings

A list of control settings used.

Details

NEST compares the first empirical eigenvalue against the first eigenvalues of n_dataset synthetic datasets based on a null model (i.e., with uncorrelated variables; same as in parallel analysis, see efa_parallel()). The following eigenvalues are compared against synthetic datasets based on an EFA-model with one fewer factors than the position of the respective empirical eigenvalue. E.g, the second empirical eigenvalue is compared against synthetic data based on a one-factor model. In each comparison the \(k\)-th empirical eigenvalue is tested against the \(k\)-th largest eigenvalue of the synthetic datasets. The alpha-level defines against which percentile of the synthetic eigenvalue distribution to compare the empirical eigenvalues against, i.e., an alpha of .05 (the default) uses the 95th percentile as reference value.

The number of factors tested is capped at \(\lfloor 0.8 \times p \rfloor\) (with \(p\) the number of variables; Achim, 2017) and additionally limited so that the \((k - 1)\)-factor reference model used at each step stays over-identified. If no empirical eigenvalue falls at or below its reference within this range, every tested factor is accepted and this capped number is returned.

For details on the method, including simulation studies, see Achim (2017), Brandenburg and Papenberg (2024), and Caron (2025).

The efa_nest function can also be called together with other factor retention criteria in the efa_retain() function.

See also

efa_retain() as a wrapper function for this and the other factor retention criteria.

Other factor retention criteria: efa_cd(), efa_ekc(), efa_hull(), efa_kgc(), efa_map(), efa_parallel(), efa_retain(), efa_scree(), efa_smt()

Examples

# \donttest{
# with correlation matrix
efa_nest(test_models$baseline$cormat, N = 500)
#> ── Next Eigenvalue Sufficiency Test ────────────────────────────────────────────
#> 
#> • Suggested number of factors: 3

# with raw data
efa_nest(GRiPS_raw)
#>  `x` is not a correlation matrix; computing correlations from the raw data.
#> ── Next Eigenvalue Sufficiency Test ────────────────────────────────────────────
#> 
#> • Suggested number of factors: 1
# }