Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# st: RE: Optimize for 2 unknowns looping over observations using Mata

 From "Mak, Timothy" To "'statalist@hsphsun2.harvard.edu'" Subject st: RE: Optimize for 2 unknowns looping over observations using Mata Date Mon, 5 Mar 2012 16:56:56 +0000

```Hi,

I think it may be that you've mis-written your arguments for your function:

Instead of (todo, p, x, lnf, g, H)

it should be (todo, p, i, lnf, g, H)

Still, I think a better way of writing your function would be to take your line:

x = st_data( i,("sige", "Ix", "divrate", "rf", "time", "ve", "sqrtT"))

out of your function, and put it in your loop. And replace:

optimize_init_argument(S,1,i)

with

optimize_init_argument(S,1,x)

Hope that helps.

Tim

**time and sqrtT are constant
**sige, Ix, divrate, rf, ve

gen double a = .
gen double b = .
mata
void bsmp0(todo, p, x, lnf, g, H)
{
a = p[1]
b = p[2]
x = st_data( i,("sige", "Ix", "divrate", "rf", "time", "ve", "sqrtT"))

f1= a * exp(-x[3]*x[5])*normal(ln(a/x[2])+x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))
f2= x[2]*exp(-x[4]*x[5])*normal(ln(a/x[2])+x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))
f3= (1-exp(-x[3]*x[5]))*a-x[6]
f4=  ((a*b*exp(-x[3]*x[5]))/x[6])*normal(ln(a/x[2])+
x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))-x[1]
lnf = (f1-f2)^2+(f3-f4)^2
}
for(i=1;i<=st_nobs();i++) {
S = optimize_init()
optimize_init_evaluator(S, &bsmp0())
optimize_init_evaluatortype(s,"v0")
optimize_init_params(S,(0,0))
optimize_init_argument(S,1,i)
p = optimize(S)
st_store(i,"va", a)
st_store(i,"siga", b)
}
end

After trying numerous combinations based on help, the mata manual and
online guides, I am not sure how to proceed.

William

. mata
------------------------------------------------- mata (type end to
exit) ----------------------------------------

: void bsmp0(todo, p, x, lnf, g, H)
>  {
>       a = p[1]
>       b = p[2]
>       x = st_data( i,("sige", "x", "divrate", "r", "time", "ve", "sqrtT"))
>
> f1= a * exp(-x[3]*x[5])*normal(ln(a/x[2])+x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))
too many ')'
r(3000);
:
: f2= x[2]*exp(-x[4]*x[5])*normal(ln(a/x[2])+x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))
too many ')'
r(3000);
:
: f3= (1-exp(-x[3]*x[5]))*a-x[6]
r(3499);
:
: f4=  ((a*b*exp(-x[3]*x[5]))/x[6])*normal(ln(a/x[2])+
x[5]*(x[4]-x[3]+(b^2/2)))/(b*x[7]))-x[1]
too many ')'
r(3000);
:
: lnf = (f1-f2)^2+(f3-f4)^2
r(3499);
:
: }
expression invalid
r(3000);
:
:   for(i=1;i<=st_nobs();i++) {
>    S = optimize_init()
>    optimize_init_evaluator(S, &bsmp0())
>    optimize_init_evaluatortype(s,"v0")
>    optimize_init_params(S,(0,0))
>    optimize_init_argument(S,1,i)
>   p = optimize(S)
>   st_store(i,"va", a)
>   st_store(i,"siga", b)
>    }
r(3499);

--
wrpratt@utpa.edu
University of Texas-Pan American
Department of Finance and Economics
South Texas Border Health Disparities Center
o - 956.665.7937
f - 956.665.7310
*
*   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/

*
*   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/
```