Just a quick question: is it possible to do a multi level analysis with OpenMx?
Does Onyx stretch to specifying multilevel SEM models — and save the code for the model to be run in OpenMx?
somehow I was sure that I will receive automatic e-mail notifications about replies to my post, and discovered your replies only now. I apologize.
Thank you very much for the answers and for the link to the article! I am reading it now.
A slightly longer reply: yes, see Mehta PD, Neale M.C. (2005). People are variables too: multilevel structural equations modeling. Psychological Methods. 10(3):259-84. Available here: http://www.vipbg.vcu.edu/vipbg/neale-articles.shtml
That article used classic Mx, but OpenMx has equivalent capabilities; indeed model specification may be simpler in OpenMx.
Mike, et al.,
In above referenced paper, some mention is made of multiple group/cluster models vis a vis general; SEM approaches. At a glance, I was uncertain whether Paras and Neale imply that OpenMx is currently set up for growth curves for multiple groups; it does not say this explicitly. Guessing...probably OpenMx is not fully set up to do this yet? It seems to me that if all equality constraints can be set in general in Openmx, (which I know they can be because I used the program for my class this semester with a little help from Steve) that it should be a relatively simple matter to set them up for multiple data frames. I'm less certain what happens with computing the fit statistics... For what it is worth, I am 'seeing this' as I would do it in LISREL code; I'm uncertain if the same programming structures apply. Any comment/resources on this?
I am helping a colleague with an NIH proposal today and want to specific OpenMx as an preferred program, but his questions really require a multiple group growth curve approach.
Yes, multigroup LGC models can be specified in OpenMx. There are several ways to do this.
The first way is to create multiple dataframes, one for each group. Then, create a model for each group (probably as copies of the same prototype model). Finally, you add all of the models into a "parent model" with an mxAlgebraObjective that adds up the function values from the two "child models". So, suppose you had created an LGC mxModel for each of two groups and the mxModels were named named "male" and "female" both as R variables and within the mxModel() statement. It would look like this:
male <- mxModel("male", ... your LGC model definition here ...)
female <- mxModel("female", ... your LGC model definition here ...)
sumModel <- mxModel("sumModel", male, female,
mxAlgebra(male.objective + female.objective, name="minus2sumLL"),
sumModelFit <- mxRun(sumModel)
Of course, you could constrain parameters in the mxModel "male" to be equal to those in "female" or release those constraints.
This method has the advantage of being able to debug your male and female models separately, since they could run on their own. Then you can add them together in the sumModel and get the multigroup case.
The short answer is "Yes".
At this point it is a bit cumbersome to specify, and we are working on some more efficient code for the estimation. But it is possible and it's not terribly difficult. I believe Tim Brick is working on an article to describe the process in more detail.