`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`

.

`CD()`

: Added`na.omit()`

to remove missing values from raw data to avoid an error in the comparison-data procedure.

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

`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`

.

- Added warnings if

`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

- Added
`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

- Added examples for
`EFA_AVERAGE()`

to readme and the EFAtools vignette - Updated examples in readme and vignettes according to the updated
`OMEGA`

function

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

`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.

- Created new vignette
*Replicate_SPSS_psych*to show replication of original`psych`

and`SPSS`

EFA solutions with`EFAtools`

.

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

`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.

- Added option to do a scree plot if “SCREE” is included in the
`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).

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

- Fixed a bug that occurred when using
`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.

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

- Added an error message in
`PARALLEL()`

if no solution has been found after 25 tries.

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.

- Added a
`NEWS.md`

file to track changes to the package. - Initial CRAN submission