Check multi-factor, higher-order, and bi-factor model

99 views
Skip to first unread message

Hyeseung Koh

unread,
Dec 1, 2023, 2:28:30 AM12/1/23
to lavaan
Hello, I have a series of question regarding a confirmatory factor analysis.
The factor was measured using a likert-type scale. 
Please check the notation of the R syntaxes below and let me know whether it is correct or incorrect. When incorrect, please also let me know how to correct. 

I examined the following three models, 
a multi-factor model with a syntax for it; Let's call it #model1
a higher-order model with 2 distinct syntaxes for it; Let's call it #model2 and #model3
a bi-factor model with 2 distinct syntaxes for it; Let's call it #model4 and #model5

#model1
m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items

factor1 ~~ factor2 + factor3
factor2 ~~ factor3

factor1 ~~ 1*factor1
factor2 ~~ 1*factor2
factor2~~ 1*factor2'

#model2
m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items
factor =~ 1*factor1 + 1*factor2+ 1*factor3
factor ~~ factor'


#model3
I also have an alternative higher-order model

m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items
factor =~ NA*factor1 + factor2+ factor3
factor ~~ 1*factor'


#model4
m  <- 'factor1 =~ NA*item 1 and the sum of the factor1 items 
factor2 =~ NA*item 2 and the sum of the factor2 items
factor3 =~ NA*item 3 and the sum of the factor3 items 
factor =~ NA*item1+ the sum of the factor1-3 items

factor1 =~ 0*factor2+ 0*factor3+ 0*factor
factor2 =~ 0*factor3 + 0*factor
factor3 =~ 0*factor

factor1 ~~ 1* factor1
factor2 ~~ 1* factor2
factor3 ~~ 1* factor3
factor ~~ 1* factor'


#model5
I also have an alternative bi-factor model

m  <- 'factor1 =~ the sum of the factor1 items 
factor2 =~ the sum of the factor2 items; each factor loading is fixed by a
factor3 =~ the sum of the factor3 items; each factor loading is fixed by b
factor =~ the sum of the factor1-3 items'


fit <- cfa(m, data=name, std.lv=TRUE)
summary(fit, fit.measures=TRUE, standardized=TRUE)

Daniel Morillo Cuadrado

unread,
Dec 1, 2023, 3:45:26 AM12/1/23
to lav...@googlegroups.com
Hi Hyeseung, please find some comments below.

--
Daniel Morillo, Ph.D.
GitHub | ORCID


El vie, 1 dic 2023 a las 8:28, Hyeseung Koh (<thedinosa...@gmail.com>) escribió:
#model1
m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items

factor1 ~~ factor2 + factor3
factor2 ~~ factor3

factor1 ~~ 1*factor1
factor2 ~~ 1*factor2
factor2~~ 1*factor2'

Correct
 
#model2
m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items
factor =~ 1*factor1 + 1*factor2+ 1*factor3
factor ~~ factor'


The reference you take it from gives a specific example where you only have two first-order items. In that case, you need those constraints, but here you have a different case, as you have three first-order factors, so the loadings do not need (or should not, unless you have a good reason to do so) to be constrained to be equal. Therefore, it's better if you estimate them freely and fix the variance of the second-order factor instead, as you do in #model3.

#model3
I also have an alternative higher-order model

m <- 'factor1 =~ the sum of factor1 items
factor2 =~ the sum of factor2 items
factor3 =~ the sum of factor 3 items
factor =~ NA*factor1 + factor2+ factor3
factor ~~ 1*factor'


Correct

#model4
m  <- 'factor1 =~ NA*item 1 and the sum of the factor1 items 
factor2 =~ NA*item 2 and the sum of the factor2 items
factor3 =~ NA*item 3 and the sum of the factor3 items 
factor =~ NA*item1+ the sum of the factor1-3 items

factor1 =~ 0*factor2+ 0*factor3+ 0*factor
factor2 =~ 0*factor3 + 0*factor
factor3 =~ 0*factor

factor1 ~~ 1* factor1
factor2 ~~ 1* factor2
factor3 ~~ 1* factor3
factor ~~ 1* factor'


When you want to specify a bi-factor model, what you actually specify is that the factors are "uncorrelated". What you are specifying in the three `factor#=~'  sentences is that left-side factors do not "load" on the right-side one. The correct specification would be:

factor1 ~~ 0*factor2+ 0*factor3+ 0*factor
factor2 ~~ 0*factor3 + 0*factor
factor3 ~~ 0*factor

#model5
I also have an alternative bi-factor model

m  <- 'factor1 =~ the sum of the factor1 items 
factor2 =~ the sum of the factor2 items; each factor loading is fixed by a
factor3 =~ the sum of the factor3 items; each factor loading is fixed by b
factor =~ the sum of the factor1-3 items'


In this case, you are missing the specification that the factors need to be uncorrelated; the specification would be the same as in the previous model:

factor1 ~~ 0*factor2+ 0*factor3+ 0*factor
factor2 ~~ 0*factor3 + 0*factor
factor3 ~~ 0*factor

Hyeseung Koh

unread,
Dec 1, 2023, 9:36:04 AM12/1/23
to lavaan
Hello, Daniel Morillo

I have checked your comment and explanation. 
I have two points to further check.

i) It is the CFA. I am not sure whether fixing the loadings in #model2 could be pre-determined. 

ii) Regarding #model4-5, are the 'by' and 'with' functions in Mplus applicable to lavaan? 

2023년 12월 1일 금요일 오전 3시 45분 26초 UTC-5에 danielmo...@gmail.com님이 작성:

Daniel Morillo Cuadrado

unread,
Dec 1, 2023, 10:00:20 AM12/1/23
to lav...@googlegroups.com
Hi again Hyeseung,

El vie, 1 dic 2023 a las 15:36, Hyeseung Koh (<thedinosa...@gmail.com>) escribió:
i) It is the CFA. I am not sure whether fixing the loadings in #model2 could be pre-determined. 

I don't understand your question I'm afraid, sorry. Do you mean that this is a CFA model? The syntax corresponds to a second-order CFA for what I can tell, and applying the changes I suggest is the same as estimating #model3.
 
ii) Regarding #model4-5, are the 'by' and 'with' functions in Mplus applicable to lavaan? 

'by' in lavaan is '=~' and 'with' is ' ~~', your lavaan syntax is correct in that respect.
 
--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/lavaan/3d7e808e-443b-4529-9544-e5374078095fn%40googlegroups.com.

Hyeseung Koh

unread,
Mar 7, 2024, 7:53:08 AM3/7/24
to 'Stijn Debrouwere' via lavaan
Hello Daniel Morillo,

It meant the Confirmatory Factor Analysis. The #model1-5 belong to the CFA. Please check my initial posting, my response to your initial response, and your follow-up response prior to this response. Please let me know whether you need further clarification. 

"Unauthorized publication, use, distribution, printing or copying of the content in my message and its attachments is strictly prohibited.”

Reply all
Reply to author
Forward
0 new messages