Replicate SPSS and R psych results with EFAtools

This vignette demonstrates the replication of exploratory factor analysis (EFA) results (specifically, principal axis factoring [PAF] with subsequent promax rotation) from the SPSS FACTOR algorithm and from the fa() function from the psych R package. For a general introduction to the EFAtools package, please see the EFAtools vignette. Same as in the EFAtools vignette, we will use the DOSPERT data set for this demonstration as well (see ?DOSPERT for details).

First load the needed packages EFAtools and psych (original SPSS results for some data sets are available in the EFAtools package).

library(psych)
#> 
#> Attache Paket: 'psych'
#> Das folgende Objekt ist maskiert 'package:EFAtools':
#> 
#>     KMO
library(EFAtools)

Principal Axis Factoring

First, we will fit an EFA with PAF and without rotation using the EFA function from EFAtools using type = "psych" and type = "SPSS". These types are intended to mimic the R psych and SPSS results, respectively.

# EFAtools::EFA with type = "psych" without rotation
EFA_psych_paf <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                     type = "psych")
# EFAtools::EFA with type = "SPSS" without rotation
EFA_SPSS_paf <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                    type = "SPSS")

As a next step, we fit an EFA with the same configurations (PAF and no rotation) using the fa function from psych with the same data set.

# psych::fa without rotation
psych_paf <- psych::fa(DOSPERT$cormat, nfactors = 10, n.obs = DOSPERT$N,
                       fm = "pa", rotate = "none")

Now we can compare results from EFA with the respective types to the original R psych and SPSS results using the same data set. This is easily done using the COMPARE function available in the EFAtools package.

# Compare loadings from psych::fa and EFAtools::EFA with type = "psych"
COMPARE(EFA_psych_paf$unrot_loadings, psych_paf$loadings)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0000]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 12
#> Minimum number of decimals provided: 18
#> 
#>        F1      F2      F3      F4      F5      F6      F7      F8      F9     F10  
#> 01_s -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 02_r  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 03_g  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 04_h  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 05_e  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 06_r  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 07_i  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 08_h -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 09_e  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 10_s -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 11_g -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 12_e  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 13_e  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 14_e  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 15_r  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 16_s  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 17_r  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 18_i -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 19_s  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 20_e  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 21_r  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 22_g  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 23_s  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 24_i -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 25_e  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 26_s  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
#> 27_h  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 28_e  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 29_h  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 30_i -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 31_r  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 32_h  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 33_g -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 34_s  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 35_s  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 36_h -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000
#> 37_r  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 38_r  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 39_h -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 40_h  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000


# Compare loadings from SPSS and EFAtools::EFA with type = "SPSS"
COMPARE(EFA_SPSS_paf$unrot_loadings, SPSS_27$DOSPERT$paf_load)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0000]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 12
#> Minimum number of decimals provided: 18
#> 
#>        F1      F2      F3      F4      F5      F6      F7      F8      F9     F10  
#> 01_s  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
#> 02_r -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 03_g  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 04_h -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 05_e -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 06_r  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 07_i  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 08_h  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 09_e  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 10_s  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 11_g -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 12_e  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 13_e -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 14_e  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 15_r -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 16_s  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 17_r  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 18_i  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 19_s -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 20_e -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 21_r -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 22_g  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 23_s  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 24_i -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 25_e  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 26_s  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 27_h  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 28_e  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 29_h  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 30_i  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 31_r -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 32_h  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 33_g  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 34_s  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000
#> 35_s  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 36_h  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 37_r  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 38_r  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 39_h  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 40_h  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000

To see that this close match was not trivial, we can look at the match between the original R psych and SPSS solutions.

