Skip to first unread message

Ida Blomqvist

unread,
May 16, 2019, 3:31:00 AM5/16/19
to lavaan
Hi, 
I have a question about permutmeasEq.syntax. In the example script (https://www.rdocumentation.org/packages/semTools/versions/0.5-1/topics/permuteMeasEq) the following code is used;

miout <- measurementInvariance(mod.config, data = HS, std.lv = TRUE, group = "ageGroup") (fit.config <- miout[["fit.configural"]]) (fit.metric <- miout[["fit.loadings"]]) (fit.scalar <- miout[["fit.intercepts"]])

They are later used in performing the measurement invariance test at the different levels (metric, scalar etc) and together with the function uncon and con, depending on level of measurement invariance testing. 

The script above uses the now deprecated measurementInvariance. I'm trying to make the permutations work with the measEq.syntax that is in the semTools 5.0.1, for an ordinal variable thus constraining thresholds instead of intercepts for example. So my question is what is the equivalent script in measEq.syntax to create the fit.config, fit.metric and fit.scalar?

Sincerely
Ida Blomqvist

Terrence Jorgensen

unread,
May 17, 2019, 9:56:27 AM5/17/19
to lavaan
The script above uses the now deprecated measurementInvariance.

It is deprecated, but still there (it works fine, just as it used to). I won't get rid of it for a long time, well after I write a function that automates the fitting of invariance models using measEq.syntax() as an engine for model specification.  I just deprecated it to make users aware early enough to start transitioning (and so no other package developers would be able to rely on a function I plan to eventually get rid of).

I'm trying to make the permutations work with the measEq.syntax that is in the semTools 5.0.1, for an ordinal variable thus constraining thresholds instead of intercepts for example. So my question is what is the equivalent script in measEq.syntax to create the fit.config, fit.metric and fit.scalar?

Look at the help page, which already shows how to fit the configural model, as well as a series of models with increasing levels of invariance.  Granted, the example uses categorical data, so if your indicators are continuous, you can leave out the step that constraints thresholds.

Terrence D. Jorgensen
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam

Ida Blomqvist

unread,
May 17, 2019, 10:27:31 AM5/17/19
to lavaan
Thank you very much for you reply!

I do have categorical data but with the mesurementInvariance() (and not the measurementInvarianceCat() ) it constrains the intercepts instead of the thresholds? At least that was what i understood from the output. 

Sincerely
Ida Blomqvist



Terrence Jorgensen

unread,
May 18, 2019, 3:37:20 AM5/18/19
to lavaan
I do have categorical data but with the mesurementInvariance() (and not the measurementInvarianceCat() ) it constrains the intercepts instead of the thresholds? At least that was what i understood from the output. 

Yes, because measurementInvariance() is only designed for continuous data, and measurementInvarianceCat() is only designed for categorical data (using overly restrictive rules for identification).  If you have categorical data, but you want to test intercept invariance, that must be done AFTER constraining thresholds and loadings.  See examples on the measEq.syntax() help page.
Reply all
Reply to author
Forward
0 new messages