I have tried in vain to get a 2 equation in 2 unknowns problem to work
with optimize. Would someone be kind enough to give me some advice?
I have the following parameters which will be fixed during the optimization:
T (time)
sqrT (squareroot of time)
Evol (equity volatility)
EoX (firm equity normalized by firm debt)
and the following parameters which I wish to solve for:
Avol (asset volatility)
AoX (firm assets normalized by firm debt
The two equations are:
F1 = AoX * normal(d1) - normal(d2) - EoX
F2 = normal(d1) * AoX * Avol - EoX * Evol
where
d1 = (ln(AoX)+ T*0.5*Avol^2)/(Avol*sqrtT)
d2 = d1 - Avol * sqrtT
I am taking the square of each equation and trying to minimize the
sum. Here is what I have most recently tried where the I[] matrix is
input data that I will read for each firm on a given trading day and
the calculated values for Avol and AoX are starting values for the
optimization:
T = 5
sqrtT = sqrt(T)
for (j=1; j<=rows(I); j++) {
X = (I[j,15] - I[j,16])
E = I[j,13]
Evol = I[j,14]
Avol = Evol/2
AoX = (E + X)/X
EoX = E/X
c = (sqrT, T, EoX, Evol)
void Merton(todo, A, c, lnf, g, H)
{
lnf = (A[1]*normal((ln(A[1])+c[2]*0.5*A[2]^2)/(A[2]*c[1]))-
normal((ln(A[1])-c[2]*0.5*A[2]^2)/(A[2]*c[1]))- c[3])^2 +
(normal((ln(A[1])+c[2]*0.5*A[2]^2)/(A[2]*c[1])) * A[1] * A[2] - c[3] *
c[4])^2
}
S = optimize_init()
optimize_init_evaluator(S, &Merton())
optimize_init_evaluatortype(S, "d0")
optimize_init_params(S, (AoX,Avol))
optimize_init_which(S, "min")
optimize_init_argument(S,1,c)
A = optimize(S)
printf("A:")
A
}
Here is the reply I get:
> c = (sqrT, T, EoX, Evol)
>
> void Merton(todo, A, c, lnf, g, H)
expression invalid
(16 lines skipped)
I am unsure what I am doing wrong and have tried several variations
based upon the manual always receiving the same error.
Tom
--
Thomas Jacobs
*
* 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/