[R] Princomp(), prcomp() and loadings()

F.Tusell etptupaf at bs.ehu.es
Thu Nov 4 09:52:06 CET 2004

El mié, 03-11-2004 a las 17:34, Prof Brian Ripley escribió:
> On Wed, 3 Nov 2004, F.Tusell wrote:
> > In comparing the results of princomp and prcomp I find:
> > 
> >    1. The reported standard deviations are similar but about 1% from
> >       each other, which seems well above round-off error.
> That is explained on the help page!  E.g.
>      Note that the default calculation uses divisor 'N' for the
>      covariance matrix.
>      ...

       Mea culpa, even without resort to the example in the help page I 
       should have thought that differences in the divisor for the 
       covariance matrix (or using directly the data matrix, as Sundar 
       Dorai-Raj explained) might account for the small discrepancies.
       My apologies.
> >    2. princomp returns what I understand are variances and cumulative
> >       variances accounted for by each principal component which are
> >       all equal. "SS loadings" is always 1. 
> >    3. Same happens after the loadings are varimax-rotated, which in 
> >       general should alter the proportions of variance accounted by 
> >       each component.
> Hmmm.  Varimax rotation of PCA (not factor analysis) is not supported in
> base R, so this is not surprising.  Please do as the posting guide asks,
> and read the help page (even its title!) before posting.
       Well, the title says: "Rotation Methods for Factor Analysis" and
       this was not enough to deter me from using it on PCA generated 
       loadings. "Factor Analysis" is sometimes meant to include PCA,
       even if they are different beasts. Looking at the help page for
       "loadings" it also says: "Print Loadings in Factor Analysis", 
       yet it is meant to be used with PCA loadings as well, as the
       later the Description section goes on to saying.

       But this is a side question. What I asked in point 2) is why
       loadings(princomp(USArrests)) reports as the last four lines

                         Comp.1 Comp.2 Comp.3 Comp.4
          SS loadings      1.00   1.00   1.00   1.00
          Proportion Var   0.25   0.25   0.25   0.25
          Cumulative Var   0.25   0.50   0.75   1.00

       when the eigenvalues are different and so are the amounts of 
       variance explained by each component. I used "varimax" merely 
       to produce a different set of loadings and check that the same
       behaviour recurred. 

> > It looks as if the loadings() function were expecting the eigenvectors
> > to be normalized to the corresponding eigenvalue.
> > 
       The first line reported by loadings, "SS loadings", is right. 
       But the loadings matrix returned by princomp has its columns 
       normalized to 1, while loadings returned by factanal are 
       not. Hence, with the later, the last two lines are what I 
       expected, while with the former they are not.

       Perhaps the loadings matrices returned by princomp and factanal
       should be made of a different class, so loadings (or 
       print.loadings) treats them differently?


> > Transcript and version information follow signature. Thank you for any
> > clues.
> The best clue is that the help pages are a very useful resource, but need 
> to be read as carefully as they were written.

Fernando TUSELL                                e-mail:
Departamento de Econometría y Estadística           etptupaf at bs.ehu.es 
Facultad de CC.EE. y Empresariales             Tel:   (+34)94.601.3733
Avenida Lendakari Aguirre, 83                  Fax:   (+34)94.601.3754
E-48015 BILBAO  (Spain)                        Secr:  (+34)94.601.3740

More information about the R-help mailing list