[GRASS-stats] Raster maps from GRASS to R and back to GRASS?
Nikos Alexandris
nikos.alexandris at felis.uni-freiburg.de
Tue Mar 3 11:42:45 EST 2009
Hi GRASS&R experts,
After playing around with R's functions for PCA, I need to
1. load GRASS raster maps in R
2. Do something with the data
-involved workaround for NA's
3. Get back the NA's
4. Write back the transformed data in GRASS as new raster maps.
So, this is rather a (general?) GRASS - R question: how is it done,
after having calculated the principal components for a given set of
GRASS raster maps in R, to create new GRASS raster maps with them? I
mean how is it done to write the transformed values back to the right
coordinates?
Is there a clear example on the web using the writeRAST6()function?
Below an example.
Regards, Nikos
-------------------------------------------------------------------------
# launch R from within GRASS
R
# load spgrass6, and projection parameters
library(spgrass6)
G <- gmeta6()
# load data
modis_2006_250m <- readRAST6 (c('MOD2006_239_250_sur_refl_b01',
'MOD2006_239_250_sur_refl_b02'))
# workaround NA's as explained by Dylan [1]
modis_2006_250m.values <- which(!is.na(modis_2006_250m at data
$MOD2006_239_250_sur_refl_b01) & !is.na(modis_2006_250m at data
$MOD2006_239_250_sur_refl_b02))
# create object without NA's
mod06_250m <- modis_2006_250m at data[modis_2006_250m.values, ]
# perform pca based on SVD (default with center=TRUE, scale=FALSE)
prcomp.mod06_250m <- prcomp(mod06_250m)
# check eigenvalues
summary(prcomp.mod06_250m)
Importance of components:
PC1 PC2
Standard deviation 3183.53 330.0584
Proportion of Variance 0.99 0.0106
Cumulative Proportion 0.99 1.0000
# check eigenvectors (=rotation)
prcomp.mod06_250m$rotation
PC1 PC2
MOD2006_239_250_sur_refl_b01 -0.3640966 -0.9313612
MOD2006_239_250_sur_refl_b02 -0.9313612 0.3640966
# write back to GRASS the transformed data as new RASTER maps?
--> Any help here on how to get the values to the right coordinates? Is
it enough to just use some <--
=======================================================================
Extra info: comparing the resulted PC's from both R and GRASS
=======================================================================
# compare with i.pca
i.pca input="MOD06_250_b01,MOD06_250_b02" output="TEST06_250m_b12"
rescale=0,0
Eigen values, (vectors), and [percent importance]:
PC1 3481240.24 ( 0.36 0.93 ) [ 98.92% ]
PC2 37875.46 ( 0.93 -0.36 ) [ 1.08% ]
### Note ###
The signs of the eigenvectors exactly the opposite. Therefore we expect
that the Principal Components deriving from R's "prcomp()" will be the
opposite of the Components deriving from "i.pca"
### #### ###
# get summary for PC's produced by "prcomp()"
summary(prcomp.mod06_250m$x)
PC1 PC2
Min. :-10167.54 Min. :-3919.99
1st Qu.: -3422.88 1st Qu.: -167.49
Median : -3119.27 Median : 45.32
Mean : -3135.72 Mean : 21.60
3rd Qu.: -2851.33 3rd Qu.: 239.13
Max. : -64.22 Max. : 1611.15
# get variances for PC's produce by "prcomp()"
var(prcomp.mod06_250m$x[, 1])
[1] 302107.8
var(prcomp.mod06_250m$x[, 2])
[1] 108471.9
# compare with PC's from GRASS
### kept are only commonly reported parameters by GRASS' "r.univar" and
R's "summary()" ###
# for GRASS' PC1
r.univar TEST2006_250m_b12.1
[...]
n: 350879
minimum: 64.2261
maximum: 10166.7
...
mean: 3139.65
mean of absolute values: 3139.65
standard deviation: 543.404
variance: 295287
# for GRASS' PC2
r.univar TEST2006_250m_b12.2
100%
total null and non-null cells: 1023328
total null cells: 672449
Of the non-null cells:
----------------------
n: 350879
minimum: -1609.93
maximum: 3922.17
mean: -22.0414
...
variance: 108444
######## Result is #########
### almost identical :-) ###
############################
More information about the grass-stats
mailing list