Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Independent EFA rotation in groups with equal loadings constraint. #323

Open
alyst opened this issue Mar 4, 2024 · 1 comment
Open

Independent EFA rotation in groups with equal loadings constraint. #323

alyst opened this issue Mar 4, 2024 · 1 comment

Comments

@alyst
Copy link

alyst commented Mar 4, 2024

When I look at the sem(..., group=..., group.equal="loadings", rotation="geomin") results -- I observe that the loadings for the groups are different, while the unrotated loadings are the same.
Also, in the lav_model_efa_rotate_x() code I don't see checks for group.equal.
I think, in most situations, when group.equal="loadings" is requested, it is expected that the rotations in the groups should be also equal (given that the final unrotated EFA blocks are equal between the groups).
Alternatively, to better control the behaviour, group.equal could support a "rotations" option, which would explicitly instruct to rotate the EFA blocks in the same way if they are equal between the groups (in case the user have put explicit equality constrains for the loadings in the model without specifying group.equal="loadings").

@TDJorgensen
Copy link
Contributor

TDJorgensen commented Mar 6, 2024

I observe that the loadings for the groups are different

It can be helpful to illustrate with a reprex (e.g., using the ?cfa data as an example).

while the unrotated loadings are the same

Those are the estimates: the ones that the optimizer chooses as the best solution to minimize discrepancies between observed and predicted covariance matrices. A rotated solution is a transformation; analogously, a standardized solution is a transformation of the estimates.

(Longitudinal) invariance constraints were discussed briefly in a recently published tutorial on ESEM in lavaan. The authors correctly note that invariance constraints apply to the unrotated estimates, which can only be guaranteed for a post-estimation rotated solution in the case of full longitudinal invariance. In the case of longitudinal invariance (i.e., data are all in one group, and invariance is imposed across factors that are repeatedly measured), the ESEM identification constraints include fixing latent variances = 1 in all efa()* "blocks".

I suspect that this might go awry for group invariance only when you use the group.equal= argument, which then triggers lavaan to free the latent variance in all but the first group. If variances can differ already in the unrotated solution, then the rotation is probably finding a different solution because the unrotated loadings have a different interpretation when they are(not) conditional on additionally assuming of latent homoskedasticity (an assumption you could impose by manually labeling your loadings instead of using the group.equal= shortcut). This is a point that the tutorial did not bring up (because it was not really a tutorial about invariance).

I hope you can see that the idea of invariance in EFA/ESEM is not straight-forward. I am not aware of any multigroup rotation methods that respect invariance, which I think this is an area of active development. I believe Kim de Roever is currently supervising a project investigating the combination of EFA with the alignment approach (the latter is a rotation method for configural models used to achieve partial invariance). But even there, I think there are different implications for different orders (i.e., align the unrotated EFA solution, then rotate? or rotate the EFA solution, then use alignment?).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants