I am conducting a CFA followed up by a SEM analysis. In my original model I had 13 latent variables. As some of these were highly correlated, I created second-order factors, of which 3 are indicated by just two first-order factors.
As recommend by e.g. Rex Kline and Timothy Brown, I fixed the factor loadings of the first-order factors to equality in the case of only two first-order indicators. However, this results in a negative residual variance in one of these first-order factors (disapprovalTarget, variance = -0.024). The model fit is overall good (robust TLI > .9, robust RMSEA = .053)
To try things out, I removed the equality constraints on disapprovalTarget but only fixed the factor loading of disapprovalTarget on 1, letting the other factor loading to be freely estimated. To my surprise, this resulted in an identified model without negative variances. When I also removed the equality constraints on the other factors, it still resulted in an identified model, while in the books I read you need to impose equality constraints to get an identified model.
Can someone explain why I do get an identified model? I'll post my R code below.
CFA <- ' climate_f =~ climate_items_1 + climate_items_2 + climate_items_3 + climate_items_4 + climate_items_5 + climate_items_6 belonging_f =~ incl_1 + incl_2 + incl_3 + incl_4 authenticity_f =~ incl_5 + incl_6 + incl_7 + incl_8 inclusion_f =~ f1*belonging_f + authenticity_f uncertaintyTarget_f =~ uncertainty_1 + uncertainty_2 + uncertainty_3 + uncertainty_4 uncertaintyColleague_f =~ uncertainty_5 + uncertainty_6 + uncertainty_7 + uncertainty_8 trustTarget_f =~ trust_1 + trust_2 + trust_3 + trust_4 trustColleague_f =~ trust_5 + trust_6 + trust_7 + trust_8 disapprovalTarget_f =~ disapproval_1 + disapproval_2 + disapproval_3 + disapproval_4 disapprovalColleague_f =~ disapproval_5 + disapproval_6 + disapproval_7 + disapproval_8 interactionTarget_f =~ interaction_1 + interaction_2 + interaction_3 + interaction_4 + interaction_5 + interaction_6 interactionColleague_f =~ interaction_7 + interaction_8 + interaction_9 + interaction_10 + interaction_11 + interaction_12 uncertainty_f =~ f2*uncertaintyTarget_f + uncertaintyColleague_f disapproval_f =~ f3*disapprovalTarget_f + disapprovalColleague_f trustint =~ trustTarget_f + trustColleague_f + interactionTarget_f + interactionColleague_f'