Returns to variance matrix

Task

Create a variance matrix given a matrix of returns.  (There can be more assets than time points, and missing values are allowed.)

Preparation

  • return matrix
  • BurStFin package

You need a return matrix — see “Prices to returns”.  The columns must be for assets and the rows for times.

You also need the BurStFin package available in the session:

require(BurStFin)

If that package is not installed on your machine, then you can get it from CRAN:

install.packages("BurStFin")

Doing the example

  • pprobeData package

To do the example, the pprobeData package must be loaded in the session:

require(pprobeData)

If that package is not installed on your machine, see “Using R packages”.

Doing it

We present a choice of:

  • Ledoit-Wolf shrinkage estimation
  • statistical factor model

Ledoit-Wolf shrinkage

xaLWvar06 <- var.shrink.eqcor(xassetLogReturns[1:250,])

There are additional controls on the estimation if you are keen.

Statistical factor model

xaSFvar06 <- factor.model.stat(xassetLogReturns[1:250,])

There are additional controls on the estimation if you are keen.

Explanation

Each of var.shrink.eqcor and factor.model.stat from the BurStFin package take a matrix of returns and return an estimate of the variance matrix that is positive definite even if there are more assets than times.  (Having a positive-definite variance matrix is very important for optimization, it is probably not much of an issue when generating random portfolios.)

We extract the first 250 returns from the full return matrix  — these are the daily returns from 2006.

See also

To produce a return matrix, see “Prices to returns”.

Once you have a variance matrix, you might want to add a benchmark to it: “Add benchmark to variance matrix”

There have been blog posts on Ledoit-Wolf shrinkage and on statistical factor models.

Navigate