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'