Stas Kolenikov <[email protected]> is using -_optimize_evaluate()- after
calling -optimize_init_params()- with a different set of parameter values than
the original starting values:
> I try to implement some sort of random search over the parameter space
> to supply good starting values in my Mata -optimize- problem, and I
> was hoping to use -optimize_evaluate()- for that purpose. My
> understanding, from the manual, was that it takes the initial values
> (supplied by -optimize_init_params()-), computes the function and
> posts the results into (the Mata structure visible as)
> -optimize_result*()-. As it does not perform any optimization, the
> init_params and result_params should be the same. However, they are
> not:
>
> : optimize_init_params(Sth, uniform(1,2) )
>
> : optimize_init_params(Sth )
> 1 2
> +-----------------------------+
> 1 | .0087578271 .3072360181 |
> +-----------------------------+
>
> : _optimize_evaluate(Sth)
> b12 = .0581941, b13 = .690081, theta1 = -.0485678, log-likelihood =
> -7.07196
> 0
>
> : optimize_result_params( Sth )
> 1 2
> +-----------------------------+
> 1 | .0581940888 .6900808689 |
> +-----------------------------+
>
> : optimize_init_params(Sth, uniform(1,2) )
>
> : optimize_init_params(Sth )
> 1 2
> +-----------------------------+
> 1 | .4972361468 .8971257419 |
> +-----------------------------+
>
> : _optimize_evaluate(Sth)
> b12 = .0581941, b13 = .690081, theta1 = -.0485678, log-likelihood =
> -7.07196
> 0
>
> : optimize_result_params( Sth )
> 1 2
> +-----------------------------+
> 1 | .0581940888 .6900808689 |
> +-----------------------------+
>
> The vector (0.058, 0.690) is what was there before (after a painful
> non-convergent minimization attempt with lots of problematic numeric
> derivatives), and it looks like -optimize_evaluate()- just ignored the
> starting values I gave.
>
> Am I missing something, or is it a bug? Stata 11 is fully up to date.
This is unintentional behavior (Stata 11 only), and should be fixed in the
next ado-file update.
You are unlikely to encounter this unless you are doing something
sophisticated with -optimize()-, namely using -optimize_evaluate()- to search
for alternative starting values like Stas intends.
In the mean time, Stas can use the following NOT-documented function
(void) optimize_reset_params(S, params)
This function resets the parameters used in the call to the evaluator,
where-as -optimze_init_params()- was only changing the "initial" parameter
values.
The "initial" parameter values are stored separately so that
-optimize_init_params()-
returns the original "initial" parameter values, and
-optimize_result_params()-
returns the current value of the parameters after attempting to optimize
the objective function.
> Oh, and one more thing: when I try -optimize_evaluate()- without any
> previous optimization attempts, it breaks down as follows:
>
> opt__eval(): 3010 attempt to dereference NULL pointer
> _optimize_evaluate(): - function returned error
This too is unintended (Stata 11 only), and will be fixed in a future ado-file
update.
--Jeff
[email protected]
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/