Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: mata optimize


From   jpitblado@stata.com (Jeff Pitblado, StataCorp LP)
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: mata optimize
Date   Mon, 05 Oct 2009 17:25:05 -0500

Stas Kolenikov <skolenik@gmail.com> 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
jpitblado@stata.com
*
*   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/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index