I have a set of input data X consisting of S&P 500 returns, that provides me with a covariance matrix C that is non positive semi-definite. The reason for the non-semi definite nature of the covariance matrix is that S&P returns data are asynchronous or incomplete. Is it possible to 'correct' this covariance matrix by kicking out the negative eigenvalues of C (or setting them equal to zero)? Could the Karhunen Loeve Transform be used, as it provides the smallest mean squared error approximation?
I used this standard procedure for the covariance matrix which is performed in Matlab using cov(): https://www.statlect.com/images/covariance-matrix__97.png
Example set: C = \begin{bmatrix}0.99&0.78&0.59&0.44\\0.78&0.92&0.28&0.81\\0.59&0.28&1.12&0.23\\0.44&0.81&0.23&0.99\end{bmatrix}
The eigenvalues in this case are -0.0004, 0.4214, 0.9988, 2.6001. In other cases the negative value is more significant than -0.0004.