# Compare loadings from psych::fa and SPSS
COMPARE(psych_paf$loadings, SPSS_27$DOSPERT$paf_load)
#> Mean [min, max] absolute difference:  0.0002 [ 0.0000,  0.0022]
#> Median absolute difference:  0.0001
#> Max decimals where all numbers are equal: 1
#> Minimum number of decimals provided: 18
#> 
#>       PA1     PA2     PA3     PA4     PA5     PA6     PA7     PA8     PA9     PA10 
#> 01_s  0.0000 -0.0000 -0.0001  0.0000  0.0001 -0.0002  0.0001 -0.0000 -0.0003  0.0002
#> 02_r  0.0000 -0.0000 -0.0000  0.0000 -0.0001 -0.0002  0.0000  0.0001  0.0004 -0.0000
#> 03_g -0.0000  0.0000  0.0000 -0.0000 -0.0001 -0.0001 -0.0001  0.0000  0.0001  0.0001
#> 04_h  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0001  0.0001  0.0014 -0.0008
#> 05_e  0.0000  0.0000 -0.0001 -0.0001 -0.0001  0.0003 -0.0002 -0.0001  0.0007  0.0005
#> 06_r  0.0000 -0.0000 -0.0000  0.0000 -0.0001  0.0000  0.0001 -0.0000 -0.0007  0.0002
#> 07_i  0.0000 -0.0000  0.0000  0.0001  0.0001 -0.0001  0.0001 -0.0000  0.0006 -0.0004
#> 08_h  0.0000  0.0000 -0.0000 -0.0000  0.0001  0.0001 -0.0006  0.0000  0.0022 -0.0001
#> 09_e -0.0000  0.0000 -0.0000 -0.0001 -0.0001  0.0001  0.0001 -0.0000 -0.0002 -0.0000
#> 10_s  0.0000 -0.0000 -0.0001 -0.0000  0.0001 -0.0001  0.0001 -0.0000  0.0006 -0.0001
#> 11_g  0.0000  0.0000  0.0000 -0.0001 -0.0001  0.0000 -0.0003 -0.0000  0.0001  0.0004
#> 12_e  0.0000  0.0000 -0.0000 -0.0000  0.0001 -0.0002  0.0005  0.0002  0.0012 -0.0012
#> 13_e  0.0000  0.0000 -0.0001 -0.0001 -0.0001  0.0003 -0.0001 -0.0001 -0.0001  0.0005
#> 14_e  0.0000  0.0000 -0.0000 -0.0001 -0.0001  0.0003 -0.0002 -0.0001  0.0003  0.0005
#> 15_r  0.0000 -0.0000 -0.0001 -0.0000 -0.0001 -0.0000 -0.0000 -0.0000 -0.0001  0.0001
#> 16_s  0.0000 -0.0000 -0.0001 -0.0000  0.0001 -0.0001 -0.0002 -0.0000  0.0003  0.0003
#> 17_r  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0005  0.0004
#> 18_i  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0001  0.0003 -0.0000 -0.0001 -0.0003
#> 19_s  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0002  0.0004  0.0000 -0.0010 -0.0002
#> 20_e  0.0000 -0.0000 -0.0001  0.0000 -0.0001  0.0002 -0.0009  0.0000 -0.0004  0.0011
#> 21_r -0.0000 -0.0000 -0.0000  0.0001 -0.0000  0.0000 -0.0000  0.0000 -0.0006  0.0003
#> 22_g  0.0000  0.0000  0.0001 -0.0000 -0.0000 -0.0001 -0.0001  0.0000  0.0002 -0.0000
#> 23_s -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0002  0.0006 -0.0000 -0.0009 -0.0004
#> 24_i  0.0000 -0.0000 -0.0000  0.0001  0.0001 -0.0002  0.0002  0.0001  0.0001 -0.0004
#> 25_e -0.0000  0.0000 -0.0001 -0.0001 -0.0001  0.0001  0.0000 -0.0000  0.0007 -0.0003
#> 26_s  0.0000 -0.0000 -0.0001 -0.0000  0.0000 -0.0002  0.0003  0.0000  0.0003 -0.0006
#> 27_h -0.0002  0.0002  0.0007  0.0003  0.0005 -0.0012  0.0022  0.0003 -0.0019 -0.0013
#> 28_e  0.0000 -0.0000 -0.0001 -0.0001 -0.0001  0.0001 -0.0001 -0.0000 -0.0005  0.0005
#> 29_h -0.0000  0.0000  0.0001 -0.0000  0.0001  0.0002 -0.0005 -0.0001 -0.0009 -0.0002
#> 30_i  0.0000 -0.0000 -0.0000  0.0001  0.0001 -0.0000 -0.0001 -0.0000  0.0000  0.0001
#> 31_r  0.0000 -0.0000  0.0000  0.0001 -0.0000  0.0000  0.0002  0.0000 -0.0004  0.0000
#> 32_h  0.0000 -0.0000  0.0000 -0.0001 -0.0001  0.0003  0.0003 -0.0002 -0.0014 -0.0001
#> 33_g  0.0000  0.0000  0.0000 -0.0001 -0.0001  0.0001 -0.0002 -0.0001 -0.0004  0.0004
#> 34_s  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0001 -0.0000 -0.0001 -0.0008  0.0001
#> 35_s  0.0000 -0.0000 -0.0001  0.0000  0.0001 -0.0002  0.0003 -0.0000 -0.0010 -0.0002
#> 36_h -0.0000  0.0000  0.0000  0.0000  0.0001  0.0001 -0.0002 -0.0001 -0.0001  0.0002
#> 37_r -0.0000 -0.0000  0.0000  0.0001  0.0001  0.0001 -0.0001 -0.0001  0.0010 -0.0002
#> 38_r  0.0000 -0.0000  0.0001  0.0001  0.0001  0.0000  0.0001  0.0001  0.0007 -0.0003
#> 39_h  0.0000 -0.0000 -0.0000  0.0000  0.0001  0.0000 -0.0004  0.0000  0.0006  0.0000
#> 40_h  0.0000  0.0000 -0.0000 -0.0000  0.0001  0.0004 -0.0010 -0.0001  0.0003  0.0011

