Set-ESEM with multiple target rotation matrices.

84 views
Skip to first unread message

Hans Chung

unread,
Mar 26, 2026, 7:56:02 AM (10 days ago) Mar 26
to lavaan
Hi I am seeking to do a Set-ESEM as described by Marsh & Alamar (2024) using lavaan in order to replicate Fan et. al.'s (2023) implementation using MPLUS (see Supplemental A) to compare self report vs machine-predicted personality scores

The model has 2 sets and will implement target rotation on each set to constrain the factor loadings based on a priori knowledge that primary facets should not load on secondary factors.

Is this the correct syntax to ensure both sets are rotated based on the target matrice?
fit <- sem(model = model,  data = data, estimator = "MLR",
                   rotation = "target", 
                    rotation.args = list(target = list(target, target)))

Target and model setup below:
target <- matrix(0, nrow = 30, ncol = 5)
target[1:6, 1] <- NA    # O facets
target[7:12, 2] <- NA   # C facets  
target[13:18, 3] <- NA  # E facets
target[19:24, 4] <- NA  # A facets
target[25:30, 5] <- NA  # N facets

model <- '
efa("SlfRprt")*O +
efa("SlfRprt")*C +
efa("SlfRprt")*E +
efa("SlfRprt")*A +
efa("SlfRprt")*N  =~ O1_sr + O2_sr + ... ... N2_sr + ...

efa("Mchn")*O +
efa("Mchn")*C +
efa("Mchn")*E +
efa("Mchn")*A +
efa("Mchn")*N  =~ O1_m + O2_m + ... ... N2_m + ...

O1_sr ~~ O1_m
... ...
'


Hans Chung

unread,
Apr 1, 2026, 3:13:00 AM (4 days ago) Apr 1
to lavaan
I have further tested if the target rotation matrices are being applied by reversing the sets in the model (Mchn first then SlfRprt) to see if the results are the same. They differed so i suspect only the first matrice is being applied as Marsh & Alamar described.

I did note that in version 0.6-18EFA: target argument in rotation.args can now be a list with separate matrices per group. So I'm not sure if this refers to something else or if my rotation.args syntax is wrong?

Appreciate if anyone has insight to this thank you!

Michal Kohút

unread,
Apr 2, 2026, 11:44:10 AM (2 days ago) Apr 2
to lavaan
Hello! I have a similar issue. I tried using two matrices, but only the first one is applied to both sets in set-ESEM. It works in my case because both sets and therefore the matrices are identical. However, when I tried another model with a different number of items, it returned an error:  nrow(target) != nrow(A). I tried different solutions, but nothing worked for me.  

Dátum: streda 1. apríla 2026, čas: 9:13:00 UTC+2, odosielateľ: hanschu...@gmail.com

Yves Rosseel

unread,
Apr 3, 2026, 11:01:18 AM (yesterday) Apr 3
to lav...@googlegroups.com
I am afraid this is currently not possible. There can only be a single
target matrix for all sets (for now). I will have to think about how to
handle this.

Could you open an issue about this on github, so we do not forget?

https://github.com/yrosseel/lavaan/issues

Yves.


On 3/26/26 12:46, Hans Chung wrote:
> Hi I am seeking to do a Set-ESEM as described by Marsh & Alamar (2024)
> <https://bpspsychub.onlinelibrary.wiley.com/doi/10.1111/
> bmsp.12336> using lavaan in order to replicate Fan et. al.'s (2023)
> <https://supp.apa.org/psycarticles/supplemental/apl0001082/
> apl0001082_supp.html> implementation using MPLUS (see Supplemental A) to
> compare self report vs machine-predicted personality scores
>
> The model has 2 sets and will implement target rotation on each set to
> constrain the factor loadings based on a priori knowledge that primary
> facets should not load on secondary factors.
> *
> *
> *Is this the correct syntax to ensure both sets are rotated based on the
> target matrice?*
> fit <- sem(model = model,  data = data, estimator = "MLR",
>                    rotation = "target",
>                     rotation.args = list(target = list(target, target)))
>
> *Target and model setup below:*
> target <- matrix(0, nrow = 30, ncol = 5)
> target[1:6, 1] <- NA    # O facets
> target[7:12, 2] <- NA   # C facets
> target[13:18, 3] <- NA  # E facets
> target[19:24, 4] <- NA  # A facets
> target[25:30, 5] <- NA  # N facets
>
> model <- '
> efa("SlfRprt")*O +
> efa("SlfRprt")*C +
> efa("SlfRprt")*E +
> efa("SlfRprt")*A +
> efa("SlfRprt")*N  =~ O1_sr + O2_sr + ... ... N2_sr + ...
>
> efa("Mchn")*O +
> efa("Mchn")*C +
> efa("Mchn")*E +
> efa("Mchn")*A +
> efa("Mchn")*N  =~ O1_m + O2_m + ... ... N2_m + ...
>
> O1_sr ~~ O1_m
> ... ...
> '
>
>
> --
> 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
> <mailto:lavaan+un...@googlegroups.com>.
> To view this discussion visit https://groups.google.com/d/msgid/
> lavaan/1184e3ce-2b15-42a3-af95-c3b6bd220528n%40googlegroups.com
> <https://groups.google.com/d/msgid/lavaan/1184e3ce-2b15-42a3-af95-
> c3b6bd220528n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Reply all
Reply to author
Forward
0 new messages