OMEGA: McDonald's omega In EFAtools: Fast and Flexible Implementations of Exploratory Factor Analysis Tools

Description

This function finds omega total, omega hierarchical, and omega subscale from a Schmid-Leiman (SL) solution or lavaan single factor, second-order (see below), or bifactor solution. The SL-based omegas can either be found from a psych::schmid, SL, or, in a more flexible way, by leaving model = NULL and specifying additional arguments. By setting the type argument, results from psych::omega can be reproduced.

Usage

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 OMEGA( model = NULL, type = c("EFAtools", "psych"), g_name = "g", group_names = NULL, factor_corres = NULL, var_names = NULL, fac_names = NULL, g_load = NULL, s_load = NULL, u2 = NULL, cormat = NULL, pattern = NULL, Phi = NULL, variance = c("correlation", "sums_load") )

Details

If model is a lavaan second-order or bifactor solution, only the name of the general factor from the lavaan model needs to be specified additionally with the g_name argument. It is then determined whether this general factor is a second-order factor (second-order model with one second-order factor assumed) or a breadth factor (bifactor model assumed). Please note that this function only works for second-order models if they contain no more than one second-order factor. In case of a second-order solution, a Schmid-Leiman transformation is performed on the first- and second-order loadings and omega coefficents are obtained from the transformed (orthogonalized) solution (see SL for more information on Schmid-Leiman transformation). There is also the possibility to enter a lavaan single factor solution. In this case, g_name is not needed. Finally, if a solution from a lavaan multiple group analysis is entered, the omegas are computed for each group. The type argument is not evaluated if model is of class lavaan.

If model is of class SL or psych::schmid only the type and, depending on the type (see below), the factor_corres arguments need to be specified additionally. If model is of class psych::schmid and variance = "correlation" (default), it is recommended to also provide the original correlation matrix in cormat to get more accurate results. Otherwise, the correlation matrix will be found based on the pattern matrix and Phi from the psych::schmid output using the psych::factor.model function.

If model = NULL, the arguments type, factor_corres (depending on the type, see below), var_names, g_load, s_load, and u2 and either cormat (recommended) or Phi and pattern need to be specified. If Phi and pattern are specified instead of cormat, the correlation matrix is found using the psych::factor.model function.

The only difference between type = "EFAtools" and type = "psych" is the determination of variable-to-factor correspondences. type = "psych" reproduces the psych::omega results, where variable-to-factor correspondences are found by taking the highest group factor loading for each variable as the relevant group factor loading. To do this, factor_corres must be left NULL.

The calculation of the total variance (for the whole scale as well as the subscale composites) can also be controlled in this function using the variance argument. For both types—"EFAtools" and "psych"variance is set to "correlation" by default, which means that total variances are found using the correlation matrix. If variance = "sums_load" the total variance is calculated using the squared sums of general loadings and group factor loadings and the sum of the uniquenesses. This will only get comparable results to variance = "correlation" if no cross-loadings are present and simple structure is well-achieved in general with the SL solution (i.e., the uniquenesses should capture almost all of the variance not explained by the general factor and the variable's allocated group factor).

Value

If found for an SL or lavaan second-order of bifactor solution without multiple groups: A matrix with omegas for the whole scale and for the subscales.

 tot Omega total. hier Omega hierarchical. sub Omega subscale.

If found for a lavaan single factor solution without multiple groups: A vector with omega total for the single factor.

If found for a lavaan output from a multiple group analysis: A list containing the output described above for each group.

Source

McDonald, R. P. (1978). Generalizability in factorable domains: ‘‘Domain validity and generalizability’’. Educational and Psychological Measurement, 38, 75–79.

McDonald, R. P. (1985). Factor analysis and related methods. Hillsdale, NJ: Erlbaum.

McDonald, R. P. (1999). Test theory: A unified treatment. Mahwah, NJ: Erlbaum.

Gignac, G. E. (2014). On the Inappropriateness of Using Items to Calculate Total Scale Score Reliability via Coefficient Alpha for Multidimensional Scales. European Journal of Psychological Assessment, 30, 130-139.

Examples

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 ## Use with lavaan outputs # Create and fit bifactor 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 =~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 + V9 + V10 + V11 + V12 + V13 + V14 + V15 + V16 + V17 + V18' fit_bi <- lavaan::cfa(mod, sample.cov = test_models\$baseline\$cormat, sample.nobs = 500, estimator = "ml", orthogonal = TRUE) # Compute omega for bifactor solution OMEGA(fit_bi, g_name = "g") # Create and fit second-order 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_ho <- lavaan::cfa(mod, sample.cov = test_models\$baseline\$cormat, sample.nobs = 500, estimator = "ml") # Compute omega for second-order solution OMEGA(fit_ho, g_name = "g") ## Use with an output from the SL function, with type EFAtools efa_mod <- EFA(test_models\$baseline\$cormat, N = 500, n_factors = 3, type = "EFAtools", method = "PAF", rotation = "promax") sl_mod <- SL(efa_mod, type = "EFAtools", method = "PAF") # Two examples how to specify the indicator-to-factor correspondences: # Based on a specific salience threshold for the loadings (here: .20): factor_corres_1 <- sl_mod\$sl[, c("F1", "F2", "F3")] >= .2 # Or more flexibly (could also be TRUE and FALSE instead of 0 and 1): factor_corres_2 <- matrix(c(rep(0, 12), rep(1, 6), rep(0, 6), rep(1, 6), rep(0, 6), rep(1, 6), rep(0, 12)), ncol = 3, byrow = FALSE) OMEGA(sl_mod, type = "EFAtools", factor_corres = factor_corres_1) ## Use with an output from the psych::schmid function, with type psych for ## OMEGA schmid_mod <- psych::schmid(test_models\$baseline\$cormat, nfactors = 3, n.obs = 500, fm = "pa", rotate = "Promax") # Find correlation matrix from phi and pattern matrix from psych::schmid output OMEGA(schmid_mod, type = "psych") # Use specified correlation matrix OMEGA(schmid_mod, type = "psych", cormat = test_models\$baseline\$cormat) ## Manually specify components (useful if omegas should be computed for a SL ## or bifactor solution found with another program) ## As an example, we extract the elements from an SL output here. This gives ## the same results as in the second example above. efa_mod <- EFA(test_models\$baseline\$cormat, N = 500, n_factors = 3, type = "EFAtools", method = "PAF", rotation = "promax") sl_mod <- SL(efa_mod, type = "EFAtools", method = "PAF") factor_corres <- matrix(c(rep(0, 12), rep(1, 6), rep(0, 6), rep(1, 6), rep(0, 6), rep(1, 6), rep(0, 12)), ncol = 3, byrow = FALSE) OMEGA(model = NULL, type = "EFAtools", var_names = rownames(sl_mod\$sl), g_load = sl_mod\$sl[, "g"], s_load = sl_mod\$sl[, c("F1", "F2", "F3")], u2 = sl_mod\$sl[, "u2"], cormat = test_models\$baseline\$cormat, factor_corres = factor_corres)

EFAtools documentation built on March 27, 2021, 9:08 a.m.