Quantcast

prcomp function

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

prcomp function

kicker
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: prcomp function

Claudia Beleites
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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: prcomp function

kicker
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.
Loading...