SL | R Documentation |
This function implements the Schmid-Leiman (SL) transformation
(Schmid & Leiman, 1957). It takes the pattern coefficients and factor
intercorrelations from an oblique factor solution as
input and can reproduce the results from psych::schmid
and from the SPSS implementation from Wolff & Preising (2005). Other arguments
from EFA
can be used to control the procedure to find the
second-order loadings more flexibly. The function can also be used on a
second-order confirmatory factor analysis (CFA) solution from lavaan.
SL( x, Phi = NULL, type = c("EFAtools", "psych", "SPSS", "none"), method = c("PAF", "ML", "ULS"), g_name = "g", ... )
x |
object of class |
Phi |
matrix. A matrix of factor intercorrelations from an oblique factor
solution. Only needs to be specified if a pattern matrix is entered directly
into |
type |
character. One of "EFAtools" (default), "psych", "SPSS", or "none".
This is used to control the procedure of the second-order factor analysis. See
|
method |
character. One of "PAF", "ML", or "ULS" to use
principal axis factoring, maximum likelihood, or unweighted least squares
(also called minres), respectively, used in |
g_name |
character. The name of the general factor. This needs only be
specified if |
... |
Arguments to be passed to |
The SL transformation (also called SL orthogonalization) is a procedure with
which an oblique factor solution is transformed into a hierarchical,
orthogonalized solution. As a first step, the factor intercorrelations are
again factor analyzed to find second-order factor loadings. If there is only
one higher-order factor, this step of the procedure stops there, resulting in
a second-order factor structure. The first-order factor and the second-order
factor are then orthogonalized, resulting in an orthogonalized factor solution
with proportionality constraints. The procedure thus makes a suggested
hierarchical data structure based on factor intercorrelations explicit. One
major advantage of SL transformation is that it enables variance
partitioning between higher-order and first-order factors, including the
calculation of McDonald's omegas (see OMEGA
).
A list of class SL containing the following
orig_R |
Original correlation matrix. |
sl |
A matrix with general factor loadings, group factor loadings, communalities, and uniquenesses. |
L2 |
Second-order factor loadings. |
vars_accounted |
A matrix of explained variances and sums of squared loadings. |
iter |
The number of iterations needed for convergence in EFA. |
settings |
list. The settings (arguments) used in EFA to get the second-order loadings. |
Schmid, J. & Leiman, J. M. (1957). The development of hierarchical factor solutions. Psychometrika, 22(1), 53–61. doi:10.1007/BF02289209
Wolff, H.-G., & Preising, K. (2005). Exploring item and higher order factor structure with the Schmid-Leiman solution: Syntax codes for SPSS and SAS. Behavior Research Methods, 37 , 48–58. doi:10.3758/BF03206397
## Use with an output from the EFAtools::EFA function, both with type EFAtools EFA_mod <- EFA(test_models$baseline$cormat, N = 500, n_factors = 3, type = "EFAtools", method = "PAF", rotation = "promax") SL_EFAtools <- SL(EFA_mod, type = "EFAtools", method = "PAF") ## Use with an output from the psych::fa function with type psych in SL fa_mod <- psych::fa(test_models$baseline$cormat, nfactors = 3, n.obs = 500, fm = "pa", rotate = "Promax") SL_psych <- SL(fa_mod, type = "psych", method = "PAF") ## Use more flexibly by entering a pattern matrix and phi directly (useful if ## a factor solution found with another program should be subjected to SL ## transformation) ## For demonstration, take pattern matrix and phi from an EFA output ## This gives the same solution as the first example EFA_mod <- EFA(test_models$baseline$cormat, N = 500, n_factors = 3, type = "EFAtools", method = "PAF", rotation = "promax") SL_flex <- SL(EFA_mod$rot_loadings, Phi = EFA_mod$Phi, type = "EFAtools", method = "PAF") ## Use with a lavaan second-order CFA output # Create and fit model in lavaan (assume all variables have SDs of 1) mod <- 'F1 =~ V1 + V2 + V3 + V4 + V5 + V6 F2 =~ V7 + V8 + V9 + V10 + V11 + V12 F3 =~ V13 + V14 + V15 + V16 + V17 + V18 g =~ F1 + F2 + F3' fit <- lavaan::cfa(mod, sample.cov = test_models$baseline$cormat, sample.nobs = 500, estimator = "ml") SL_lav <- SL(fit, g_name = "g")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.