We can see that the solutions are slightly different, especially for the 9th and 10th factor. Although the differences are very small here, they can get quite large for other data sets, or get larger after rotation (see below).

Varimax Rotation

Now we confirmed the replication of PAF results without rotation, we can continue to compare rotated factor solutions. We start by comparing varimax rotated PAF solutions.

## Fit the models

# EFAtools::EFA with type = "psych" with varimax rotation
EFA_psych_var <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                     type = "psych", rotation = "varimax")
# EFAtools::EFA with type = "SPSS" with varimax rotation
EFA_SPSS_var <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                    type = "SPSS", rotation = "varimax")
# psych::fa with varimax rotation
psych_var <- psych::fa(DOSPERT$cormat, nfactors = 10, n.obs = DOSPERT$N,
                       fm = "pa", rotate = "varimax")

## Check replication of results

# Compare loadings from psych::fa and EFAtools::EFA with type = "psych"
COMPARE(EFA_psych_var$rot_loadings, psych_var$loadings)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0000]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 12
#> Minimum number of decimals provided: 18
#> 
#>        F1      F3      F2      F4      F5      F8      F6      F7      F9     F10  
#> 01_s -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 02_r  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000
#> 03_g  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 04_h  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 05_e  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 06_r -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 07_i  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 08_h  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 09_e  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 10_s  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000
#> 11_g -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 12_e  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 13_e  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 14_e  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 15_r  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 16_s  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 17_r  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 18_i -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 19_s  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 20_e  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 21_r  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 22_g -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 23_s -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 24_i  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 25_e  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 26_s  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 27_h  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000
#> 28_e  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 29_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 30_i  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 31_r -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 32_h -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 33_g -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 34_s  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 35_s -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000
#> 36_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 37_r  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 38_r  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 39_h  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 40_h  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000


# Compare loadings from SPSS and EFAtools::EFA with type = "SPSS"
COMPARE(EFA_SPSS_var$rot_loadings, SPSS_27$DOSPERT$var_load)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0000]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 2
#> Minimum number of decimals provided: 18
#> 
#>        F1      F3      F2      F4      F5      F8      F6      F7      F9     F10  
#> 01_s  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 02_r -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 03_g  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 04_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 05_e  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 06_r  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 07_i -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 08_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 09_e  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 10_s  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 11_g  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 12_e -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 13_e  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 14_e -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 15_r -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 16_s -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 17_r  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 18_i -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 19_s  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 20_e -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 21_r -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 22_g  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 23_s  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 24_i -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 25_e  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 26_s -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 27_h -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 28_e -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 29_h  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 30_i -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000
#> 31_r  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 32_h  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 33_g  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 34_s  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 35_s  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 36_h  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 37_r  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 38_r  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 39_h -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 40_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000


## Compare original results (just to see the difference)

