How to estimate correlation matrix from largest eigenvalues? I'm trying to estimate a correlation matrix from the 5 largest eigenvalues and associated eigenvectors of the sample correlation matrix. My problem is that the output from the following Matlab code results in much higher average correlation (0.8 v 0.4) for the financial data I'm looking at.
[V,D] = eig(InputCorr);
eigvals = diag(D);
eigvals(1:(end-5)) = 0;
eigvals = eigvals*size(InputCorr,1)/sum(eigvals);
BB = bsxfun(@times,V,eigvals')* V';
T = 1 ./ sqrt(diag(BB));
OutputCorr = 0.5*(BB+BB') .* (T*T'); 

Is such a marked increase in average correlation to be expected or am I doing something wrong?
Update:
The $A=λ_{1}v_{1}v_{1}' + ... + λ_{n}v_{n}v_{n}'$ decomposition suggested by @Jonathan Lisic is very useful. If I truncate it to just the first five terms, then the off-diagonal elements of the matrix are what I expect (similar to the corresponding elements of the original matrix and similar average correlation), but the diagonal elements are well below 1. So the increase in correlation is caused by rescaling the matrix to get the diagonal elements to equal to one. I am actually only interested in the off-diagonal elements, is it kosher to use these directly without doing any rescaling?
 A: This is a quick example in R for taking a 5x5 positive definite matrix and turning it into an approximation of the first matrix.
#Test Matrix
A <- matrix(1,nrow=5,ncol=5)
diag(A) <- 1:5

evec <- eigen(A)$vectors
eval <- eigen(A)$values

# we can get the original matrix back through
# spectral decomposition
evec %*% diag(eval) %*% t(evec)

# since R and most other software automatically sorts
# the eigenvalue/vector pairs by absolute magnitude we
# can just do the following subsets to approximate A

evec[,1:3] %*% diag(eval)[1:3,1:3] %*% t(evec[,1:3])

The difference you are seeing might be from your code. In this case I would check if you could generalize your function to reconstruct the matrix for any subset of the eigenvalues/eigenvector pairs and test it for the case where you include all the pairs.  This case should match the original matrix.
The other cause for the large change is that the sum of the deleted eigenvalues is reasonably large.  Recall from the spectral decomposition of a positive definite matrix we can write the matrix as follows $A = \lambda_1 v_1 v_1^T + ... + \lambda_n v_n v_n^T $.  So by subsetting the deleted values and reconstructing this portion of A, you will get what was lost by your approximation.
