Solved – Degrees of Freedom in CFA using lavaan

confirmatory-factordegrees of freedomlavaanr

I'm confused about my degrees of freedom (df) when comparing 2 CFA models using lavaan versus calculating them by hand.

I have 8 observed items/variables loading on 1 factor first:

    library(lavaan)        
    model1 <-'
    oneFactor =~ item1 + item2 + item3 + item4 + item5 + item6 + item7 + item8
    '
    fit1 <- cfa(model1, data=data)
    summary(fit1)

Lavaan states that the model has 20 dfs, which my calculation by hand also gives me. That is:

Pieces of information = $\frac{p(p-1)}{2}$; where p = number of items.

For 8 items: $\frac{8*(8+1)}{2}$ = 36

Free parameters:

7 loadings (i.e., one loading is fixed to 1 of the 8 observed items) + 8 variances (one for each observed items) + 1 variance (for the latent factor) = 16

36 – 16 = 20dfs

However, in the 2-factor model I get a mismatch:

    model2 <-'
    oneFactor =~ item1 + item2 + item3 + item4
    twoFactor =~ item5 + item6 + item7 + item8
    '
    fit2 <- cfa(model2, data=data)
    summary(fit2)

lavaan now states the model has 19 dfs; but my hand calculation gives me 20.

Still 8 items:

$\frac{8*(8+1)}{2}$ = 36

6 loadings (i.e., 2 items (one for each latent factor) are set to 1) + 8 variances (one for each observed item) + 2 variances (one for each latent construct) = 16

36 – 16 = 20dfs whereas lavaan's cfa gives me 19 dfs.

I will be very grateful if someone can let me know how I am thinking wrong about this. Thanks!

Best Answer

What I forgot was to include the covariance between the two latent variables, i.e., : 6 loadings (i.e., 2 items (one for each latent factor) are set to 1) + 8 variances (one for each observed item) + 2 variances (one for each latent construct) + 1 covariarnce (between the two latent variables) = 17. This gives 36-17 = 19, which is what lavaan presented!

Related Question