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.
Best Answer
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:
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.
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