Hello,
I have a short question about the prcomp function. First I cite the associated help page (help(prcomp)): "Value: ... SDEV the standard deviations of the principal components (i.e., the square roots of the eigenvalues of the covariance/correlation matrix, though the calculation is actually done with the singular values of the data matrix). ROTATION the matrix of variable loadings (i.e., a matrix whose columns contain the eigenvectors). The function princomp returns this in the element loadings. ..." Now please take a look at the following easy example: first I define a matrix A >A<-matrix(c(0,1,4,1,0,3,4,3,0),3,3) then I apply PCA on A >trans<-prcomp(A,retx=T,center=F,scale.=F,tol=NULL) >eval<-trans$sdev*trans$sdev #eval is the vector of the eigenvalues of cov(A) (according to the cited help text above) >evec<-trans$rotation #evec is the matrix with the eigenvectors of cov(A) as columns (according to the cited help text above) now the eigenvalue equation should be valid, i.e. it should hold cov(A)%*%ev[,1]=ew[1]*ev[,1]. But it doesn´t, my result: cov(A)%*%ev[,1]= t(-0.8244927, -0.8325664,0.8244927) ew[1]*ev[,1]=t(-8.695427,-7.129314,-10.194816) So my question is : why does the eigenvalue equation not hold ? The eigenvalue equation holds when I set center=T in the options of the prcomp function. But as far as I know and as I understand the help text it should have no influence on the eigenvalue equation whether the data are centered or not. I know about the advantages of centered date but I want to understand how the prcomp function works in the case of uncentered data. Thank you very much for your efforts. |
I think PCA decomposes matrix A according to A'A, not to COV (A).
But if A is centered then A'A = (n + 1) COV (A). So for non-centered A, you want to look at A'A instead: > crossprod(A) %*% evec[,1] / (nrow (A) - 1) - eval [1] * evec [,1] [,1] [1,] 0.000e+00 [2,] 0.000e+00 [3,] 1.066e-14 If I'm telling crap, someone please correct me! Hope that helps, Claudia On 11/10/2010 02:41 PM, kicker wrote: > > Hello, > > I have a short question about the prcomp function. First I cite the > associated help page (help(prcomp)): > > "Value: > ... > SDEV the standard deviations of the principal components (i.e., the square > roots of the eigenvalues of the covariance/correlation matrix, though the > calculation is actually done with the singular values of the data matrix). > ROTATION the matrix of variable loadings (i.e., a matrix whose columns > contain the eigenvectors). The function princomp returns this in the element > loadings. > ..." > > Now please take a look at the following easy example: > > first I define a matrix A >> A<-matrix(c(0,1,4,1,0,3,4,3,0),3,3) > then I apply PCA on A >> trans<-prcomp(A,retx=T,center=F,scale.=F,tol=NULL) > >> eval<-trans$sdev*trans$sdev #eval is the vector of the eigenvalues of > cov(A) (according to the cited help text above) >> evec<-trans$rotation #evec is the matrix with the eigenvectors of cov(A) as > columns (according to the cited help text above) > > now the eigenvalue equation should be valid, i.e. it should hold > cov(A)%*%ev[,1]=ew[1]*ev[,1]. But it doesn´t, my result: > cov(A)%*%ev[,1]= t(-0.8244927, -0.8325664,0.8244927) > ew[1]*ev[,1]=t(-8.695427,-7.129314,-10.194816) > > So my question is : why does the eigenvalue equation not hold ? > > The eigenvalue equation holds when I set center=T in the options of the > prcomp function. But as far as I know and as I understand the help text it > should have no influence on the eigenvalue equation whether the data are > centered or not. I know about the advantages of centered date but I want to > understand how the prcomp function works in the case of uncentered data. > > Thank you very much for your efforts. > -- Claudia Beleites Dipartimento dei Materiali e delle Risorse Naturali Università degli Studi di Trieste Via Alfonso Valerio 6/a I-34127 Trieste phone: +39 0 40 5 58-37 68 email: [hidden email] ______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
In reply to this post by kicker
Dear Claudia,
you are right. Thank you very much for your explanations. So in the non-centered case SDEV does not contain the "square roots of the eigenvalues of the covariance/correlation matrix". In in the centered case it holds A´A=(n-1)*cov(A) (not n+1). Have a nice day. |
Free forum by Nabble - Free Resume Builder | Edit this page |