Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Optimize in Mata to solve for 2 unknwons. "initial values not feasible"
From
Austin Nichols <[email protected]>
To
[email protected]
Subject
Re: st: Optimize in Mata to solve for 2 unknwons. "initial values not feasible"
Date
Tue, 26 Jun 2012 15:25:21 -0400
Sean Lim <[email protected]> :
See also
http://www.stata.com/statalist/archive/2009-01/msg01140.html
http://www.stata.com/statalist/archive/2010-04/msg01113.html
On Tue, Jun 26, 2012 at 3:23 PM, Austin Nichols <[email protected]> wrote:
> Sean Lim <[email protected]> :
> It's not clear to me which code by Thomas Jacobs you are referring to.
> Did you read the follow-up?
> http://www.stata.com/statalist/archive/2008-07/msg01029.html
> See also
> http://www.stata.com/help.cgi?mf_optimize#i_maxiter
>
> On Tue, Jun 26, 2012 at 3:08 PM, Sean Lim <[email protected]> wrote:
>> Dear Statalisters,
>>
>> I am trying to use optimize on Mata to numerically solve simultaneous
>> equations with 2 unknowns. I am getting an error "initial values not
>> feasible". I am using Stata 11.2 for Windows.
>>
>> I have this, based on code I found on statalist archives
>> http://www.stata.com/statalist/archive/2008-07/msg01027.html by Thomas
>> Jacobs. It is run on Mata:
>>
>> j=1
>>
>> T = st_data(j,"time_tomaturity")
>> sqrtT = sqrt(T)
>> rf= st_data(j,"rf3")
>> F = st_data (j, "lag_tot_liab")
>> E = st_data (j, "cur_mkt_cap")
>> Evol = st_data (j, "market_cap_volatility")
>> Avol = Evol/2
>> Avalue = (E + F)
>> c = (sqrtT, rf, E, Evol, F)
>>
>> void Merton(todo, A, c, lnf, g, H)
>> {
>> d1=((ln(A[1]/c[5]))+(c[2]+0.5*(c[4]^2)*c[1]^2))/(A[2]*c[1])
>> d2=d1-A[2]*c[1]
>> f1=A[1]*normal(d1)- exp(-c[2]*c[1]^2)*c[5]*normal(d2)-c[3]
>> f2=(A[1]/c[3])*normal(d1)*A[2]-c[4]
>> lnf =(f1)^2 + (f2)^2
>> }
>> while (j<=st_nobs()){
>> if (T!=.&rf!=.&F!=.&E!=.&Evol!=.) {
>>
>> S = optimize_init()
>> optimize_init_evaluator(S, &Merton())
>> optimize_init_evaluatortype(S, "d0")
>> optimize_init_params(S, (Avalue,Avol))
>> optimize_init_which(S, "min")
>> optimize_init_argument(S,1,c)
>> A = optimize(S)
>>
>> st_store(j, "value", A[1])
>> st_store(j, "avol", A[2])
>>
>> j++
>>
>> if (j<=st_nobs()){
>> T = st_data(j,"time_tomaturity")
>> sqrtT = sqrt(T)
>> rf= st_data(j,"rf3")
>> F = st_data (j, "lag_tot_liab")
>> E = st_data (j, "cur_mkt_cap")
>> Evol = st_data (j, "market_cap_volatility")
>> Avol = Evol/2
>> Avalue = (E + F)
>> c = (sqrtT, rf, E, Evol, F)
>> }
>>
>> }
>> else {
>> j++
>>
>> if (j<=st_nobs()){
>> T = st_data(j,"time_tomaturity")
>> sqrtT = sqrt(T)
>> rf= st_data(j,"rf3")
>> F = st_data (j, "lag_tot_liab")
>> E = st_data (j, "cur_mkt_cap")
>> Evol = st_data (j, "market_cap_volatility")
>> Avol = Evol/2
>> Avalue = (E + F)
>> c = (sqrtT, rf, E, Evol, F)
>> }
>>
>> }
>> }
>>
>>
>> In short, I have a panel dataset, and would like to run the sovler for
>> every observations (roughly24000). The code works fine except that
>> every now there are problematic numerical values that have no solution
>> or and error.
>>
>> Is there a way code so that it can use another variation of EVol for a
>> starting value if initial values turn out to be infeasible? Or code so
>> to tell the program to skip ahead to the next observation?
>>
>> I find that this happens after 10,000 ish iterations coming with the
>> same (lack of) result. Is there a way to code a limit to the number of
>> observations so the program moves on to solving for the next
>> observation?
>>
>> Also, I am curious, what happens if after a large number of
>> iterations, the equations are not solved. Does Mata give in a 'close'
>> solution as a substitute?
>>
>> Thank you all for your time in reading this. I am new to using Mata so
>> I will appreciate any comments that will provide me some direction.
>>
*
* 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/