# Compare loadings from psych::fa and SPSS
COMPARE(psych_var$loadings, SPSS_27$DOSPERT$var_load)
#> Mean [min, max] absolute difference:  0.0005 [ 0.0000,  0.0033]
#> Median absolute difference:  0.0002
#> Max decimals where all numbers are equal: 0
#> Minimum number of decimals provided: 18
#> 
#>       PA1     PA3     PA2     PA4     PA5     PA8     PA6     PA7     PA9     PA10 
#> 01_s  0.0001 -0.0002 -0.0001 -0.0000  0.0001 -0.0002  0.0007 -0.0001 -0.0004 -0.0028
#> 02_r  0.0001  0.0026 -0.0002 -0.0001  0.0002 -0.0017 -0.0000 -0.0000  0.0002 -0.0004
#> 03_g -0.0001  0.0007 -0.0000 -0.0000  0.0002 -0.0004 -0.0001  0.0001  0.0002 -0.0002
#> 04_h -0.0002  0.0009 -0.0000 -0.0001 -0.0001 -0.0009 -0.0001 -0.0000  0.0009 -0.0003
#> 05_e -0.0001 -0.0001 -0.0001 -0.0000 -0.0006 -0.0003  0.0007 -0.0004  0.0000 -0.0017
#> 06_r  0.0001  0.0010 -0.0001 -0.0001  0.0010 -0.0019 -0.0002  0.0004  0.0001 -0.0015
#> 07_i -0.0001  0.0000  0.0000 -0.0001 -0.0000 -0.0002  0.0001 -0.0001  0.0002 -0.0007
#> 08_h -0.0003  0.0003 -0.0000 -0.0001 -0.0012 -0.0002  0.0005 -0.0008  0.0006  0.0005
#> 09_e  0.0001  0.0003  0.0000  0.0000  0.0009 -0.0012 -0.0003  0.0005  0.0003 -0.0014
#> 10_s -0.0001 -0.0002 -0.0001 -0.0001 -0.0007  0.0000  0.0010 -0.0005 -0.0001 -0.0024
#> 11_g -0.0001  0.0003 -0.0000 -0.0000  0.0001 -0.0005  0.0002 -0.0001  0.0000 -0.0007
#> 12_e -0.0001  0.0003  0.0000 -0.0001  0.0004 -0.0009 -0.0002  0.0003  0.0008 -0.0013
#> 13_e  0.0001  0.0006 -0.0000  0.0000  0.0006 -0.0005  0.0000  0.0004  0.0002 -0.0019
#> 14_e -0.0000  0.0002  0.0000  0.0000 -0.0000 -0.0002  0.0001  0.0001  0.0001 -0.0006
#> 15_r  0.0001  0.0028 -0.0002 -0.0001  0.0003 -0.0012  0.0001  0.0000  0.0002 -0.0012
#> 16_s  0.0000  0.0005 -0.0001 -0.0001 -0.0002 -0.0001  0.0008 -0.0004 -0.0002 -0.0025
#> 17_r  0.0002  0.0012 -0.0001 -0.0001  0.0007 -0.0022 -0.0001  0.0001 -0.0000 -0.0009
#> 18_i -0.0000 -0.0000 -0.0000 -0.0000  0.0005 -0.0008  0.0000  0.0002  0.0000 -0.0014
#> 19_s  0.0002  0.0008 -0.0000 -0.0000  0.0016 -0.0012 -0.0005  0.0008  0.0001 -0.0024
#> 20_e  0.0005  0.0011  0.0000  0.0000  0.0014 -0.0011 -0.0010  0.0005  0.0001  0.0004
#> 21_r  0.0002  0.0020 -0.0001 -0.0001  0.0014 -0.0030 -0.0007  0.0005  0.0004 -0.0010
#> 22_g -0.0001  0.0003  0.0000 -0.0000  0.0003 -0.0004 -0.0002  0.0001  0.0003  0.0001
#> 23_s  0.0001  0.0002  0.0000 -0.0000  0.0011 -0.0007 -0.0001  0.0007  0.0000 -0.0025
#> 24_i  0.0001  0.0002 -0.0000  0.0000  0.0003  0.0001 -0.0003  0.0001 -0.0000 -0.0002
#> 25_e -0.0001  0.0006 -0.0000 -0.0000  0.0002 -0.0005  0.0000  0.0002  0.0006 -0.0013
#> 26_s -0.0000  0.0011 -0.0000 -0.0001  0.0006 -0.0006  0.0000  0.0004  0.0005 -0.0022
#> 27_h  0.0001  0.0001 -0.0000  0.0001  0.0004 -0.0004  0.0004  0.0001 -0.0027 -0.0008
#> 28_e  0.0003  0.0010  0.0000  0.0000  0.0016 -0.0013 -0.0009  0.0009  0.0004 -0.0012
#> 29_h -0.0002  0.0004  0.0000 -0.0000  0.0000 -0.0004  0.0007 -0.0005  0.0002 -0.0022
#> 30_i  0.0001  0.0002  0.0000  0.0000  0.0003 -0.0000 -0.0002 -0.0000 -0.0002 -0.0001
#> 31_r  0.0001  0.0012 -0.0002 -0.0002  0.0006 -0.0033  0.0002 -0.0000  0.0001 -0.0021
#> 32_h  0.0000  0.0009 -0.0000 -0.0000  0.0009 -0.0013  0.0001  0.0006  0.0001 -0.0018
#> 33_g -0.0000 -0.0001  0.0000  0.0000  0.0003 -0.0003  0.0002  0.0001 -0.0000 -0.0010
#> 34_s  0.0001  0.0004  0.0001 -0.0000  0.0011 -0.0006 -0.0005  0.0006  0.0002 -0.0009
#> 35_s  0.0002  0.0009  0.0000 -0.0001  0.0019 -0.0014 -0.0005  0.0009  0.0003 -0.0032
#> 36_h -0.0000  0.0001 -0.0000 -0.0001 -0.0003 -0.0005  0.0006 -0.0004 -0.0002 -0.0009
#> 37_r -0.0002 -0.0005 -0.0001 -0.0002 -0.0004 -0.0029  0.0006 -0.0006  0.0004 -0.0016
#> 38_r -0.0001 -0.0001 -0.0000 -0.0002  0.0001 -0.0030  0.0003 -0.0003  0.0004 -0.0016
#> 39_h  0.0000  0.0012  0.0000 -0.0001  0.0004 -0.0014 -0.0003  0.0000  0.0006 -0.0003
#> 40_h  0.0001 -0.0003  0.0001 -0.0000 -0.0003 -0.0002  0.0002 -0.0004 -0.0001  0.0007

