In Risk Budgeting and Diversification Based on Optimized Uncorrelated Factors [1], which introduces minimum torsion bets, Meucci gives an example involving the computation of covariance matrices on pages 9-10, Section 6, Case study: security-based investment.

[...] We estimate every month the covariance matrix of the of the [sic] S&P stock returns $\Sigma_{F}$ using a one-year rolling window of daily observations, and filtering the smallest eigenvalues to ensure positive definiteness.

What is meant by "filtering the smallest eigenvalues"? What methods are there to transform the covariance matrix in such a way that the smallest eigenvalues (and corresponding eigenvectors) get removed, but the rest stay intact, and which one is used here in particular?

Edit: This SE question [2] is highly relevant to this one.

[1] https://papers.ssrn.com/sol3/Papers.cfm?abstract_id=2276632

[2] What is the best way to "fix" a covariance matrix that is not positive semi-definite?

  • $\begingroup$ I assume Truncated Singular Value Decomposition [1] was meant, but I am happy to give the answer to someone with a more informed input. [1] en.wikipedia.org/wiki/… $\endgroup$ Commented Jul 2, 2018 at 15:10
  • $\begingroup$ Meucci typically provides Matlab code for all his papers, so one can go to the code and investigate. With respect to hps's point, sometimes people also set the eigenvalues to the average of the smallest eigenvalues. This works in some cases, but if your covariance matrix contains variables with significantly different scales, then you may have issues. Random matrix theory can also motivate the choice of selecting the eigenvalues that are noise. $\endgroup$
    – John
    Commented Jul 2, 2018 at 15:17
  • $\begingroup$ By "filtering" he just means removing the corresponding eigenvectors/eigenvalues. A common approach for fixing non-pos def matrices. By smalles he means the eigenvalues whose absolute value is smaller than some threshold. $\endgroup$
    – nbbo2
    Commented Jul 2, 2018 at 16:17
  • $\begingroup$ @John I have previously downloaded and looked at Meucci's Matlab code, but that part of the example is not part of the code. $\endgroup$ Commented Jul 2, 2018 at 18:53
  • 1
    $\begingroup$ @noob2 You mean removing the eigenvalues and corresponding from the Eigendecomposition and using the resulting matrix? $\endgroup$ Commented Jul 2, 2018 at 21:28

2 Answers 2


After writing an email to Meucci directly, I posted the question in his LinkedIn Group ARPM - Advanced Risk and Portfolio Management. Below are his answer and the answer of other group members, which echo the answer and comments already given here on SE.

Attilio Meucci Suppose that you are in an ideal world where

  1. you have a perfectly balanced panel of data n_ (number of instruments) x t_ (number of observations)
  2. each n_ dimensional column is a realization from the same joint distribution
  3. all such realizations are independent across time Even in the above ideal world, the sample covariance eigenvalues will be different from the true (population) covariance eigenvalues (https://www.arpm.co/lab/redirect.php?permalink=exam-ydaosw-copy-19) In particular, in the extreme case where t_ < n_ the sample covariance is not invertible, which means that the lowest eigenvalue(s) are zero.

To "fix" the above issue, there are a variety of techniques


The covariance matrices must be nonnegative definite, so the smallest eigenvalues would be 0 or slightly positive. A crude method would be to take the orthogonal decomposition UDU' and shift the near- zero entries in D to epsilon. Shrinkage estimation of covariance seems better.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.