[R-SIG-Finance] solnp Problem Inverting Hessian

Michael Weylandt michael.weylandt at gmail.com
Tue Dec 15 02:31:38 CET 2015

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.


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,ineqLB=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
> ________________________________
> This email and any attachments are confidential and inte...{{dropped:9}}
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.

More information about the R-SIG-Finance mailing list