On Dec 15, 2015, at 10:43 AM, Paul Gilbert <pgilbert902 at gmail.com> wrote:
Just to be clear, when I said "difference between the largest and
smallest elements" I am think of the absolute value. It is the scale not
the sign that causes problems in optimization. And I cannot commenting
on whether you have the correct objective function, just pointing out
what would happen numerically with the one you specified.
Paul
On 12/15/2015 10:17 AM, Michael Ashton wrote:
That is very interesting. Actually some of the projected returns are
negative, some are very close to zero. None is exactly zero, which I
guess is why it's not singular, but that's why it's ill-conditioned.
Very interesting. And hard to solve...if I add 5% to all returns will
I still get the same portfolio? Seems to me intuitively I shouldn't
since the proportional risk/return tradeoff then is greater for the
assets on the low end of the spectrum, but I might be wrong.
-----Original Message----- From: Paul Gilbert
[mailto:pgilbert902 at gmail.com] Sent: Tuesday, December 15, 2015 9:58
AM To: Michael Ashton Cc: Michael Weylandt;
r-sig-finance at r-project.org Subject: Re: [R-SIG-Finance] solnp
Problem Inverting Hessian
I have not been paying close attention and I've missed something in
this thread, but ...
I think the hessian in the optimization will be the second derivative
of this function
opt.fun <- function(wgt.vect)
{-crossprod(wgt.vect,t(Ret.vect))}
WRT wgt.vect. If there are zero elements in Ret.vect then that
hessian will be singular. And if there are orders of magnitude
difference between the largest and smallest elements in Ret.vect then
the hessian will be ill-conditioned.
The ill-conditioned case is a numerical problem and you might solve
it with a different algorithm, or by better scaling. The zero case is
a theoretical problem, there is not a unique optimal point but rather
whole continuum of optimal points (your parameters corresponding to
the zero elements will not make any difference in the function
value).
HTH, Paul
On 12/14/2015 11:39 PM, Michael Weylandt wrote:
(+list -- I'm not a numerical linear algebra expert or portfolio
optimization expert, but there are a number on this list who might
chime in)
That is quite high, and almost certainly problematic.
I'm not sure what an acceptable bound is (will depend on your
solver), but that's almost certainly above it for any algorithm
which will require inverting cov.mat.
Two things you could try: - use a different (non-Hessian-using)
optimization algorithm; - use some form of shrinkage/regularization
(Ledoit-Wolf is a common choice) to tame your covariance matrix.
Michael
On Mon, Dec 14, 2015 at 10:10 PM, Michael Ashton
<m.ashton at enduringinvestments.com> wrote:
Well, not sure whether this makes any sense but kappa(cov.mat)
gives me 11148245007.
That seems large. But I am not sure what it is supposed to be.
-----Original Message----- From: Michael Weylandt
[mailto:michael.weylandt at gmail.com] Sent: Monday, December 14,
2015 9:29 PM To: Michael Ashton Cc: r-sig-finance at r-project.org
Subject: Re: [R-SIG-Finance] solnp Problem Inverting Hessian
What's the condition number of your correlation/covariance
matrix? (?kappa)
I think I've used quadprog for portfolio optimization with
success, but it's been a while.
MW
On Mon, Dec 14, 2015 at 8:06 PM, Michael Ashton
<m.ashton at enduringinvestments.com> wrote:
Do you have a suggestion for such? I have in the past tried
fPortfolio, but it would not allow me to specify my own
projected return vectors rather than the historical returns of
the series (which is exactly backwards).
As for whether the matrix is comfortably non-singular...I
suppose it depends in a Clintonian way on the meaning of
"comfortably," but I can create a Cholesky decomposition
without it blowing up, which is usually how I can tell if I
have done something stupid. Well, stupider than normal.
-----Original Message----- From: Michael Weylandt
[mailto:michael.weylandt at gmail.com] Sent: Monday, December 14,
2015 8:32 PM To: Michael Ashton Cc:
r-sig-finance at r-project.org Subject: Re: [R-SIG-Finance] solnp
Problem Inverting Hessian
The Hessian is the matrix of second derivatives
(https://en.wikipedia.org/wiki/Hessian_matrix) -- in scalar
terms, you're finding a point where the second derivative is
zero and then trying to divide by the second derivative to
calculate the step size.
I haven't gone through your code in any detail, but I'd start
by checking the covariance matrix since that's proportional to
the Hessian of your objective function. Is it (comfortably)
non-singular?
Since you're just solving the standard Markowitz problem, you
might try a simpler (quadratic/convex) solver instead of a
general non-linear solver. Should behave a bit better.
Michael
On Mon, Dec 14, 2015 at 6:13 PM, Michael Ashton
<m.ashton at enduringinvestments.com> wrote:
I must admit to being flummoxed here, mainly because my
linear algebra was 25 years ago and I can't remember what a
Hessian is.
I have a matrix of 60 securities' weekly returns, along with
60 projected returns. The returns are in a vector called
Ret.vect and the covariance matrix of weekly returns in
cov.mat . I have the minConstraints and maxConstraints that
the parameters are permitted to take. I cycle through
targeted risks and get the same error for each risk
targeted...below I have removed the loop to focus on the
risk=0.002.
wgt.vect=c(rep(1/60, 60)) constr.fun <- function(wgt.vect)
{; c1 = sqrt(crossprod(t(wgt.vect %*% cov.mat),wgt.vect)); c2
= sum(wgt.vect); return(c(c1,c2)); } ineqconstr.fun <-
function(wgt.vect) { wgt.vect[1:60]; } opt.fun <-
function(wgt.vect) {-crossprod(wgt.vect,t(Ret.vect))}
OptimSolution <-
solnp(wgt.vect,opt.fun,constr.fun,eqB=c(0.002,1),ineqconstr.fun,ine
B =minConstraints,ineqUB=maxConstraints)
I get the following error: solnp--> Solution not
reliable....Problem Inverting Hessian.
Well, that doesn't tell me very much! The parameters
(weights) that are output for each run, as I cycle through
the weights, are very scrambled...lots of little allocations,
rather than clumping as you would expect to happen especially
at the risky and riskless ends of the spectrum.
Can anyone with more math than me give me a helping hand on
the Hessian?
Thanks,
Mike
Michael Ashton, CFA Managing Principal
Enduring Investments LLC W: 973.457.4602 C: 551.655.8006