bifactor model

1,524 views
Skip to first unread message

Tom P

unread,
May 16, 2013, 4:12:20 PM5/16/13
to lav...@googlegroups.com
Hi, I am trying to fit a bifactor model. It is necessary to make the factors orthogonal and to fix the variances of the factors to 1. I can do this manually, but I thought it would be just as easy to use the instructions "orthogonal=TRUE, std.lv=TRUE". But these two methods produce slightly different results. Can anyone explain why? Which of these two methods is preferable? I have created some illustrative syntax for the HS dataset below. 
Many thanks in advance, Tom.

HS.bifactor.model <- '
visual =~ x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 
g =~ NA*x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
'
fit <- cfa(HS.bifactor.model, data = HolzingerSwineford1939, orthogonal=TRUE, std.lv=TRUE)
summary(fit, fit.measures =T, standardized = T)

HS.bifactor.model2 <- '
visual =~ x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 
g =~ NA*x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
# set covariances to zero
visual ~~ 0*textual
visual ~~ 0*speed
visual ~~ 0*g
textual ~~ 0*speed
textual ~~ 0*g
speed ~~ 0*g
# variances to 1
visual ~~ 1*visual
textual ~~ 1*textual
speed ~~ 1*speed
g ~~ 1*g
'
fit2 <- cfa(HS.bifactor.model2, data = HolzingerSwineford1939)
summary(fit2, fit.measures =T, standardized = T)

Alex Schoemann

unread,
May 16, 2013, 7:30:48 PM5/16/13
to lav...@googlegroups.com
The two modes are subtly different. In the second model the first factor loading is fixed to default (as well as fixing the latent variances to one). This syntax provides identical results as the first model:


HS.bifactor.model2 <- '
visual =~ NA*x2 + x3
textual =~ NA*x4 + x5 + x6
speed =~ NA*x7 + x8 + x9 
g =~ NA*x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
# set covariances to zero
visual ~~ 0*textual
visual ~~ 0*speed
visual ~~ 0*g
textual ~~ 0*speed
textual ~~ 0*g
speed ~~ 0*g
# variances to 1
visual ~~ 1*visual
textual ~~ 1*textual
speed ~~ 1*speed
g ~~ 1*g
'

Tom P

unread,
May 17, 2013, 4:28:35 AM5/17/13
to lav...@googlegroups.com
Of course! Many thanks for your fast and helpful response Alex. The two models' output is almost exactly the same, but there are still some small but non-negligible differences for the visual factor (parameter estimates, variances). Any thoughts on what causes these?

Best wishes
Tom Postmes

Tom P

unread,
May 17, 2013, 6:18:04 AM5/17/13
to lav...@googlegroups.com
To clarify: where I said "the two models' output is almost exactly the same" I was referring to these two models:

HS.bifactor.model <- '
visual =~ x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 
g =~ NA*x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
'

HS.bifactor.model2 <- '
visual =~ NA*x2 + x3
textual =~ NA*x4 + x5 + x6
speed =~ NA*x7 + x8 + x9 
g =~ NA*x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
# set covariances to zero
visual ~~ 0*textual
visual ~~ 0*speed
visual ~~ 0*g
textual ~~ 0*speed
textual ~~ 0*g
speed ~~ 0*g
# variances to 1
visual ~~ 1*visual
textual ~~ 1*textual
speed ~~ 1*speed
g ~~ 1*g
'

To give an idea of output differences: all fit indices are identical, but estimates not quite. 

model1:
...
Parameter estimates:
..
Latent variables:
  visual =~
    x2                0.405                               0.405    0.344
    x3                0.201                               0.201    0.178
  textual =~
    x4                0.919                               0.919    0.791
    x5                1.068                               1.068    0.829
..
Variances:
    x2                0.924                               0.924    0.669
    x3                0.769                               0.769    0.603
    x4                0.386                               0.386    0.286
..

And model 2:
..
Parameter estimates:
..
Latent variables:
  visual =~
    x2                0.421                               0.421    0.358
    x3                0.193                               0.193    0.171
  textual =~
    x4                0.919                               0.919    0.791
    x5                1.068                               1.068    0.829
..
Variances:
..
    x2                0.911                               0.911    0.659
    x3                0.772                               0.772    0.606
    x4                0.386                               0.386    0.286
..

Alex Schoemann

unread,
May 17, 2013, 9:15:31 AM5/17/13
to lav...@googlegroups.com
It seems like an issue of local identification to me. The visual factor is under identified with two indicators and only one constraint (you're estimating 4 parameters with 3 pieces of information). The two models do have the same fit information (e.g. minimum of the fit function) and all other parameters are the same.

If you constrain the loadings for visual to be equal (thus identifying the variable), then parameters estimates look the same.


On Thursday, May 16, 2013 3:12:20 PM UTC-5, Tom P wrote:

Tom P

unread,
May 22, 2013, 4:23:58 AM5/22/13
to lav...@googlegroups.com
Many thanks Alex!
Reply all
Reply to author
Forward
0 new messages