Starting values

2 replies [Last post]
brandmaier's picture
Offline
Joined: 02/04/2010

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

mspiegel's picture
Offline
Joined: 07/31/2009
This is a tricky one.

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.

brandmaier's picture
Offline
Joined: 02/04/2010
I agree with all your points.

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.