# Can't compute standard errors: the information matrix could not be inverted

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.

• 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. May 14, 2020 at 2:41
• 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? May 14, 2020 at 6:43

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