MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by caterina
on 2 Mar 2013

Hi I need to rotate a PCs coming from a Principal Component Analysis. I know I shouldn't but the analysis I'm doing requests this step. I used function rotatefactors() but it does not produce the eingenvalues of the rotated PCs. At the same time I can't use factorian() routine because my covariance matrix is not positive definite. Does anyone have an idea? Thanks!

*No products are associated with this question.*

Answer by Tom Lane
on 8 Mar 2013

Accepted answer

On reflection, if you are thinking of the eigenvalues as the variances of the scores, perhaps this is what you want after rotation:

% Eigenvalues are the variances of the scores load hald [C,S,latent] = pca(ingredients); V = cov(ingredients); var(S) % variance of scores latent' % latent values Sigma = eig(V)' % eigenvalues

% Rotate away from the principal components [L,T] = rotatefactors(C(:,1:2));

% Variances of the rotated scores, if we have S var1 = diag(cov(S(:,1:2)*T))'

% Variances computed without using the scores var2 = diag(L'*V*L)'

## 1 Comment

## Tom Lane

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/65590#comment_134707

I would have thought that if you rotate the coordinate system away from the eigenvectors, then it is no longer meaningful to compute eigenvalues.