Promax Rotation

Finally, we can do the same for promax rotated results as well.

## Fit the models

# EFAtools::EFA with type = "psych" with promax rotation
EFA_psych_pro <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                     type = "psych", rotation = "promax")
# EFAtools::EFA with type = "SPSS" with promax rotation
EFA_SPSS_pro <- EFA(DOSPERT$cormat, n_factors = 10, N = DOSPERT$N,
                    type = "SPSS", rotation = "promax")
# psych::fa with promax rotation
psych_pro <- psych::fa(DOSPERT$cormat, nfactors = 10, n.obs = DOSPERT$N,
                       fm = "pa", rotate = "Promax")

## Check replication of results

# Compare loadings from psych::fa and EFAtools::EFA with type = "psych"
COMPARE(EFA_psych_pro$rot_loadings, psych_pro$loadings)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0000]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 11
#> Minimum number of decimals provided: 18
#> 
#>        F1      F4      F3      F2      F8      F5      F9     F10      F7      F6  
#> 01_s -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 02_r  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 03_g -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 04_h  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 05_e -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 06_r  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000
#> 07_i -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 08_h  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 09_e  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 10_s -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 11_g -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 12_e  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 13_e  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 14_e -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 15_r -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 16_s -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 17_r  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 18_i -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 19_s  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 20_e  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000
#> 21_r  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 22_g  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 23_s  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 24_i  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 25_e  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 26_s  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 27_h  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000
#> 28_e  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 29_h -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 30_i  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 31_r -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 32_h -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 33_g -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 34_s  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 35_s  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 36_h -0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 37_r -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 38_r  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 39_h -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 40_h  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000


