OpenMx 2.11 released!

New Features, Performance Improvements, and Tweaks Since v2.9.6:

  • A new optimizer, which uses generalized simulated annealing, has been implemented.
  • There are two new functions, omxAkaikeWeights() and mxModelAverage(), for information-theoretic model-averaging and multimodel inference.
  • Two new functions, mxPearsonSelCov() and mxPearsonSelMean(), implement the Pearson-Aitken selection formulae. Both functions are usable in MxAlgebras.
  • There is a new function, mxComputeLoadMatrix(), which constructs an object, to be placed into a custom compute plan, that will load a CSV file directly into the backend.
  • mxSE() is now much faster, made possible by the new mxComputeJacobian(), which creates a compute step to calculate a Jacobian matrix.
  • During interactive R sessions, mxTryHard() now by default suppresses most persistent printing to the console; this behavior is set by argument silent.
  • The columns of the "CI details" table (in verbose summary() output) have been reordered, to make the table more readable.
  • OpenMx now reports WLSM and WLSMV fit statistics for models that use the WLS fitfunction.
  • mxStandardizeRAMpaths() now reports elements of the 'M' matrix, re-scaled to standard-deviation units.
  • mxAutoStart() can now be used with diagonally weighted least squares.
  • mxGenerateData() is now compatible with MxModels that depend on objects in other MxModels, in the same container MxModel.
  • There is now an mxOption, "Max minutes", which (if positive) sets a maximum allowed backend time elapsed, in minutes (the on-load value of this option is 0, meaning no limit, i.e. Inf).
  • mxMatrix() now partially matches the value of its type argument. For instance, type="Ze" is now equivalent to type="Zero".
  • The Jacobian matrix output by omxManifestModelByParameterJacobian() (e.g., as in mxCheckIdentification()) now has dimnames, which make it easier to read.
  • SLSQP can now use multiple threads to calculate its numeric gradient of the GREML fitfunction. It does so automatically, using as many threads as provided by mxOption "Number of Threads".
  • It is now possible to put a checkpointing step into a custom compute plan.
  • By default, OpenMx now allows the Eigen linear-algebra library to use multiple threads.
  • A value of "none" is now accepted for argument scale to mxExpectationHiddenMarkov() and mxExpectationMixture().
  • MxConstraints that depend upon definition variables now throw a warning at runtime.
  • The output of mxPower() is more detailed.
  • When using mxFitFunctionML() with rowDiagnostics=TRUE, the fitfunction object will be populated at runtime by an additional row-wise diagnostic, namely, the per-row squared Mahalanobis distance.

Bug-fixes Since v2.9.6:

  • The major iteration maximum is now enforced per optimization problem, not per call to mxRun(). This bug often caused the last few confidence limits attempted during a run to all be flagged as failing due to the optimizer reaching status BLUE.
  • The on-load-default value of mxOption "mvnRelEps" has been increased to 0.005 from 0.001, which was judged to be too strict, and slowed down OpenMx too much. As a result, threshold models should now run more quickly, though sometimes the user may need to reduce "mvnRelEps" to get a threshold model to converge.
  • A long-standing bug in mxTryHard() has been repaired. This bug caused the final numeric derivatives to be calculated in a different manner with mxTryHard() versus direct mxRun(), for threshold models using the default compute plan. This bug-fix may reduce the frequency of status Red in such cases.
  • mxCompareMatrix() now works correctly.
  • Previously, mxSE() would fail with an error if an R symbol referring to a character string were provided as argument x. A new argument, forceName, can be set to TRUE to force mxSE() to work in such a case.
  • mxBootStrapEvalByName() no longer ignores arguments bq and method.
  • omxGetParameters() now works smoothly with parameter labels in the form 'model.matrix[row,col]'.
  • mxPower() now works smoothly with unlabeled parameters.
  • mxGenerateData() now assumes a mean vector of zero when it is passed an MxModel that does not specify a mean.
  • mxPath() statements that create zero paths no longer throw an error.
  • OpenMx now reports sensible RMSEA confidence intervals for extremely ill-fitting models.
  • AIC and BIC are no longer reported for MxModels fit with WLS, as they are not theoretically coherent outside of a maximum-likelihood context. Additionally, the logLik method now returns NA when used on an MxModel with fit units other than '-2lnL'.
  • Using the GREML expectation with the ML fitfunction now, as originally designed, fits the model by ML, not REML. This repairs a regression introduced in v2.6.
  • The Nelder-Mead optimizer now returns status 10 if the initial simplex is infeasible, instead of throwing a fatal error.
  • A bug has been repaired that could cause segfaults when the Nelder-Mead optimizer was using its "GDsearch" heuristic for MxConstraints.
  • Per-MxModel option names are now case-insensitive.
  • MxModels returned from mxTryHard() now have the 'infoDefinite' element of their output slot populated appropriately.

Known Issues: