Geomin rotation with epsilon = 0.50 - No longer available in lavaan 0.6-19?

99 views
Skip to first unread message

Adrian Garcia Selva

unread,
Dec 26, 2024, 5:15:50 AM12/26/24
to lavaan
Hello lavaan group

First of all, thanks to all members of this community for the fantastic help and support with the lavaan package.

I was trying to replicate this code from Marsh and Alamer (https://doi.org/10.1111/bmsp.12336) to run a set-ESEM in lavaan (version 0.6-19), in which they use a geomin rotation with an epsilon value of 0.50.

library(lavaan) Study_2_data_for_sharing <- read.csv("Study 2 data for sharing.csv") esem2.config <- ' ## Time 1 Set-ESEM efa("time1")*SelfConfidenceT1 =~ SelfConf1T1 + SelfConf2T1 + SelfConf3T1 + SelfConf4T1 + Intr1T1 + Intr2T1 + Intr3T1 + Auton1T1 + Auton2T1 + Auton3T1 + Auton4T1 efa("time1")*IntrinsicT1 =~ SelfConf1T1 + SelfConf2T1 + SelfConf3T1 + SelfConf4T1 + Intr1T1 + Intr2T1 + Intr3T1 + Auton1T1 + Auton2T1 + Auton3T1 + Auton4T1 efa("time1")*AutonomyT1 =~ SelfConf1T1 + SelfConf2T1 + SelfConf3T1 + SelfConf4T1 + Intr1T1 + Intr2T1 + Intr3T1 + Auton1T1 + Auton2T1 + Auton3T1 + Auton4T1 ## Time 2 Set-ESEM efa("time2")*SelfConfidenceT2 =~ SelfConf1T2 + SelfConf2T2 + SelfConf3T2 + SelfConf4T2 + Intr1T2 + Intr2T2 + Intr3T2 + Auton1T2 + Auton2T2 + Auton3T2 + Auton4T2 efa("time2")*IntrinsicT2 =~ SelfConf1T2 + SelfConf2T2 + SelfConf3T2 + SelfConf4T2 + Intr1T2 + Intr2T2 + Intr3T2 + Auton1T2 + Auton2T2 + Auton3T2 + Auton4T2 efa("time2")*AutonomyT2 =~ SelfConf1T2 + SelfConf2T2 + SelfConf3T2 + SelfConf4T2 + Intr1T2 + Intr2T2 + Intr3T2 + Auton1T2 + Auton2T2 + Auton3T2 + Auton4T2 ## The structural model SelfConfidenceT2 ~ SelfConfidenceT1 IntrinsicT2 ~ IntrinsicT1 AutonomyT2 ~ AutonomyT1 L2_achievement ~ SelfConfidenceT1 + IntrinsicT1 + AutonomyT1 + SelfConfidenceT2 + IntrinsicT2 + AutonomyT2 ## Residual correlations SelfConf1T2 ~~ SelfConf1T1 SelfConf2T2 ~~ SelfConf2T1 SelfConf3T2 ~~ SelfConf3T1 SelfConf4T2 ~~SelfConf4T1 Auton1T2 ~~ Auton1T1 Auton2T2 ~~ Auton2T1 Auton3T2 ~~ Auton3T1 Auton4T2 ~~ Auton4T1 Intr1T2 ~~ Intr1T1 Intr2T2 ~~ Intr2T1 Intr3T2 ~~ Intr3T1 ' out2.config <- sem(model = esem2.config, data = Study_2_data_for_sharing, estimator = "MLR", # verbose = TRUE, rotation = "geomin", rotation.args = list(geomin.epsilon = 0.5)) summary(out2.config, standardized = TRUE, fit.measures = TRUE)

However, the following error appears when I run the code:

Error: lavaan->lav_options_check(): Value(s) of option rotation.args$geomin.epsilon out of range (0 < x <= 0.01)!

Marsh and Alamer used lavaan version 0.6-17. Also, in a recent post in the lavaan Google group, a user claimed to use epsilon values of 0.50 (link to post: EFA rotation: lavaan support for oblimin gamma and geomin epsilon).

Therefore, and considering the error message provided by lavaan when trying to use an epsilon value of 0.50, is it no longer possible to use epsilon values for geomin rotation greater than 0.01?

Thank you very much for your help!

Best regards

Yves Rosseel

unread,
Dec 31, 2024, 9:31:58 AM12/31/24
to lav...@googlegroups.com
On 12/26/24 11:15, Adrian Garcia Selva wrote:
> Error: lavaan->lav_options_check(): Value(s) of option
> rotation.args$geomin.epsilon out of range (0 < x <= 0.01)!

In 0.6-19, we added a much stricter check on the range of parameter
values. Note that in theory, the geomin epsilon should be chosen as
small as possible. It is only added for numerical stability, and the
original version (by Yates) had epsilon=0. If you use epsilon=0.50, you
are not using geomin, but something else (which I suspect is closer to
oblimin).

But well, I did adjust the range to [0, 1] in the github version.

Yves.
Reply all
Reply to author
Forward
0 new messages