[R-SIG-Finance] Failure of solve.QP in portfolio modeling

Enrico Schumann es at enricoschumann.net
Tue Sep 22 16:56:44 CEST 2015


On Tue, 22 Sep 2015, aschmid1 <aschmid1 at stevens.edu> writes:

> Hi everyone,
> I'm trying to estimate optimal Markowitz portfolio weights for a list
> of stocks chosen upon some criterion using solve.QP from quadprog
> library. When the number of stocks N reaches some limit, I get a
> message "matrix D in quadratic function is not positive definite." For
> example, if I rebalance every 6 weeks (which implies that variance is
> calculated for 6-week interval prior to the period for which I
> calculate portfolio weights), I can get solution for 25>=N<50. For
> 12-week interval, solution exists for 50>=N<100, and for 24-week
> interval, I can get solution for N=100. My attempt to remedy this
> problem with Higham's method doesn't help. I'll greatly appreciate you
> input: first, why this may happen (can there be lack of local
> minimum?), and second, whether there are R solvers that may need only
> semi positive definite matrix.
>
> Thanks! Alec
>

The thing you may want to look up is the "rank" of a matrix.

For instance, I create a small data set R -- suppose these were
daily-returns data of 10 equities.

  na   <- 10 ## number of assets
  nobs <- 10 ## number of observations

  R <- array(rnorm(nobs * na, sd = 0.01), dim = c(nobs, na))
  qr(cov(R))$rank

The rank of the covariance matrix is only 9; you need na+1 observations
to get full rank. You can still compute the standard deviation of a
portfolio:

  ew <- rep(1/na, na) ## equal-weight portfolio
  sqrt(ew %*% cov(R) %*% ew)

But with a non-full rank matrix and no constraints, it is guaranteed
that you have portfolios like this one:

  zerovol <- svd(cov(R))$v[,10]
  sqrt(abs(zerovol %*% cov(R) %*% zerovol))

You get a zero-volatility portfolio.

Whether that matters depends on your application. With constraints,
perhaps not.

An example in which it does not matter is in Section "1.3
Redundant assets" in
https://cran.r-project.org/web/packages/NMOF/vignettes/TAportfolio.pdf 

There you also have an example of a solver. A lengthier discussion is in
Section "13.2.5 Repairing Matrices" in this book

@BOOK{Gilli2011b,
  title        = {Numerical Methods and Optimization in Finance},
  publisher    = {Elsevier/Academic Press},
  year         = 2011,
  author       = {Gilli, Manfred and Maringer, Dietmar and Schumann,
                  Enrico}
}

of which [disclosure], I am a co-author.

-- 
Enrico Schumann
Lucerne, Switzerland
http://enricoschumann.net



More information about the R-SIG-Finance mailing list