Why isn't Lavaan automatically fixing factor loadings to 1 in my CFA?

I’m new to using Lavaan for CFA in R. I’ve set up my model, but I’ve noticed something odd. None of my factor loadings are being set to 1 automatically. I thought this was standard practice in CFA.

Here’s a simplified version of my code:

model <- 'factor1 =~ item1 + item2 + item3
          factor2 =~ item4 + item5 + item6
          item1 ~~ item2'

fit <- cfa(model, data = mydata, std.lv = TRUE)
summary(fit, standardized = TRUE)

The output shows all loadings as free parameters. Am I missing something in my setup? Or is there a reason Lavaan might not be fixing loadings?

I’d appreciate any insights on this. Thanks!

Hey there, EnthusiasticPainter7! :wave:

I totally get your confusion about the factor loadings. It’s a common head-scratcher when you’re just starting out with Lavaan.

Have you considered playing around with different identification methods? The ‘std.lv = TRUE’ in your code is actually telling Lavaan to standardize the latent variables instead of fixing loadings. It’s pretty neat for some analyses, but maybe not what you’re after?

If you want the classic CFA setup with one loading fixed to 1 per factor, try dropping that ‘std.lv = TRUE’ bit. Or set it to FALSE if you wanna be extra clear.

What kind of research are you doing, by the way? Sometimes the standardized approach can give you some cool insights, depending on your goals. Have you thought about how either method might impact your interpretation?

Keep us posted on how it goes! CFA can be a bit of a beast, but it’s so rewarding when you get it right. :blush:

hey enthusiasticpainter7, looks like you’ve got std.lv = TRUE in ur fit function. that’s telling lavaan to standardize the latent variables instead of fixin a loading to 1. if u want the usual scaling, just remove that part or set it to FALSE. hope that helps!

I’ve encountered this situation before when working with Lavaan. The key is in the ‘std.lv = TRUE’ parameter you’ve set in the cfa() function. This option standardizes the latent variables, which is an alternative method of model identification. It’s actually quite useful in many scenarios, as it allows for easier interpretation of the loadings.

However, if you prefer the traditional approach of fixing one loading per factor to 1, you can simply remove the ‘std.lv = TRUE’ argument or set it to FALSE. This will revert to the default behavior where Lavaan automatically fixes the first loading of each factor to 1.

Keep in mind that both methods are valid for model identification, and the choice often depends on your specific analysis goals and how you want to interpret the results. If you’re comparing your results to other studies or following a particular methodology, you might want to stick with the fixed loading approach.