I am fitting a SEM model that includes socio-economic status (SES) for a household and environmental conditions (env) surrounding this household (road condition, sanitation etc).
My (obvious) hypothesis is that SES and env are correlated, SES ~~ env (using lavaan syntax). SES is represented by a group of variables, and env is represented by another (no overlap). When I fit the model, SEM indicates a bad fit (significant chi square) and suggests adding correlations among the individual measured variables between the two groups (SES and env).
I specifically created the SES and env latent variables and had them correlated to avoid having to include individual correlations among all combinations of variables.
How can I improve the fitting process, and is there something I am missing?
Edit: SEM also suggests that measured variables representing SES should be also representing env. (in lavaan this would be: env ~= e.g. income)
1 Answer
The point of an SEM is to explain the correlations among the observed variables (i.e., indicators in this case) using a latent variable model. A bad fit indicates that your latent variable model doesn't do a good job of explaining why certain indicators are correlated with each other. That is, even after including your model specification, the model could be improved by adding some components into the model (i.e., cross loadings). If the modification indices indicate that income
should load onto env
, that means that a model where income
only loads onto SES
doesn't explain the observed data well. This could be for a variety of reasons, including that income
involves components related not just to a person's SES but also to their environment.
You can try to fix your model, but there are problems when using modification indices to do so. You might try using model-implied instrumental variables (MIIVs), which allow you to consistently estimate the structural part of the model (i.e., the correlation between SES
and env
) without needing to get the measurement model right under certain assumptions. See Bollen (2019) for an introduction. The MIIVsem
R package implements this method using the same syntax as lavaan
and is very easy to use.