Changes in version 0.7.1.9000 Bug Fixes Changes in version 0.7.1 (2026-05-08) Changes to Functions - EFA(): Added randomStarts argument passed to GPArotation functions, as suggested by Coen Bernaards. - FACTOR_SCORES(): Added rho argument, thanks to Andreas Soteriades. - EFA_POOLED(): Fixed issue that could lead to averaged Phi not being symmetric. Changes in version 0.7.0 (2026-04-30) New Functions - MAP() computes the Velicer MAP criterion (both TR2 and TR4). - PROCRUSTES() to perform orthogonal and oblique Procrustes / target rotation. - CONSENSUS_PROCRUSTES() to perform Procrustes on a list of targets to obtain a common target. - residuals.EFA() to extract and print residuals and, if computed, standardized residuals. - EFA_POOLED() to run EFA on a list of multiple imputated datasets and pool the results. Thanks to Andreas Soteriades for the suggestion and first implementation. - print.EFA_POOLED(), print method adapted from print.EFA() Changes to Functions - N_FACTORS() can also compute the MAP criterion. - EFA(): - Now returns and prints residuals and, if SEs are computed, standardized residuals. - Calculates and prints RMSR. - Can calculate bootstrap standard errors and CIs of parameters and fit indices. - print.EFA() now prints more information. Bug Fixes - Fixed a bug in OMEGA() that led to incorrect omega, H, and ECV values for lavaan bifactor models. Tnanks to Christopher D. King for bug report and suggested fix. - Small fix in the documentation of EFA_AVERAGE(). - Fixed incorrect calculation of RMSEA in EFA(). Changes in version 0.6.1 (2025-07-30) Changes to Functions - EKC(): Now correctly returns the number of factors based on the first time the eigenvalues drop below the references values. Changes in version 0.6.0 (2025-06-19) New Functions - Added NEST() to perform the Next Eigenvalue Sufficiency Test (Achim, 2017). Changes to Functions - EKC(): The implementation based on Auerswald and Moshagen (2019) used in previous versions differed from the original implementation by Braeken and van Assen (2017). Now both versions are implemented and can be selected with the new type argument. Thanks to Luis Eduardo Garrido for pointing this out and to Johan Braeken for sharing sample code, based on which the original version is now implemented. - N_FACTORS(): - Updated default settings to only use often used and well performing factor retention methods (others, like the Kaiser Guttman criterion can still be used). - Added NEST as additional factor retention method. - New arguments: ekc_type, alpha_nest, and n_datasets_nest to account for the changes in EKC() and to control NEST(). Changes in version 0.5.0 (2025-05-23) Changes to Functions - print.EFA(): - Now returns explained variance from rotated, rather than unrotated solution, if a rotation was performed. - Now prints communalities and uniquenesses in loading/pattern matrix - EFA(): Calculate and return model implied correlation matrix. Changes in version 0.4.6 (2025-03-21) General - Small change in test of .gof(): Changed some tests to take care of the ATLAS issue when using R-devel on x86_64 Fedora 34 Linux with alternative BLAS/LAPACK. Changes in version 0.4.5 (2024-12-22) Bug Fixes - Updated OMEGA() to accommodate changes in the upcoming version of psych::schmid() Changes in version 0.4.4 (2023-01-06) Changes to Functions - print.EFA(): Added arguments cutoff, digits and max_name_length that are passed to print.LOADINGS(). - print.LOADINGS(): New Argument max_name_length to control the maximum length of the displayed variable names (names longer than this will be cut on the right side). Previously, this was fixed to 10 (which is now the default). Misc - Updated a test of a helper function (.gof()) that threw an error when using R-devel on x86_64 Fedora 36 Linux with alternative BLAS/LAPACK. - added dontrun to examples of EFA_AVERAGE() and its print and plot methods as these were causing issues on R-oldrel which were not directly related to EFAtools and thus could not be fixed from within the package. Changes in version 0.4.3 (2022-10-02) Changes to Functions - .gof(): Changed the helper function to take care of the MKL issue when using R-devel on x86_64 Fedora 34 Linux with alternative BLAS/LAPACK. Changes in version 0.4.2 (2022-09-27) Changes to Functions - .is_cormat(): Changed the helper function to better detect wheter a matrix is a correlation matrix. - PARALLEL(): Added a check, testing whether N > n_vars and throw an error if this is not the case. Bug Fixes - Fixed some tests due to upcoming changes in the psych package which EFAtools depends on. Changes in version 0.4.1 (2022-04-24) Bug Fixes - Minor fixes in tests to solve problems on macOS m1. Changes in version 0.4.0 (2022-03-21) Changes to Functions - EFA(): Changed error to warning when model is underidentified. This allows the Schmid-Leiman transformation to be performed on a two-factor solution. - OMEGA(): Added calculation of additional indices of interpretive relevance (H index, explained common variance [ECV], and percent of uncontaminated correlations [PUC]). This is optional and can be avoided by setting add_ind = FALSE. Bug Fixes - CD(): Added na.omit() to remove missing values from raw data to avoid an error in the comparison-data procedure. Changes in version 0.3.1 (2021-03-27) General - When testing for whether a matrix is singular and thus smoothing should be done, test against .Machine$double.eps^.6 instead of 0, as suggested by Florian Scharf. Changes to Functions - EFA(): - Added warnings if type = "SPSS" was used with method = "ML" or method = "ULS", or with a rotation other than none, varimax or promax. - Avoided smoothing of non-positive definite correlation matrices if type = "SPSS" is used. - Use Moore-Penrose Pseudo Inverse in computation of SMCs if type = "psych" is used, by calling psych::smc(). - Use varimax_type = "kaiser" if type = "EFAtools" is used with varimax or promax. Bug Fixes - EFA_AVERAGE(): - Added future.seed = TRUE to call to future.apply::future_lapply() to prevent warnings. - Fixed test for Heywood cases from testing whether a communality or loading is greater than .998, to only test whether communalities exceed 1 + .Machine$double.eps - print.EFA(): Fixed test for Heywood cases from testing whether a communality or loading is greater than .998, to only test whether communalities exceed 1 + .Machine$double.eps - OMEGA(): Small bugfix when lavaan second-order model is given as input Changes in version 0.3.0 (2020-11-04) General - Added examples for EFA_AVERAGE() to readme and the EFAtools vignette - Updated examples in readme and vignettes according to the updated OMEGA function New Functions - Added function EFA_AVERAGE() and respective print and plot methods, to allow running many EFAs across different implementations to obtain an average solution and test the stability of the results. Changes to Functions - EFA(): Defaults that were previously set to NULL are now mostly set to NA. This was necessary for EFA_AVERAGE() to work correctly. - PARALLEL(): Rewrote the generation of random data based eigenvalues to be more stable when SMCs are used. - OMEGA(): Changed expected input for argument factor_corres from vector to matrix. Can now be a logical matrix or a numeric matrix with 0's and 1's of the same dimensions as the matrix of group factor loadings. This is more flexible and allows for cross-loadings. Changes in version 0.2.0 (2020-09-17) General - Created new vignette Replicate_SPSS_psych to show replication of original psych and SPSS EFA solutions with EFAtools. New Functions - Added function FACTOR_SCORES() to calculate factor scores from a solution from EFA(). This is just a wrapper for the psych::factor.scores function. - Added function SCREE() that does a scree plot. Also added respective print and plot methods. Changes to Functions - CD(): Added check for whether entered data is a tibble, and if so, convert to vanilla data.frame to avoid breaking the procedure. - EFA(): - Updated the EFAtools type in PAF and Promax. - Added p value for chi square value in output (calculated for ML and ULS fitting methods). - Updated the SPSS varimax implementation to fit SPSS results more closely. - Created an argument "varimax_type" that is set according to the specified type, but that can also be specified individually. With type R psych and EFAtools, the stats::varimax is called by default (varimax_type = "svd"), with type SPSS, the reproduced SPSS varimax implementation is used (varimax_type = "kaiser"). - Renamed the kaiser argument (controls if a Kaiser normalization is done or not) into normalize to avoid confusion with the varimax_type argument specifications. - ML(): Changed default start method to "psych". - N_FACTORS(): - Added option to do a scree plot if "SCREE" is included in the criteria argument. - Added a progress bar. - OMEGA(): Now also works with a lavaan second-order solution as input. In this case, it does a Schmid-Leiman transformation based on the first- and second-order loadings first and computes omegas based on this Schmid-Leiman solution. - SL(): Now also works with a lavaan second-order solution as input (first- and second-order loadings taken directly from lavaan output). Bug Fixes - .get_compare_matrix(): Fixed a bug that occurred when names of data were longer than n_char - COMPARE(): Fixed a bug that occurred when using reorder = "names". - EFA(): RMSEA is now set to 1 if it is > 1. - HULL(): Fixed a bug that occurred when no factors are located on the HULL - KMO(): Fixed a bug that the inverse of the correlation matrix was not taken anew after smoothing was necessary. - PARALLEL(): - Fixed a bug that occurred when using decision_rule = "percentile" - Relocated error messages that were not evaluated if no data were entered (and should be) - print.COMPARE(): Fixed a bug that occurred when using print_diff = FALSE in COMPARE(). - print.KMO(): Fixed a bug that printed two statements instead of one, when the KMO value was < .6. Minor Changes - OMEGA() and SL(): Added an error message if the entered term in g_name is invalid (i.e., it cannnot be found among the factor names of the entered lavaan solution). Changes in version 0.1.1 (2020-07-13) Minor Changes - Added an error message in PARALLEL() if no solution has been found after 25 tries. Bug Fixes - Updated different tests - Deleted no longer used packages from Imports and Suggests in DESCRIPTION - PARALLEL(): fixed a bug in indexing if method "EFA" was used. Changes in version 0.1.0 (2020-07-07) - Added a NEWS.md file to track changes to the package. - Initial CRAN submission