[GRASS-stats] Re: [GRASS-user] Testing i.pca ~ prcomp(), m.eigensystem ~ princomp()

Nikos Alexandris nikos.alexandris at felis.uni-freiburg.de
Wed Apr 1 19:33:21 EDT 2009


Markus:
> It seems that i.pca output is supposed to be identical to 
> prcomp(center=FALSE, scale=FALSE) output in R, because a PCA is 
> scale-sensitive and the eigenvalue as reported by i.pca is the variance 
> of the raw, unstandardised data.

The "thing" is that with the SPOT data all seems fine and "i.pca ==
prcomp(x, center=TRUE, scale=FALSE)" which is not the case for the MODIS
bands I work with.


> If outputs are not identical, either R or grass do some hidden
> modification or there is a bug in either grass or R (all within
> limits, e.g. identical up to the 5th digit in scientific format is
> fine?).
> Some textbooks give a rule of thumb for further analysis to use only 
> components with an eigenvalue >=1

I think this depends on what you are trying to achieve. Of course,
components with small(-er) eigenvalues include more "noizzze". In my
change detection project I used *only* components with eigenvalues < 1.


> which obviously only works if the eigenvalue is calculated from
> standardised values (center=TRUE, scale=TRUE or e.g. r.mapcalc
> standardised_map = (map - mean) / stddev).

> E.g., comparing the results of MODIS raw and MODIS scaled with 0.0001 
> should give <eigenvalue #x of MODIS scaled> = 1E-8 * <eigenvalue #x of
> MODIS raw>.

I didn't find the time to rescale and re-test. I will... at some
point :-)


> BTW, the rescaling method of i.pca is not very convincing, as pointed 
> out by Augustin Lobo. IMHO, fool-proof would be normalization (x -
> mean) / stddev.

Kind regards, Nikos



More information about the grass-user mailing list