I’m running a Confirmatory Factor Analysis (CFA) in R using the lavaan package. Everything seems to work fine, but I can’t find the correlations between my latent factor subscales in the output. Here’s a simplified version of what I’m doing:
library(lavaan)
model <- 'Factor =~ Sub1 + Sub2 + Sub3
Sub1 =~ Item1 + Item2 + Item3
Sub2 =~ Item4 + Item5
Sub3 =~ Item6 + Item7'
fit <- cfa(model, data = mydata, std.lv = TRUE, missing = 'fiml')
summary(fit, standardized = TRUE, fit.measures = TRUE)
parameterEstimates(fit, standardized = TRUE)
The output shows variances for the latent variables, but not the correlations between Sub1, Sub2, and Sub3. I expected to see something like:
Sub1 ~~ Sub2 ...
Sub1 ~~ Sub3 ...
Sub2 ~~ Sub3 ...
Am I missing something in my code? How can I get these subscale correlations? Any help would be great!
hey nate, i’ve run into this before. you need to explicitly define the correlations in ur model. try adding these lines:
Sub1 ~~ Sub2
Sub1 ~~ Sub3
Sub2 ~~ Sub3
that should make the correlations show up in ur output. lemme know if it works!
I’ve encountered a similar issue in my CFA work. The problem lies in your model specification. When you define subscales as indicators of a higher-order factor, lavaan treats them as endogenous variables, not allowing for their intercorrelations by default.
To resolve this, you need to modify your model slightly. Instead of defining ‘Factor’ as a higher-order construct, treat your subscales as correlated factors:
model <- '
Sub1 =~ Item1 + Item2 + Item3
Sub2 =~ Item4 + Item5
Sub3 =~ Item6 + Item7
Sub1 ~~ Sub2
Sub1 ~~ Sub3
Sub2 ~~ Sub3'
This approach will yield the subscale correlations you’re looking for in the output. It’s a common misconception in CFA modeling, but once you adjust your syntax, you should see those correlations appear in your parameterEstimates output.
Oh hey there, Nate!
Your CFA question’s got me curious. Have you considered that maybe the correlations aren’t showing up because of how you’ve structured your model? 
I’m wondering… what if you tried separating your higher-order factor from the subscales? Something like this maybe:
model <- '
# Subscales
Sub1 =~ Item1 + Item2 + Item3
Sub2 =~ Item4 + Item5
Sub3 =~ Item6 + Item7
# Higher-order factor
Factor =~ Sub1 + Sub2 + Sub3
# Correlations between subscales
Sub1 ~~ Sub2
Sub1 ~~ Sub3
Sub2 ~~ Sub3'
This way, you’re explicitly telling lavaan to calculate those correlations between the subscales. I’m super interested to know if this works for you!
Also, I’m curious about your research. What kind of construct are you measuring with these subscales? It sounds intriguing! 