Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


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

st: Optimize in Mata to solve for 2 unknwons. "initial values not feasible"


From   Sean Lim <seanlim174@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   st: Optimize in Mata to solve for 2 unknwons. "initial values not feasible"
Date   Tue, 26 Jun 2012 20:08:57 +0100

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.

Best,


Sean
*
*   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   |   Site index