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".
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.
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.
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.
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.
OpenMx does not consistently report the "active box constraints" diagnostic for substantially equal confidence limits calculated with different optimizers. This issue will be fixed in the next release.
CSOLNP can still slow to a crawl on some constrained optimization problems. This issue was believed to have been resolved in v2.9.6, but apparently it was not.