# Compare loadings from SPSS and EFAtools::EFA with type = "SPSS"
COMPARE(EFA_SPSS_pro$rot_loadings, SPSS_27$DOSPERT$pro_load)
#> Mean [min, max] absolute difference:  0.0000 [ 0.0000,  0.0001]
#> Median absolute difference:  0.0000
#> Max decimals where all numbers are equal: 2
#> Minimum number of decimals provided: 18
#> 
#>        F1      F3      F2      F4      F5      F8      F6      F7      F9     F10  
#> 01_s  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0001
#> 02_r -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000
#> 03_g  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 04_h -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000
#> 05_e  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 06_r -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000
#> 07_i  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 08_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 09_e -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 10_s  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 11_g  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 12_e -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000
#> 13_e -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 14_e -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 15_r  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 16_s  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 17_r -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 18_i  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 19_s -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 20_e -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0001
#> 21_r -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000
#> 22_g -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 23_s -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0001
#> 24_i -0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000
#> 25_e -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000  0.0000  0.0000
#> 26_s -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 27_h -0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 28_e -0.0000  0.0000  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000
#> 29_h  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000
#> 30_i -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 31_r  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000
#> 32_h  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 33_g  0.0000 -0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 34_s -0.0000  0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000
#> 35_s -0.0000  0.0000 -0.0000  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0001
#> 36_h  0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000
#> 37_r  0.0000  0.0000 -0.0000 -0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000 -0.0000
#> 38_r  0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000  0.0000  0.0000  0.0000 -0.0000
#> 39_h -0.0000  0.0000  0.0000  0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0000  0.0000
#> 40_h -0.0000 -0.0000  0.0000 -0.0000 -0.0000  0.0000 -0.0000 -0.0000 -0.0000  0.0001


## Compare original results (just to see the difference)

# Compare loadings from psych::fa and SPSS
COMPARE(psych_pro$loadings, SPSS_27$DOSPERT$pro_load)
#> Mean [min, max] absolute difference:  0.0196 [ 0.0000,  0.2404]
#> Median absolute difference:  0.0114
#> Max decimals where all numbers are equal: 0
#> Minimum number of decimals provided: 18
#> 
#>       PA1     PA3     PA2     PA4     PA8     PA5     PA10    PA7     PA6     PA9  
#> 01_s  0.0057  0.0068 -0.0101 -0.0131  0.0059  0.0211  0.0017 -0.0058 -0.0103 -0.0060
#> 02_r -0.0027  0.0070  0.0072  0.0223 -0.0818  0.0354  0.1056 -0.0108  0.0499 -0.0061
#> 03_g -0.0179 -0.0183 -0.0107  0.0324 -0.0152  0.0157  0.0087 -0.0040  0.0082 -0.0027
#> 04_h -0.0149 -0.0010  0.0070  0.0142 -0.0284  0.0135  0.0730 -0.0024  0.0218 -0.0012
#> 05_e -0.0656  0.0122 -0.0176 -0.0114  0.0014 -0.0626  0.0710  0.0299 -0.0118 -0.0104
#> 06_r  0.0152 -0.0044 -0.0083 -0.0013 -0.0153  0.0129 -0.0155  0.0018  0.0134 -0.0008
#> 07_i -0.0176  0.0037 -0.0190  0.0158  0.0014 -0.0115  0.0189  0.0050 -0.0101 -0.0003
#> 08_h -0.0363  0.0057  0.0039  0.0236 -0.0212  0.0058  0.1465 -0.0105 -0.0164 -0.0060
#> 09_e  0.0103 -0.0087 -0.0068 -0.0088  0.0114 -0.0086  0.0169  0.0089  0.0162 -0.0019
#> 10_s -0.0360  0.0155 -0.0119 -0.0067 -0.0069 -0.0047  0.0252  0.0082 -0.0185 -0.0068
#> 11_g -0.0233 -0.0165 -0.0163  0.0274 -0.0031  0.0086  0.0225 -0.0027 -0.0098 -0.0052
#> 12_e -0.0211 -0.0020 -0.0037  0.0155 -0.0063 -0.0031  0.0292 -0.0052  0.0338  0.0019
#> 13_e -0.0037 -0.0049 -0.0062 -0.0176 -0.0013 -0.0117  0.0407  0.0266  0.0081 -0.0080
#> 14_e -0.0257 -0.0036 -0.0070 -0.0031  0.0012 -0.0282  0.0522  0.0216 -0.0023 -0.0063
#> 15_r -0.0071  0.0027  0.0053  0.0119 -0.0842  0.0423  0.0352  0.0164  0.0323 -0.0063
#> 16_s  0.0042  0.0064 -0.0037  0.0004 -0.0225  0.0442  0.0653 -0.0097 -0.0060 -0.0095
#> 17_r  0.0131 -0.0050 -0.0050  0.0067 -0.0213  0.0196  0.0084 -0.0026  0.0037 -0.0006
#> 18_i -0.0197 -0.0028 -0.0241  0.0098  0.0111 -0.0207 -0.0240  0.0115 -0.0046  0.0001
#> 19_s  0.0405 -0.0102 -0.0078 -0.0061 -0.0038  0.0313 -0.0472 -0.0025  0.0339  0.0005
#> 20_e  0.1080 -0.0234  0.0164  0.0044 -0.0045  0.0744  0.2017 -0.0432  0.0389 -0.0093
#> 21_r  0.0460 -0.0071  0.0012  0.0070 -0.0399  0.0457  0.0219 -0.0121  0.0280  0.0006
#> 22_g -0.0134 -0.0224 -0.0111  0.0331 -0.0006  0.0145 -0.0118 -0.0048 -0.0006  0.0001
#> 23_s  0.0258 -0.0055 -0.0057 -0.0130  0.0065  0.0254 -0.0827  0.0016  0.0166  0.0021
#> 24_i  0.0085 -0.0026 -0.0140  0.0204  0.0009  0.0057  0.0315 -0.0031  0.0062  0.0004
#> 25_e -0.0290  0.0017 -0.0053 -0.0045 -0.0120 -0.0233  0.0447  0.0205  0.0189 -0.0047
#> 26_s  0.0069 -0.0049  0.0017 -0.0005 -0.0260  0.0398 -0.0189  0.0080  0.0203 -0.0014
#> 27_h -0.0351 -0.0031  0.0042  0.0199 -0.0020 -0.0017 -0.0848  0.0067  0.0230  0.0079
#> 28_e  0.0583 -0.0170  0.0015 -0.0061 -0.0021  0.0254  0.0972 -0.0124  0.0505 -0.0065
#> 29_h -0.0537 -0.0080 -0.0132 -0.0260  0.0082 -0.0178 -0.2404  0.0835 -0.0735  0.0061
#> 30_i  0.0121 -0.0029 -0.0124  0.0158  0.0014  0.0042  0.0606 -0.0016 -0.0018 -0.0024
#> 31_r -0.0143  0.0139 -0.0165 -0.0040 -0.0278 -0.0122 -0.0051  0.0024  0.0040 -0.0006
#> 32_h -0.0099 -0.0146 -0.0086 -0.0207 -0.0001  0.0069 -0.2107  0.0606 -0.0429  0.0069
#> 33_g -0.0164 -0.0177 -0.0152  0.0100  0.0132  0.0017 -0.0483  0.0102 -0.0197 -0.0023
#> 34_s  0.0421 -0.0161  0.0032 -0.0113  0.0078  0.0346 -0.0747  0.0081 -0.0006  0.0033
#> 35_s  0.0770 -0.0171  0.0003 -0.0110 -0.0011  0.0824 -0.0637 -0.0147  0.0221  0.0012
#> 36_h -0.0105 -0.0025 -0.0014 -0.0044  0.0019  0.0198 -0.0688  0.0213 -0.0533  0.0022
#> 37_r -0.0398  0.0255 -0.0221 -0.0052  0.0067 -0.0473  0.0642 -0.0124 -0.0244 -0.0017
#> 38_r -0.0158  0.0172 -0.0184 -0.0010  0.0065 -0.0263  0.0453 -0.0179 -0.0097  0.0007
#> 39_h  0.0440 -0.0120  0.0126  0.0140 -0.0248  0.0738  0.0543 -0.0172 -0.0062  0.0000
#> 40_h  0.0318 -0.0120  0.0058  0.0021  0.0194  0.0357  0.0768 -0.0091 -0.0547 -0.0039