You are here

OpenMx 2.9.6 released!

We are pleased to announce the official release of OpenMx version 2.9.6. (update: 2.9.9 is now available - for users, this is near-identical).


Users of Windows and Linux/GNU can install OpenMx v2.9.6 from CRAN with the usual `install.packages("OpenMx").

note: CRAN has not been able to build functioning OpenMx binaries for MacOS since OpenMx v2.9.6.

Advanced MacOS users can still obtain version 2.9.9 source via CRAN, but the Mac onto which you are installing the package must be configured to build it from source.

It is easiest to just install the version the OpenMx team maintain via our own repository. See below.


Click here for instructions on how to install the package from our package repository. As usual, our repository has package binaries for Windows and MacOS, and source tarballs for Linux/GNU, all of which come with the NPSOL optimizer.


The most significant change in this v2.9 release of OpenMx is that it fixes two potentially serious bugs. The first of these was introduced in version 2.7.0 (released January 10th, 2017).

This bug pertains ONLY to joint FIML analysis of both ordinal-threshold and continuous variables: if there was at least one row of the dataset in which all of the continuous variables had missing scores, then OpenMx could incorrectly evaluate the fitfunction, which would result in OpenMx silently returning numerically incorrect results. If you have run a joint ordinal/continuous FIML analysis with OpenMx versions 2.7.x thru 2.8.x, check your dataset to see if there are any rows in which all the continuous endogenous variables are missing (and at least one endogenous binary or ordinal variable is non-missing). If so, re-run your analysis using OpenMx v2.9. We apologize for any inconvenience this serious, but now-repaired, bug may have caused.

The second bug fix concerns CSOLNP. This bug would cause CSOLNP to enter an endless loop when optimizing an MxModel containing MxConstraints.

Third, four memory leaks have been closed: one in OpenMx's interface to SLSQP, one in OpenMx's Nelder-Mead implementation, one in the MxComputeNumericDeriv step, and one in the FIML fitfunction backend for state-space models.

Fourth, a minor bug in OpenMx's interface to SLSQP has been repaired. This bug caused SLSQP to always use the value of the 'Optimality tolerance' mxOption when checking the optimality conditions of a solution subject to MxConstraints. Now, as designed, if a user creating a custom compute plan passes a value for the optimality tolerance to mxComputeGradientDescent() that differs from the option, that different value controls.

Finally, all the known issues in the v2.8.3 release announcement have been resolved.

Version 2.9.6 brings several valuable new features:

  1. Two new functions for power analysis, mxPower() and mxPowerSearch(), have been implemented.
  2. CSOLNP can now use analytic gradients and analytic constraint Jacobians, and can now numerically calculate gradients using the central-differences approximation.
  3. mxGenerateData() and parametric bootstrapping (including the bootstrap LRT) are now compatible with MxExpectationMixture.
  4. Previously, nonparametric bootstrapping was incompatible with the FIML fitfunction when running on a single thread, or when using argument rowwiseParallel=FALSE to mxFitFunctionML().
  5. Now, when the 'maxOrdinalPerBlock' mxOption is too small, the FIML fitfunction backend no longer silently ignores nonzero covariance elements in order to coerce the dimension of a block of correlated ordinal variables to 'maxOrdinalPerBlock' or smaller.
  6. When used on an MxModel that uses GREML expectation, mxGetExpected() now returns a vector of fitted values ("yhats" from feasible-generalized-least-squares regression) for "means", and now filters out rows and columns in the "covariance" matrix that correspond to missing observations.
  7. Bias-corrected bootstrap-quantile confidence intervals will no longer sporadically have a lower limit of -Inf when the number of replications is too small for the desired coverage probability.
  8. The print method for MxPaths has been improved.
  9. Now, mxStandardizeRAMpaths() throws a helpful error message if it detects that the MxModel contains free parameters the labels of which do not appear in the dimnames of the Hessian matrix.
  10. The documentation for mxConstraint() has been clarified regarding analytic constraint Jacobians for inequality constraints, and how MxConstraints interact with definition variables. Additionally, creating a constraint function that depends upon definition variables now raises a warning at runtime.
  11. A potentially confusing typo in an MxExpectationLISREL warning message has been corrected.
  12. It is now possible to build an NPSOL-enabled OpenMx binary with gcc version 7.x.
  13. There is a new function, omxModelDeleteData(), which deletes data from an MxModel and all of its submodels recursively.
  14. The RAM expectation no longer throws a runtime error if all of the diagonal elements of an 'S' matrix are zero (as that can be a reasonable scenario when conducting likelihood-ratio tests with multilevel models).
  15. MxModel summary() output now includes the sample-size corrected AIC.
  16. With argument details=TRUE, imxRobustSE() includes additional details in its output.


Its good that you guys fixed those bugs

When I run the examples for power analysis, i.e., mxPower() and mxPowerSearch(), I get the following error:
Running One Factor with 15 parameters
Error in runHelper(model, frontendStart, intervals, silent, suppressWarnings, :
NPSOL is not available in this build. See ?omxGetNPSOL() to download this optimizer.
What can I do about this?

Hi, Royce. Would you please start a thread in our forums about that?

This all seems fine on the CRAN version (no NPSOL) now.

Version 2.9.6 has been superseded by version 2.9.9, which should be substantially identical from the perspective of the end user.