Starting values

Posted on
Picture of user. brandmaier Joined: 02/04/2010
Forums
Hi all!

When reading through the optimization innards of OpenMx, I came across this piece of code:

in npsolWrap.c, l.356:

if((x[k] == 0.0) && !disableOptimizer) {
x[k] += 0.1;
}

If I am not mistaken, the array x holds the starting values at that time point. I presume that this if-clause is included in order to avoid some "bad" starting conditions of the model-implied covariance matrix. However, shouldn't users be informed or warned that the model is actually fitted with different starting values than those they had specified?

best regards,
Andreas

Replied on Tue, 04/10/2012 - 11:52
Picture of user. mspiegel Joined: 07/31/2009

This is a tricky one.           

As a matter of principle, I agree that we should be informing the user that we jiggled their starting values away from 0.0. However, there are a couple of caveats in this particular case:

  • Not performing this step results in a lot of non-positive-definite errors.
  • We could issue a warning(). My opinion is that warnings are useless, because programmers tend to ignore them.
  • We could just print some text to the console. I don't really like this either.
  • We could add an mxOption() to disable this behavior. And/or we could add an informational message to the summary() output.

In any case, we should probably document this behavior in the ?mxRun() file.

Replied on Tue, 04/10/2012 - 12:10
Picture of user. brandmaier Joined: 02/04/2010

In reply to by mspiegel

I agree with all your points.

I like the mxOption() very much. I can imagine having the possibility for specifying a "behavior" for start values, which in the long run could be, e.g.:

- "default": use the user-specified starting values (with clever improvements, like altering zeros)
- "force-user-specified-values": use the user-specified values no matter how bad they behave
- "least-squares": use least-squares estimates to override the user-specified start values
- "help-me-dear-openmx-gods": provide some clever estimates, if user has no clue, at all. Like setting variances to .5, covariances to .1 and loadings to 1.0. Or anything that is more clever.