I have a simple CFA model, where there are 4 latent factors, each including 4 manifest variables, and there are covariation among all factors. The model is estimated on ~180 individuals.

cfa.all = 'LET =~ K + L + D + T
          CAT =~ Ani + Occ + Spo + Pla
          ASC =~ AF1 + AF2 + AF3 + AF4
          DSC =~ DF1 + DF2 + DF3 + DF4'

The CFA runs smoothly, the result is quite satisfying, no issues here. However, I would like to assess whether the link between LET <-> DSC (=0.583) is significantly stronger then that between LET <-> ASC (=0.367). See the covariances:

fit.all = cfa(cfa.all, data = DATA)
summary(fit.all, fit.measures=TRUE, standardized=TRUE)

            Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  LET ~~                                                             
      CAT      0.138    0.029    4.719    0.000    0.629    0.629
      ASC      0.150    0.050    3.011    0.003    0.367    0.367
      DSC      0.352    0.071    4.980    0.000    0.583    0.583
  CAT ~~                                                           
      ASC      0.169    0.039    4.298    0.000    0.774    0.774
      DSC      0.144    0.036    3.955    0.000    0.446    0.446
  ASC ~~                                                        
      DSC      0.308    0.080    3.842    0.000    0.510    0.510

Thus, I would like to ask, whether I can test this as the difference between two correlations, using the standardized coefficients (i.e., comparison of correlations from dependent samples, e.g., https://www.psychometrica.de/correlation.html). Which would be quite simple and convenient. (Note: It should be also possible to estimate the latent scores for each participant, compute the correlations, and then compare the coefficients).

If there are serious issues using the "approach" above, how can I test this example difference more appropriately using the Lavaan model instead? I guess, this would require some constrains and model comparisons... But I am not sure how to specify the models and perform such comparisons. Thank you!

  • $\begingroup$ The only thing i can offer to you is some excerpt from my doctoral thesis when i used a similar technique to compare two regression coefficients/the path between two variables. in the form of variable1 -> variable2 between two groups with a test of critical values. However this path comparisons were only one directional, and strictly for path analysis, the small brother of the SEM, caluclating CR is relatively easy, and I could offer you sources on that. I believe I also have sources for SEM but before wrangling my thesis, are you interested, even if it wouldnt be exactly the same? $\endgroup$ Commented Mar 12, 2021 at 11:04
  • $\begingroup$ Thank you Patrick but I think I got the answer of how to approach this issue. Best, M. $\endgroup$
    – Makro
    Commented Mar 12, 2021 at 16:37

1 Answer 1


You have to constrain those two covariances in the model to equality. Then you can compare the fit of the unconstrained model to that of the constrained model. If the difference of the two models' chi-squared values is significant, the covariances aren't equal.

Generally, you should use unstandardized estimates when making any statistical inferences in SEM. However, if you want to constrain covariances to equality, the unstandardized variables involved must have the same scale for the constraint to make sense. This is unproblematic here given that you are interested in factor covariances. It seems that you are using the lavaan default where factors inherit the scales of their first indicators. You can change this so that the variances of each factor are set to 1 instead. In lavaan, use the argument std.lv = TRUE when calling the cfa function. This will make it so that the factor covariances of the unstandardized model will be equal to the standardized covariances and can be interpreted as correlations.

The constrained model can be specified in this way:

cfa.constrained <- '
LET =~ K + L + D + T
CAT =~ Ani + Occ + Spo + Pla
ASC =~ AF1 + AF2 + AF3 + AF4
DSC =~ DF1 + DF2 + DF3 + DF4

LET ~~ a * DSC
LET ~~ a * ASC

The model comparison can be done like this:

fit.unconstrained <- cfa(cfa.all, std.lv = TRUE, data = DATA)
fit.constrained <- cfa(cfa.constrained, std.lv = TRUE, data = DATA)
anova(fit.unconstrained, fit.constrained)

If the p-value is <.05, the equality constraint causes a significant deterioration in model fit and the correlations of LET with DSC and ASC therefore appear to be unequal. All the usual caveats regarding p-values and small sample sizes apply here, however.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.