[GRASS-user] i.pca vs. r.covar/m.eigensystem/r.mapcalc
Nikos Alexandris
nikos.alexandris at felis.uni-freiburg.de
Wed Nov 5 08:39:28 EST 2008
On Tue, 2008-10-28 at 09:39 -0700, Dylan Beaudette wrote:
> On Monday 27 October 2008, Nikos Alexandris wrote:
> > My apologies for BUMPing :-)
> >
> > On Sun, 2008-10-12 at 00:20 +0200, Nikos Alexandris wrote:
> > > I wanted to check/verify some i.pca results so I calculated 2 principal
> > > components using r.covar, m.eigensystem and r.mapcalc. The results are
> > > not the same with i.pca's output.
> > >
> > > (Maybe this post http://www.nabble.com/Eigen-vectors-tt15686112.html was
> > > about the same issue)
> > >
> > > # i.pca performed on (3) modis surface reflectance bands (2, 6 and 7 -
> > > 500m spatial resolution)
> >
> > *** and region resolution set to 500m of course***
> >
> > > r.info pca.2007.242.500.b267.1 -h
> > > [...]
> > > Eigen vectors:
> > > ( -0.64 -0.65 -0.42 )
> > > ( -0.71 0.29 0.64 )
> > > ( 0.29 -0.70 0.65 )
> > > [...]
> >
> > I repeated the same i.pca but setting this time a different region
> > resolution (250m) than before (500m) and I get slightly different
> > eigenvectors:
> >
> > *** with region resolution=250m ***
> > Eigen values:
> > ( -0.64 -0.65 -0.42 )
> > ( -0.71 0.28 0.64 )
> > ( -0.30 0.71 -0.64 )
> >
> >
> > I understand that the region "resolution" influences the results of
> > i.pca. OK, then how would someone re-produce the same PCs doing the math
> > in R and not in GRASS?
> >
> > Could someone explain or give any hints to learn more about i.pca?
> >
> > Thank you, Nikos
> >
>
> Hi,
>
> Remember that the region settings may cause re-sampling of your image due to
> changes in resolution or grid-cell alignment. Here is a re-enactment of your
> example above in GRASS, then in R- using some color imagery. Although I am
> not an expert in PCA, I think that the methods in R/GRASS here are
> comparable. In the output from R, the row and column names of the returned
> matrix are printed, and it looks like the rotation vectors (eigen vectors)
> for the 3rd PC are the least stable. This seems to make sense as (in this
> case) the 3rd PC accounts for the least amount of variance-- and is thus
> probably just picking up noise.
>
> Not sure about applying the rotation manually and how that compares with
> i.pca ...
>
> Cheers,
>
> Dylan
[...]
Hi Dylan!
Sorry for replying so late and thank you for your detailed post. I now
see what I was doing wrong when trying to produce pc's with R. Here is
how I try to replicate your example using my data:
#load library(spgrass6) and data
library(spgrass6)
x <-
readRAST6(c('MOD2007_242_500_sur_refl_b02','MOD2007_242_500_sur_refl_b06','MOD2007_242_500_sur_refl_b07'))
# prcomp (gives me an error) ## maybe because of NULL's ??
x.pca <- prcomp(x at data)
Error in svd(x, nu = 0) : infinite or missing values in 'x'
----
# Trying with a subset with no NULL's ## resolution is set to 250m
i.pca in=b2,b6,b7 out=test_pca_b267
Eigen values:
( 0.79 0.61 0.06 )
( 0.44 -0.50 -0.74 )
( 0.42 -0.61 0.67 )
# set resolution to 500m and repeat i.pca
g.region res=500 -pa
i.pca in=b2,b6,b7 out=test_pca_b267_500m
Eigen values:
( 0.79 0.61 0.06 )
( 0.44 -0.50 -0.74 )
( 0.42 -0.61 0.67 )
## Well, this subset is rather small, thus no differences between 250m
and 500m (?)
g.region -p
[...]
cells: 7455
[...]
# trying with R
x <- readRAST6(c('b2','b6','b7'))
x.pca <- prcomp(x at data)
Error in svd(x, nu = 0) : infinite or missing values in 'x'
## again the same error!
I'll try another time again.
Kind regards, Nikos
More information about the grass-user
mailing list