Thu, 06/16/2011 - 09:59

Hi all,

I am trying to fit a model including three simple latent change regressions with covarying predictors and two latent change scores having direct effects onto the third latent change score. Unfortunately, the optimizer ends up with a non-positive sd covariance matrix. Some of the predictors are rather highly correlated (r ~ .8) and I was thinking wether this failure might be due to predictor multicollinearity. However, Mplus finds a solution! I was wondering if there are some default settings making the OpenMx model different from the Mplus model but I didn't figure it out. Setting the covariances to zero makes the two models (OpenMx and Mplus) look completely the same.

Atached please find the code.

Attachment | Size |
---|---|

xMultColPred.R | 2.45 KB |

My knowledge of Mplus is entirely secondhand. Which is another way of saying I don't know very much about Mplus. But I thought that Mplus will assume that some or all free parameters are non-negative values. In OpenMx you would need to explicitly specify this bound by using the "lbound" argument to the mxMatrix() function and give your free parameters a lower bound of 0.0.

Hi berlinator,

I don't think that an observed correlation near 0.80 should cause any problems. In my experience, correlations need to be in excess of 0.95 to be problematic.

In general, OpenMx does not have default settings that alter the model you specify to make it a model that we think you mean. The philosophy for the user interface for OpenMx is What You See Is What It Does. It is, in my experience, much more likely that Mplus has default settings that allow the model to run, and OpenMx lacks these default settings. Alternatively, there are likely to by typos resultant from translation.

I looked over your code and found a number of possible factors that might contribute to a non-positive definite covariance matrix. In one case a path from deltaX to deltaZ was given the same name as a path from deltaY to deltaZ. They were both called rdXdZ, which I assume is a typo. In another case, one path was specified in two different places and under two different names: the two-headed path from y1 to z1 was called YcovYZ and covYZ and both paths were to be freely estimated.

The model with these modifications runs, but is not a particularly good fit: it returns an mxStatus Code 6 (the model has not converged and no improvement in fit could be made). I would guess that the fit is not very good because the model implies that the covariances between x1 and y1, x1 and y2, x2 and y1, and x2 and y2 are all zero. So I am not sure that the model that I modified is the model you intended, but it is a model with a positive definite covariance matrix.

I've attached the code that I edited. Take a look at it and change it, if it is not the model you intended.

Best,

Mike Hunter

Hi Mike,

thanks a lot for your answer. I was really looking out for typos before loading the code up. Obviously, I wasn't thorough enough - sorry for that! The model specification is of course another story that I am going to answer based on theoretical considerations. Thanks for the help again,

Hannes