BI-Factor EFA

General help and assistance with jamovi. Bug reports can be made at our issues page: https://github.com/jamovi/jamovi/issues . (If you're unsure feel free to discuss it here)
Post Reply
User avatar
ecelik
Posts: 10
Joined: Thu Feb 13, 2025 9:21 am

BI-Factor EFA

Post by ecelik »

Hello,

I replicated the bifactor EFA example from Muthén & Muthén using SEMLj (jamovi). While all fit indices are identical to the Mplus results, I observe small differences in factor loadings and standard errors.

The SEMLj syntax used is:

Code: Select all

efa("efa1")*FG +
efa("efa1")*FF1 +
efa("efa1")*FF2 =~
y1 + y2 + y3 + y4 + y5 + y65 + y6 + y7 + y8 + y9 + y10
FG  ~~ 0*FF1
FG  ~~ 0*FF2
FF1 ~~ 0*FF2
Rotation: Geomin
Geomin epsilon: 0.0001

The model specifies a bifactor structure with one general factor (FG) and two specific factors (FF1, FF2), constrained to be orthogonal.

Given that the fit indices are identical, could the small discrepancies in loadings and SEs be attributed to:
  • Numerical optimization in Geomin rotation
  • Differences in starting values or rotation algorithms (GPA vs. Mplus defaults)
  • Factor scaling or sign indeterminacy
  • Numerical computation of standard errors
Is it expected in bifactor EFA / ESEM frameworks that parameter estimates differ slightly while model fit remains identical?

Any insights would be greatly appreciated.

Thank you.

Mplus: https://www.statmodel.com/usersguide/chap5/ex5.29.html
SEMLj: https://drive.google.com/file/d/1ceoDYC ... sp=sharing
Attachments
mplus_ex.omv
(412.01 KiB) Downloaded 7429 times
semlj1.png
semlj1.png (71.67 KiB) Viewed 6009 times
User avatar
mcfanda@gmail.com
Posts: 580
Joined: Thu Mar 23, 2017 9:24 pm

Re: BI-Factor EFA

Post by mcfanda@gmail.com »

I do not have access to Mplus (it's not open source). Did you try to check the results with R lavaan?
User avatar
ecelik
Posts: 10
Joined: Thu Feb 13, 2025 9:21 am

Re: BI-Factor EFA

Post by ecelik »

Dear Prof. Gallucci,
Thank you very much for your response.
Yes — I replicated the analysis in R using lavaan.
I'm sharing the lavaan and SEMLj syntax I used with you.
I’d be very grateful for suggestions.
Thanks again!

Code: Select all

#SEMlj Bifactor ESEM
efa("efa1")*FG +efa("efa1")*FF1 +efa("efa1")*FF2 
=~y1 + y2 + y3 + y4 + y5 +y6 + y7 + y8 + y9 + y10
FG  ~~ 0*FF1
FG  ~~ 0*FF2
FF1 ~~ 0*FF2

Code: Select all

#lavaan Bifactor ESEM
#Read  data Mplus example  bi-factor EFA
ex5.29 <- read.table("http://statmodel.com/usersguide/chap5/ex5.29.dat")
names(ex5.29) = paste0("y",1:10)

#install packages
library(lavaan)
library(lavaanPlot)
library(GPArotation)
library(semTools)

#Define EFA block
model.BESEM <- '
  efa("efa1")*FG +
  efa("efa1")*F1 +
  efa("efa1")*F2 =~ y1+y2+y3+y4+y5+y6+y7+y8+y9+y10
  '
#fit.BESEM
fit.BESEM <- cfa(
  model = model.BESEM,
  data = ex5.29,
  estimator = "ML",
  rotation = "bigeomin",
  rotation.args = list(
    rstarts = 30,
    algorithm = "gpa",
    orthogonal = TRUE,
    std.ov = TRUE,
    geomin.epsilon = 0.0001
  ),
)
  summary(fit.BESEM, standardized = TRUE)
  #BifactorESEM graph 
  lavaanPlot(name = "BifactorESEM",
             model = fit.BESEM)
Attachments
mplus_BF.omv
(441.55 KiB) Downloaded 1576 times
bifactor_esem.R
(789 Bytes) Downloaded 1579 times
User avatar
ecelik
Posts: 10
Joined: Thu Feb 13, 2025 9:21 am

Re: BI-Factor EFA

Post by ecelik »

User avatar
mcfanda@gmail.com
Posts: 580
Joined: Thu Mar 23, 2017 9:24 pm

Re: BI-Factor EFA

Post by mcfanda@gmail.com »

What was the correspondence between lavaan and SEMLj?
Post Reply