I am trying to improve the fit for my CFA model below.

RI.Model <- '
  Reexperiencing =~ c_ri18 + c_ri10 + c_ri5 + c_ri11 + c_ri14
  Avoidance =~ c_ri13 + c_ri3
  CogMood =~ c_ri6 + c_ri22 + c_ri25 + c_ri27 + c_ri7 + c_ri17 + c_ri12 + c_ri23 +
             c_ri2 + c_ri9 + c_ri16 + c_ri15 + c_ri19
  Arousal =~ c_ri8 + c_ri21 + c_ri4 + c_ri20 + c_ri26 + c_ri1 + c_ri24'

RIfit <- cfa(RI.Model, data = Hurricane_Ian) 
summary(RIfit, fit.measures = TRUE, modindices = TRUE)

When I run the model, I get the warning: covariance matrix of latent variables is not positive definite; use lavInspect(fit, "cov.lv") to investigate.

When I investigate, I don't see a major problem: lavInspect output

And on top of that, when I inspect the mod indices, the first three seem to already be in my model.

mod indices

I suspect my model is likely dead in the water due to a low sample size anyway (N = 154), but am I missing something here? In addition, my DF are 318 which seems absurdly high to me.


1 Answer 1

  1. MIs are an estimate. They're not necessarily the truth.
  2. Lavaan constrains the first loading to be equal to 1.0, so they are not in the model, they are constrained to 1. (But if you free them, the model won't be identified. MIs are an estimate. :) ).
  3. 'Covariance matrix of latent variables is not positive definite; use lavInspect(fit, "cov.lv")'. I do. The covariance of Reexperiencing and Avoidance is too high. That covariance of 0.689 is equivalent to a correlation of 1.01, correlations can't be over 1, so we know that this is wrong, but lavaan can't make the model fit without it being that high. This is a sign that your model is misspecified (Reexperiencing and Avoidance are not different, but are the same variable.) But you can't always tell that a covariance matrix is not positive definite by eyeballing it. (There might be other issues, that's the first one I saw.)
  4. "In addition, my DF are 318 which seems absurdly high to me." This is easy to check. You have (I think) 27 measured variables, so you have 27 * 26 / 2 = 351 correlations. You have 27 loadings to estimate, and 6 covariances between latent variables (4 * 3 / 2) so you have 33 parameters. Degrees of freedom is the difference between these two: 351 - 33 = 318. Not absurd, absolutely correct. (It's often worth calculating what you think DF should be and comparing it to the output to make sure you've specified the model correctly).
  • $\begingroup$ Thank you! Do you have any suggestions on what I should try to improve the fit? $\endgroup$
    – Rachelb
    Commented Jun 7, 2023 at 17:55
  • $\begingroup$ You haven't told us what the fit is. But the MIs look OK. You need to combine reexperiencing and avoidance into one variable. $\endgroup$ Commented Jun 7, 2023 at 17:57
  • $\begingroup$ Fit isn't great. Chi-square p value = .000 CFI= .798 RMSEA = .127 SRMR = .077 $\endgroup$
    – Rachelb
    Commented Jun 7, 2023 at 17:59
  • $\begingroup$ Hmmm, that's bad. Are there more MIs you're not showing? It would be very unusual to have a model this large and not have MIs between the error variances of the items. $\endgroup$ Commented Jun 7, 2023 at 17:59
  • $\begingroup$ Yeah, theres a whole long list... 125 suggestions, to be specific. I just posted the first five. $\endgroup$
    – Rachelb
    Commented Jun 7, 2023 at 18:01

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.