We are pleased to announce the official release of OpenMx version 2.21.13. The last version of OpenMx for which we published an official release announcement was version 2.20.6, in February of 2022. Since then, we have quietly released versions 2.20.7, 2.21.1, 2.21.8, 2.21.10, 2.21.11, and 2.21.12, usually at the request of CRAN.
Click here for instructions on how to install OpenMx version 2.21.13 from our repository. As usual, our repository has a package binary for x86_64 Windows, and a tarball for x86_64 Linux/GNU, both of which come with the proprietary NPSOL optimizer. Our package binaries for macOS are not yet available. Alternately, users--including Mac users--may install the fully open-source build of the new version from CRAN. Users are advised that neither we nor CRAN provide binaries for 32-bit (x86) Windows any longer; version 2.21.8 was our last release with support for 32-bit Windows.
Users of multithreaded builds of OpenMx version 2.21.x should note that, per requirements of CRAN, OpenMx now only uses 1 thread when environment variable OMP_NUM_THREADS
is not set. This change, in effect, constitutes a performance regression in (multithreaded) OpenMx in its on-load default state. To parallelize OpenMx's computation across multiple threads, users should either set that environment variable to a value greater than 1, or increase mxOption "Number of threads" above 1, e.g. mxOption(NULL,"Number of threads",2)
.
New Features and Performance Improvements Since v2.20.6 (February, 2022):
mxCheckIdentification()
is now compatible with definition variables!mxCompare()
is now compatible with all WLS estimators: diagonally weighted least-squares (DWLS), unweighted least-squares (ULS), and full-WLS.mxData()
can now accept dataframes that are tibbles.mxMI()
now returns a dataframe instead of a list, and now also reports expected parameter changes.- The addition operator
+
has now been defined as a binary operator for MxModels: the "sum" of the two "addends" is a new MxModel containing them both. imxRowGradients()
now supports mixture models.- The print method for MxData objects now acknowledges casewise sampling weights (if any).
- The package README file is now more detailed.
Bug-fixes and Tweaks Since v2.20.6 (February, 2022):
- OpenMx now correctly computes the Satorra-Bentler chi-square test statistic.
- Thresholds are no longer improperly counted as observed statistics in raw-data WLS models.
mxCompare()
now requires all MxModels passed to it to have been run. Because some scripts that formerly ran successfully may now raise errors, this is a backwards-incompatible change.mxRefModels()
now correctly accounts for casewise sampling weights.mxGetExpected()
no longer ignores argumentdefvar.row
when used on a multigroup model.mxGetExpected()
no longer fails when the user requests both the mean and covariance from a multigroup model.- When used on a model with the state-space expectation,
mxGenerateData()
now correctly samples from the state-space initial conditions. mxCheckIdentification()
now works when there are linearly dependent equality MxConstraints.- Adding new manifest variables or latent variables to a model of
type="RAM"
that only has one of same no longer fails with an error. - Failed attempts to invert 1x1 matrices in state-space-expectation and WLS-fitfunction code no longer raise a fatal error.
omxReadGRMBin()
no longer fails with non-numeric family and individual IDs.- OpenMx now catches mis-named components of the state-space expectation with a better error message.
- Previously, an attempt to use
mxAutoStart()
ormxFactorScores()
on a multilevel model would fail with unhelpful error messages. The error messages now make clear that use of those two functions with multilevel models is not implemented. - Several minor issues with how the hidden-Markov expectation backend mangages its memory have been resolved.
- The Linux/GNU NPSOL binary's checksum now succeeds with more minor versions of gcc 9, 11, and 12.
- Previously, a bug in the GREML fitfunction's backend sometimes (depending upon the number of available threads and the number of free parameters) caused the expected-information matrix be slightly incorrect. Because the default is to compute the average-information matrix instead, this was a long-standing bug, but it is now repaired.
- A memory-leak in the GREML backend has been patched.
- A minor bug in how OpenMx computes summary statistics for WLS has been corrected.
imxHasWLS()
now properly detects (1) use of ULS, DWLS, and full-WLS; and (2) the case when the user has swapped out the ML fitfunction for the WLS fitfunction.imxHasDefinitionVariable()
no longer returns false negatives when a definition variable appears only in a complicated MxAlgebra.- Attempts to use the WLS fitfunction in a multilevel model now fail with an informative error message.
- Passing argument
empirical=TRUE
tomxGenerateData()
when the model contains definition variables now fails with an informative error message.
Known Issues:
- Some mixture models containing invalid MxAlgebras crash R instead of raising an error.
- Using casewise sampling weights with the state-space expectation crashes R. This issue has been repaired in the OpenMx source repository, and will be repaired in the next OpenMx release.
- OpenMx incorrectly counts the number of observed statistics in mixture models, which prevents
mxCompare()
, the interface to the bootstrap likelihood-ratio test, from functioning correctly. This bug has been repaired in the OpenMx source repository, and will be repaired in the next OpenMx release. omxGetNPSOL()
currently fails with an error. This issue has been repaired in the OpenMx source repository, and will be repaired in the next OpenMx release.- Using
mxFactorScores()
on a matrix-specified RAM model incorrectly fails with an error. - The WLS fitfunction is too slow with full-WLS when sample size and number of exogenous covariates are large.
- Both
mxPenaltySearch()
andmxMI()
are presently incompatible with multigroup models. - OpenMx does not correctly report the degrees-of-freedom for regularized models.
mxGenerateData()
does not always behave sensibly with MxExpectationMixture.- In models of
type="RAM"
, adding a two-headed path between two variables confusingly (and silently) removes any pre-existing one-headed path between those two variables. See here for workarounds for this issue. - When OpenMx does not have enough information to compute a model's RMSEA and TLI, it confusingly reports them in
summary()
output as 0 and 1, respectively. - Renaming mixture models via argument
name
toomxSetParameters()
sometimes fails with the spurious error message "Not implemented yet". - There is currently no way for
mxTryHardOrdinal()
to pass argumentunsafe=TRUE
tomxRun()
during each of its fit attempts. - The help pages for
mxCI()
andmxConstraint()
incorrectly state that OpenMx does not calculate standard errors or the final Hessian matrix when MxConstraints are present in the model. That statement has been incorrect since OpenMx v2.13, released in the spring of 2019. These help pages have been corrected in the OpenMx source repository, and will be correct in the next OpenMx release.
See here for the OpenMx Project's issue tracker.