Evaluate general-factor strength in bifactor and higher-order models
Source:R/nomo_hierarchical.R
nomo_hierarchical.Rdnomo_hierarchical() answers the question behind many published scales that
report both a total score and subscale scores: how much of each score
reflects a general factor, and how much reliable variance does each subscale
carry beyond it? It evaluates a fitted bifactor or higher-order CFA and
reports omega total, omega hierarchical, explained common variance (ECV),
the percentage of uncontaminated correlations (PUC), and subscale omega and
omega hierarchical subscale, each with its estimand stated.
Usage
nomo_hierarchical(
fit,
general = NULL,
obs.var = TRUE,
guidance = nomo_defaults()
)Arguments
- fit
A
nomo_cfaobject or fittedlavaanmodel containing a bifactor or higher-order measurement model. Single-group, single-level models only.- general
Optional name of the general (bifactor) or second-order (higher-order) factor. If
NULL, it is identified from the model and the call is refused if that is ambiguous.- obs.var
Logical.
TRUE(default, matchingnomo_reliability()) uses observed covariances in each omega's denominator;FALSEuses model-implied covariances, which reproduces the formulas in Rodriguez, Reise, and Haviland (2016).- guidance
Guidance settings returned by
nomo_defaults().
Value
A nomo_hierarchical object with the detected structure, the
general factor, the groups and their items, an indices table, a
subscales table, an item-level loadings table, identification and
estimand notes, and a decision_log.
Details
Structure. The structure is read from the fitted model, so syntax written
by hand works as well as syntax from nomo_model():
Higher-order: one second-order factor measured by first-order factors, each measured by its own items. The first-order factors' disturbances are the group sources. Their loadings are the Schmid-Leiman decomposition of the higher-order solution, which is exact for a confirmatory model.
Bifactor: one general factor measured by every item, plus group factors measured by disjoint subsets of items. Items may load on the general factor alone.
The general and group sources must be orthogonal, because variance can be attributed to a source only when sources do not covary. A model that allows them to correlate is refused with an explanation.
Estimands. Every omega is the proportion of the variance of a unit-weighted composite that a set of sources explains. With continuous indicators the composite is the observed sum score. With ordered indicators the indices describe the latent-response composite, an upper bound on the reliability of the observed ordinal sum score; the observed ordinal-scale version is not provided. ECV and PUC describe the item set and do not depend on the denominator.
No verdicts. The indices are reported with plain-language interpretation, but no value is treated as a pass/fail threshold. Reise (2012) notes that no benchmark value of ECV establishes when a general factor is strong enough, and that when PUC is very high, even modest ECV can yield relatively unbiased estimates from a unidimensional model.
Choosing a structure. A bifactor model will usually fit at least as well
as a correlated-factors or higher-order model of the same items, including
when it is not the model that generated the data (Reise, 2012), and a
higher-order model is a constrained version of the bifactor model (Yung,
Thissen, & McLeod, 1999). Bonifay, Lane, and Reise (2017) treat that
tendency to show superior goodness of fit as a particular concern, and note
that the superior performance "may be a symptom of overfitting", capturing
unwanted noise as well as real trends. Murray and Johnson (2013) compared
these two structures directly and found the comparison itself biased: unless
there was essentially no unmodeled complexity, their simulation favored the
bifactor model even when a higher-order model generated the data, and they
concluded that the choice "should not rely on which is better fitting".
Compare the alternatives with
nomo_compare() and choose on substantive grounds, not on fit alone.
nomo_hierarchical() does not choose.
Factor scores: two indices that answer different questions. The
factors table reports, for the general factor and each group factor,
factor determinacy and construct replicability.
Factor determinacy (Beauducel, 2011; Rodriguez, Reise, & Haviland, 2016)
is the correlation between a factor and its estimated factor score. It is
computed from the whole model-reproduced correlation matrix, so a group
factor's score estimate can use the other items to partial out the general
factor. determinacy_r2 is its square, the proportion of variance in factor
scores explained by the factor, and min_competing_r is the minimum possible
correlation between two equally valid sets of factor scores, twice the
squared determinacy minus one. A negative value there means two researchers
scoring the same data could rank people in opposite orders and both be
consistent with the model.
Construct replicability H (Hancock & Mueller, 2001) is the proportion of variance in a factor explainable by its own indicators when optimally weighted. It uses only that factor's loadings and treats the remainder of each item as uncorrelated residual.
The two are the same quantity when the data are unidimensional, and can
differ under a bifactor model, where an item's residual with respect to one
factor contains the other factors and is correlated across items. Rodriguez
et al. (2016) state this and decline to prefer either, so both are reported.
Determinacy is always computed from the model-reproduced matrix, whatever
obs.var is set to, because that is what the formula is defined on.
Gorsuch (1983) recommended using factor score estimates only when determinacy exceeds .90, with competing score sets correlating above .70, and Hancock and Mueller (2001) proposed .70 as a standard for H. These are reported as their authors' recommendations where a value falls below them, as with fixed fit-index cutoffs elsewhere in the package, and are never applied as rules.
References
Beauducel, A. (2011). Indeterminacy of factor score estimates in slightly misspecified confirmatory factor models. Journal of Modern Applied Statistical Methods, 10(2), 583-598. doi:10.22237/jmasm/1320120900
Bonifay, W., Lane, S. P., & Reise, S. P. (2017). Three concerns with applying a bifactor model as a structure of psychopathology. Clinical Psychological Science, 5(1), 184-186. doi:10.1177/2167702616657069
Gorsuch, R. L. (1983). Factor analysis (2nd ed.). Lawrence Erlbaum.
Hancock, G. R., & Mueller, R. O. (2001). Rethinking construct reliability within latent variable systems. In R. Cudeck, S. du Toit, & D. Sorbom (Eds.), Structural equation modeling: Present and future (pp. 195-216). Scientific Software International.
Holzinger, K. J., & Swineford, F. (1937). The bi-factor method. Psychometrika, 2(1), 41-54. doi:10.1007/BF02287965
Murray, A. L., & Johnson, W. (2013). The limitations of model fit in comparing the bi-factor versus higher-order models of human cognitive ability structure. Intelligence, 41(5), 407-422. doi:10.1016/j.intell.2013.06.004
Reise, S. P. (2012). The rediscovery of bifactor measurement models. Multivariate Behavioral Research, 47(5), 667-696. doi:10.1080/00273171.2012.715555
Reise, S. P., Bonifay, W. E., & Haviland, M. G. (2013). Scoring and modeling psychological measures in the presence of multidimensionality. Journal of Personality Assessment, 95(2), 129-140. doi:10.1080/00223891.2012.725437
Rodriguez, A., Reise, S. P., & Haviland, M. G. (2016). Evaluating bifactor models: Calculating and interpreting statistical indices. Psychological Methods, 21(2), 137-150. doi:10.1037/met0000045
Schmid, J., & Leiman, J. M. (1957). The development of hierarchical factor solutions. Psychometrika, 22(1), 53-61. doi:10.1007/BF02289209
Yung, Y.-F., Thissen, D., & McLeod, L. D. (1999). On the relationship between the higher-order factor model and the hierarchical factor model. Psychometrika, 64(2), 113-128. doi:10.1007/BF02294531
Examples
set.seed(2026)
n <- 500
g <- rnorm(n)
s <- matrix(rnorm(n * 3), n, 3)
dat <- as.data.frame(sapply(1:9, function(i) {
.6 * g + .45 * s[, ceiling(i / 3)] + rnorm(n, sd = .65)
}))
names(dat) <- paste0("x", 1:9)
factors <- list(
A = c("x1", "x2", "x3"),
B = c("x4", "x5", "x6"),
C = c("x7", "x8", "x9")
)
bf <- nomo_cfa(nomo_model(factors, structure = "bifactor"), data = dat)
h <- nomo_hierarchical(bf)
h
#> <nomo_hierarchical> Hierarchical model evaluation
#> Bifactor model | General factor: G | Group factors: A, B, C
#> Estimand: unit-weighted observed composite
#>
#> Total score
#> Index Estimate
#> omega total 0.896
#> omega hierarchical 0.741
#> omega hierarchical relative 0.827
#> ECV 0.609
#> PUC 0.750
#>
#> Subscales
#> Subscale Items Omega subscale Omega hierarchical subscale
#> A 3 0.798 0.330
#> B 3 0.791 0.354
#> C 3 0.799 0.239
#>
#> Factor scores
#> Factor Role Determinacy Min competing r Replicability H
#> G general 0.867 0.502 0.829
#> A group 0.704 -0.009 0.489
#> B group 0.715 0.023 0.501
#> C group 0.641 -0.178 0.406
#>
#> Notes
#> - review: A bifactor model will usually fit at least as well as
#> correlated-factors or higher-order models of the same items, even when it
#> did not generate the data (Reise, 2012), and a higher-order model is a
#> constrained version of it (Yung, Thissen, & McLeod, 1999). Bonifay, Lane,
#> and Reise (2017) call the bifactor model's tendency to show superior
#> goodness of fit in model comparison studies a particular concern, and say
#> that superior fit may be a symptom of overfitting: modeling not only the
#> trends in the data but also unwanted noise. Murray and Johnson (2013)
#> compared these two structures directly and found the comparison biased in
#> favor of the bifactor model: unless there was essentially no unmodeled
#> complexity, their simulation favored the bifactor model even when a
#> higher-order model generated the data. They concluded that which model to
#> adopt should not rely on which is better fitting. Compare the alternatives
#> with nomo_compare() and choose on substantive grounds, not on fit alone.
#> - review: Factor determinacy is at or below .90 for G, A, B, C. Gorsuch
#> (1983, p. 260) recommended using factor score estimates only above that
#> value. This is his recommendation reported as context, not a rule applied
#> here; the score may still be usable for some purposes.
#> - review: Two equally valid sets of factor scores could correlate as low as
#> G (0.50), A (-0.01), B (0.02), C (-0.18). Gorsuch (1983, p. 260) suggested
#> this minimum be above .70. A negative value means two researchers scoring
#> the same data could rank people in opposite orders and both be consistent
#> with the model.
#> - review: Construct replicability H is below .70 for A, B, C. Hancock and
#> Mueller (2001) proposed .70 as a standard; a factor below it is not well
#> defined by its own indicators and is expected to change across studies.
#> Reported as their standard, not applied as a rule.
#>
#> No index is treated as a pass/fail threshold; see nomo_table(x, "indices").
nomo_table(h, "subscales")
#> # A tibble: 3 × 6
#> subscale n_items omega_subscale omega_hierarchical_s…¹ omega_hs_relative items
#> <chr> <int> <dbl> <dbl> <dbl> <chr>
#> 1 A 3 0.798 0.330 0.414 x1, …
#> 2 B 3 0.791 0.354 0.448 x4, …
#> 3 C 3 0.799 0.239 0.298 x7, …
#> # ℹ abbreviated name: ¹omega_hierarchical_subscale