Why does lavaan return zero fit indices when using three indicators in a CFA?

CFA with lavaan on USArrests: three indicators produce fit indices of zero, yet including a fourth variable yields meaningful values. Example:

library(lavaan)
dataset <- USArrests
modelSpec <- 'factor1 =~ Murder + Assault + Rape'
modelFit <- lavaan::cfa(modelSpec, data = dataset, missing = 'FIML', estimator = 'MLR')
summary(modelFit, fit.measures = TRUE)

Hey everyone, I’ve been thinking about this and suspect it might have something to do with the model’s identification status. When you run a one-factor CFA with just three indicators, you’re often working with very few degrees of freedom. It might turn out that under such conditions, the baseline model used to compute fit indices becomes nearly saturated or even exactly identified, leaving no room for the typical chi-square discrepancies to show up. That’s probably why you end up with zeros for fit indices.

I’m also wondering if the choice of estimator (MLR with FIML in this case) brings in some correction factors that further push these indices to zero when there’s minimal mismatch between your model and the saturated one. Has anyone else seen similar behavior with different estimators or when tweaking the model specification? It’d be cool to compare notes and see if there’s a workaround, like adding a fourth indicator or imposing some constraints to bump up the degrees of freedom. What are your experiences with this issue? :grinning:

The situation you’re seeing is likely related to the identification issues inherent to using only three indicators for a single factor. In my experience, when a model is just-identified, as is the case with three indicators, there isn’t any flexibility left in the model to allow for meaningful model fit evaluation, which can result in computed indices being zero or not informative. I’ve found that moving towards an over-identified model, either by adding another indicator or introducing constraints, often yields more useful fit statistics. Adjusting the setup helped me better interpret the model’s performance.

i think the zero indices occur bc with 3 indicators the model is exactly idetifed – there’s no misfit left to capture. trying to add a parameter or extra variable can tip it into overidificaiton, thus generating meaningful fit stats.

Hey folks, this is really intriguing! I wonder if there’s more to it than just the identification issue. When you’re working with three indicators, the model is essentially just-identified, meaning there’s no leftover freedom for the fit indices to really express any misfit. In my experience with lavaan, these indices—like that chi-square discrepancy—really need some extra degrees of freedom to show differences from a saturated model. I’m curious if anyone’s tried experimenting with alternative model tweaks. For instance, what happens if you slightly adjust your model constraints or use a different estimator? Have you observed any subtle changes in the output when you fiddle with the variable ordering or try computing robust fit measures? I find these little puzzles super interesting and would love to hear more about your experiments or any unexpected findings. :blush:

I’ve noticed that using just three indicators often causes these zero fit indices due to the inherent limitations of the just-identified model. In such cases, the degrees of freedom are completely exhausted, and the fit indices have no room to vary from a saturated model. In my work, I’ve experimented by tweaking the model by introducing even a minor constraint change or adding another variable, which then results in meaningful fit statistics. It seems the issue lies in the sensitivity of the indices to degrees of freedom, causing them to default to zero when the model is exactly identified.