OpenMx is free open source software for fitting Structural Equation Models (SEM) to observed data. OpenMx offers the features you would expect in an SEM software package. But OpenMx works in ways that will make your modeling jobs easier and will allow you to do things that other SEM packages don't.

- Integration with R -- OpenMx works as an integral part of the R statistical software system. You have available the full power of the R statistical software system for data manipulation, graphics, simulation, and report generation
- Supports Popular Operating Systems -- OpenMx runs on Mac OS X, Windows XP, Windows Vista, and several varieties of Linux. This means the same scripts you write in Windows will run in Mac OS X or Linux. Collaborative teams no longer need to standardize on one platform. Everyone can use the computer they like best.
- Open Source -- OpenMx is open source. That means that at any time you can download and look at the code we wrote. The terms of our license even say that you can use the code in your own programs as long as you acknowledge our authorship of the code you used from us. Sometimes advanced users have been frustrated by SEM programs that don't let you look at the source code. We believe it is better to have many people looking at the code to see if they can find any potential problems. It is our view that the more people download, examine, and use the OpenMx code, the better OpenMx will become.
- Interactive Model Building -- SEM scripting has been pretty much the same since the early 1970's. Back then we used punch cards and paper tape for our scripts, and SEM scripting languages have, ever since followed the same procedure: write a modeling script and submit it to the machine (we used to take decks of cards to the data center), then the program sends you back some errors and you figure out what went wrong with your script. OpenMx changes all that. You can build your model one step at a time and check it interactively as you go along. You can debug your script in small steps without always sending it off for processing and crossing your fingers!
- Model Modification -- As you build your model in OpenMx you can save it as a named variable within R. This means that you can take an existing model and modify only that part of it you want to change in order to make a comparison between models. This makes creating nested comparisons a snap! It is also possible to change only the dataset being analyzed, which makes repetitive analyses such as genome wide association or neuroimaging studies much easier.
- Flexible Reporting -- OpenMx returns the results of your model estimation directly back into R. This means that you can use all of R's reporting functions such as generating tables or graphs of your model parameters or fit statistics. And since multiple models can be run from within R, you can generate tables of comparisons of nested fit statistics all within a single script.
- Multivariate Covariance Modeling -- OpenMx estimates maximum likelihood parameters for models with multivariate outcomes given an observed covariance matrix. Models can be specified to include latent variables. This is the basis of structural equation modeling, and yes, you can fit models such as confirmatory factor models and latent growth curves to observed covariances.
- Covariance Modeling With Means -- You can also use OpenMx to fit models that include means for variables. Models with both observed means and latent means can be specified.
- Full Information Maximum Likelihood -- OpenMx also fits models to raw data using FIML. This is exceedingly powerful, since a likelihood for each observation is calculated. Models for both means and covariances must be specified when using FIML and the resulting calculation is the basis of many of the advanced features of OpenMx
- Missing Data -- Since OpenMx can fit models to raw data, different patterns of missingness in each individual row of the data matrix can be accounted for. When the missingness patterns are not conditional on the outcome variables, FIML accounts for the missingess and returns unbiased estimates.
- Categorical Threshold Estimation -- Models with categorical outcomes can be estimated, including thresholds for the categories.
- Multiple Groups -- Some models involve data from known groups, such as males and females or MZ and DZ twins. OpenMx allows for multiple groups, and even nested groups by creating hierarchically nested models that are estimated simultaneously. Constraints can be applied within and across groups, giving an incredibly powerful way of specifying and accounting for group dependencies.
- Hierarchical Model Definition -- Once you've used the OpenMx hierarchical model definition, it will be hard to go back to other scripting methods. The way you define your model can track the nested groupings in your data, as a tree of models. Dependencies between branches of the tree can be set. Or if the tree branches are independent, you can mark them as such and OpenMx will use your multiple core computer to estimate the independent parts in parallel.
- Multicore Computers -- OpenMx uses OpenMP and the R package Snow to allow the multiple CPU cores in your computer to operate in parallel on a task. These features are built into all FIML algorithms (continuous, ordinal and joint) which can be especially CPU intensive. The number of cores in computers has been doubling every 18 months for the past six years. Eight core machines are common now in high end desktops. In just a few years, you can expect 32 cores in an entry level computer.
- Large Scale Distributed Processing -- Some problems are so large that you just don't have time to wait for a single machine (even with 32 cores) to finish estimating a model. OpenMx integrates with the parallel distributed computing manager Swift to provide access to University parallel computing clusters and very large arrays of computers such as the TeraGrid and Open Science Grid.
- Mixed Effects -- Models with mixed effects (also called HLM Models or Random Coefficients models) can be specified in OpenMx using a feature called
*definition variables*. - Matrix Algebra Calculations -- OpenMx allows you to specify matrix algebra calculations as part of your model. Parameters that are being estimated can be part of these matrix formulae, and so the outcome of the matrix algebra is optimized along with the parameters.
- Parameter Equality Constraints -- Any two parameters can be constrained to be equal to one another simply by making their labels the same as each other. Parameters can be constrained to be equal across groups or between any two models in a hierarchical tree of models.
- Parameter Algebraic Constraints -- Parameters in your models can be constrained to be the outcome of any matrix algebra calculation. In this way, OpenMx lets you constrain your parameters to be linear or nonlinear functions of other parts of your model. It is hard to overstate the power of this capability.
- Nonlinear Inequality Constraints -- In addition to algebraic constraints, OpenMx allows the definition of boundary constraints with respect to constants and with respect to other parameters. For instance, one estimated parameter can be constrained to be greater than another estimated parameter, or functions of other parameters.
- Procedural Model Specification -- Since OpenMx uses the programming language R to build its models, you can build your models using loops or if statements. Thus, the way that the model is built can be dependent on the outcome of previous models, or dependent on some other characteristic of the data, or dependent on interactive input from a user. This capability is far, far from the old punch card model of SEM scripting. Let's just say, this ain't your parents' SEM program!
- User Specified Functions for Model Specification -- Since R allows users to easily write their own functions, you can create OpenMx model functions. For instance, maybe you use a lot of Latent Growth Curve models. Write a function that builds LGC models. From then on, you can just call your own LGC model function and have the model built with the number of indicators and time scaling appropriate to some new data set. Easy!
- User Specified Objective Functions -- OpenMx A variety of objective functions (such as ML, FIML, LISREL, RAM and GREML) are built in. But you can write your own objective function in R and pass it to the optimizer. This means that advanced users can quickly try out new and interesting objective functions without having to write any C or Fortran code.
- Community Wiki and Forums -- This web site provides a User Wiki and Forums for OpenMx. These are places to share what you know about SEM and OpenMx, to share the functions you've written, or to find answers to questions or download the functions that other people are sharing. As a scientific community we all prosper when we share our expertise and our results!

- More Convenient Mixture Distribution Modeling
- Better User Interface for Multilevel Modeling
- Graphical User Interface: See Onyx