2
$\begingroup$

I am trying to compute a Structural equation model. I have identified one model, in which I have included all the subscales simultaneously. However, when I try to look at the subscales separately, I get the following warning message for some of the subscales:

In lav_model_vcov(lavmodel = lavmodel2, lavsamplestats = lavsamplestats, : lavaan WARNING: Could not compute standard errors! The information matrix could not be inverted. This may be a symptom that the model is not identified.

My model looks at follows:

mod0= "extra =~ BFI1 + BFI6 + BFI11 + BFI16
   vertr =~ BFI2 + BFI7 + BFI12 + BFI17
   gewis =~ BFI3 + BFI8 + BFI13 + BFI18
   nerot =~ BFI4 + BFI9 + BFI14 + BFI19
   offen =~ BFI5 + BFI10+ BFI15 + BFI20 + BFI21
   func  =~ SF36_3a + SF36_3b +SF36_3c + SF36_3d + SF36_3e +SF36_3f +SF36_3g + SF36_3h + SF36_3i + SF36_3j
   lim   =~ SF36_4a +SF36_4b + SF36_4c + SF36_4d
   emot  =~ SF36_5a + SF36_5b + SF36_c5 
   socfunc =~ SF36_6 + SF36_10
   pain    =~ SF36_7 + SF36_8
   vitality =~ SF36_9a +SF36_9e + SF36_9g + SF36_9i
   mental =~ SF36_9b + SF36_9c + SF36_9d +SF36_9f +SF36_9h
   genhealth =~ SF36_11a + SF36_11b + SF36_11c + SF36_11d"`

When I try to estimate the subscales separately:

Physical functioning

mod_func = "func =~ SF36_3a + SF36_3b +SF36_3c + SF36_3d + SF36_3e +SF36_3f +SF36_3g + SF36_3h + SF36_3i + SF36_3j "
res_func = cfa(mod_func, data =d0)
summary(res_func, standardized =TRUE)

---Role limitations

mod_lim = "lim =~ SF36_4a +SF36_4b + SF36_4c + SF36_4d"
res_lim = cfa(mod_lim, data = d0)
summary(res_lim, standardized =TRUE)

--- Emotional functioning

mod_emo = "emot  =~ SF36_5a + SF36_5b + SF36_c5"
res_emo = cfa(mod_emo, data = d0)
summary(res_emo, standardized = TRUE)

--- Social functioning

mod_socfunc = "socfunc =~ SF36_6 + SF36_10"
res_socfunc = cfa(mod_socfunc, data =d0)
summary(res_socfunc, standardized =TRUE)

---- pain

mod_pain = "pain =~ SF36_7 + SF36_8"
res_pain = cfa(mod_pain, data = d0)
summary (res_pain, standardized =TRUE)

---- Vitality

mod_vitality = " vitality =~ SF36_9a +SF36_9e + SF36_9g + SF36_9i"
res_vitality = cfa(mod_vitality, data =d0)
summary(res_vitality, standardized =TRUE)

---- mental health

mod_mental = " mental =~ SF36_9b + SF36_9c + SF36_9d +SF36_9f +SF36_9h"
res_mental = cfa(mod_mental, data = d0)
summary (res_mental, standaridzed =TRUE)

--- General Health

mod_genhealt ="genhealth =~ SF36_11a + SF36_11b + SF36_11c + SF36_11d"
res_genhealth = cfa(mod_genhealt, data =d0)
summary(res_genhealth, standardized =TRUE)

For the subscales Pain and social functioning, I get the warning message: Warning messages:

1: In lav_model_vcov(lavmodel = lavmodel2, lavsamplestats = lavsamplestats,  :
  lavaan WARNING:
    Could not compute standard errors! The information matrix could
    not be inverted. This may be a symptom that the model is not
    identified.
2: In lav_object_post_check(object) :
  lavaan WARNING: some estimated ov variances are negative

Also, when I try to estimate an orthogonal model using res = cfa(mod0_orth, orthogonal = TRUE, data = d0) I get the warning message:

1: In lav_model_vcov(lavmodel = lavmodel2, lavsamplestats = lavsamplestats, : lavaan WARNING: Could not compute standard errors! The information matrix could not be inverted. This may be a symptom that the model is not identified. 2: In lav_object_post_check(object) : lavaan WARNING: some estimated ov variances are negative

I do not get the warning, when I estimate the unorthogonal model.

Any help would be very much appreciated.

$\endgroup$
3
  • 1
    $\begingroup$ I have edited the question, because this is not a question about lavaan (if it was, it would be off topic), this is a question about estimating structural equation models. $\endgroup$ May 14, 2020 at 2:41
  • 1
    $\begingroup$ Thank you very much for your answer @Jeremy Miles. This helps a lot. Do you also have any sources that I can use for my work as to why such a model does not work? $\endgroup$
    – Milkovena
    May 14, 2020 at 6:43
  • 1
    $\begingroup$ I've added to the answer. $\endgroup$ May 14, 2020 at 15:41

1 Answer 1

4
$\begingroup$

You don't have enough information fit a single factor model when you only have two measured variables.

I think of it like this. This model:

mod_pain = "pain =~ SF36_7 + SF36_8"

Wants to estimate two parameters. A loading for each of the measured variables. How much information are you giving it to do that with? One covariance.

So you have 1 (covariance) - 2 (parameters to estimate) = -1 df.

The same thing will happen with an orthogonal model.

If you really want to estimate this, you can do it by constraining the loadings to be equal.

mod_pain = "pain =~ a*SF36_7 + a*SF36_8"

Now your model has 0 df, so it's just identified. It's not an interesting model, it doesn't tell you anything you didn't already know, and you have to add in a constraint that yo have no evidence for.

Any SEM textbook should cover model identification. Most would recommend that you check your model is identified before you run it, because it is possible that the program doesn't realize. One of the best references for identification rules is Bollen's book 'structural equations with latent variables.' However, model identification is hard.

In addition, it's possible for a model to be empirically non-identified. A model would be identified with some data, but it is not identified with other data.

Here's something that covers your exact issue: https://m-clark.github.io/sem/sem.html#issues-in-sem

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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