[GRASS-user] Grass to R and back again (randomForest classification)

2010-06-11 Thread Daniel Victoria
Hi list,

I'm trying to do a randomForest classification in a MODIS NDVI time
series. So far I've been able to generate the randomForest and get the
Grass NDVI images inside grass as a SpatialGridDataFrame. Then,
following some notes from Markus Neteler [1], I converted the
SpatialGridDataFrame to a DataFrame and sucessfully applied the
randomForest classifier. The problem is that now I'm struglling to
transform the DataFrame back to a grass image. What is giving me a
headach is that the images contains lots of null values (I need to
have a MASK in place) so, each NDVI image has 1023701 cells but the
DataFrame has only 264647 values since the conversion from SpatialGrid
to DataFrame skips the nulls.

So, the question is, how to convert my DataFrame back to a Grass image?

Cheers
Daniel

[1] http://mpa.fbk.eu/markus/shortcourse/notes7.html

PS - For completion sake...
Using Grass 6.4.0RC6 in Ubuntu 9.10
R 2.11

commands used in R:

# open images
ndvi - readRAST6(list of 23 ndvi images)

# convert to dataframe
ndvi.df - as.data.frame(ndvi)

class - predict(RFmodel, ndvi.df)

# class contains 264647 classified pixels - how to get them back to an image?
___
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user


Re: [GRASS-user] Grass to R and back again (randomForest classification)

2010-06-11 Thread Nikos Alexandris
Daniel Victoria:
 I'm trying to do a randomForest classification in a MODIS NDVI time
 series. So far I've been able to generate the randomForest and get the
 Grass NDVI images inside grass as a SpatialGridDataFrame. Then,
 following some notes from Markus Neteler [1], I converted the
 SpatialGridDataFrame to a DataFrame and sucessfully applied the
 randomForest classifier. The problem is that now I'm struglling to
 transform the DataFrame back to a grass image. What is giving me a
 headach is that the images contains lots of null values (I need to
 have a MASK in place) so, each NDVI image has 1023701 cells but the
 DataFrame has only 264647 values since the conversion from SpatialGrid
 to DataFrame skips the nulls.

 So, the question is, how to convert my DataFrame back to a Grass image?

Daniel,
so far I used the following steps:

# import raster data in R using readRAST6 of course
x.raw - readRAST6 (SomeRasterMap) # or readRAST6 (SomeRasterMap ,  NODATA = 
-99 )

# use complete cases to deal with NA's
x.nonas - complete.cases ( x...@data )

# get values
x - x@data[x.nonas,]

# add new columns to x.raw that will be fed with... newvalues
x@data$column1 - NA
x@data$column2 - NA
[etc.]

# do something with your data or create new data.frame(s)

# fill in the new (empty) columns of xraw
x@data$column1[x.nonas] - new.data.frame$newslot[,newcolumn]
[etc.]

# write back to grass
writeRAST6(x.raw, zcol= NumberOfNewColumn, vname=SomeNameForTheRaster, 
overwrite=TRUE)

Something like that... Hope it helps,
Nikos

---
 [1] http://mpa.fbk.eu/markus/shortcourse/notes7.html

--- 
 PS - For completion sake...
 Using Grass 6.4.0RC6 in Ubuntu 9.10
 R 2.11
 
 commands used in R:
 
 # open images
 ndvi - readRAST6(list of 23 ndvi images)
 
 # convert to dataframe
 ndvi.df - as.data.frame(ndvi)
 
 class - predict(RFmodel, ndvi.df)
 
 # class contains 264647 classified pixels - how to get them back to an
 image?
___
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user


Re: [GRASS-user] Grass to R and back again (randomForest classification)

2010-06-11 Thread Daniel Victoria
Thanks Nikos, it worked like a charm!
I'd also like to thaks Ned Horning for some greatlly aprecciated
off-list R help!

Cheers
Daniel

On Fri, Jun 11, 2010 at 9:39 AM, Nikos Alexandris
nikos.alexand...@felis.uni-freiburg.de wrote:
 Daniel Victoria:
 I'm trying to do a randomForest classification in a MODIS NDVI time
 series. So far I've been able to generate the randomForest and get the
 Grass NDVI images inside grass as a SpatialGridDataFrame. Then,
 following some notes from Markus Neteler [1], I converted the
 SpatialGridDataFrame to a DataFrame and sucessfully applied the
 randomForest classifier. The problem is that now I'm struglling to
 transform the DataFrame back to a grass image. What is giving me a
 headach is that the images contains lots of null values (I need to
 have a MASK in place) so, each NDVI image has 1023701 cells but the
 DataFrame has only 264647 values since the conversion from SpatialGrid
 to DataFrame skips the nulls.

 So, the question is, how to convert my DataFrame back to a Grass image?

 Daniel,
 so far I used the following steps:

 # import raster data in R using readRAST6 of course
 x.raw - readRAST6 (SomeRasterMap) # or readRAST6 (SomeRasterMap ,  NODATA =
 -99 )

 # use complete cases to deal with NA's
 x.nonas - complete.cases ( x...@data )

 # get values
 x - x@data[x.nonas,]

 # add new columns to x.raw that will be fed with... newvalues
 x@data$column1 - NA
 x@data$column2 - NA
 [etc.]

 # do something with your data or create new data.frame(s)

 # fill in the new (empty) columns of xraw
 x@data$column1[x.nonas] - new.data.frame$newslot[,newcolumn]
 [etc.]

 # write back to grass
 writeRAST6(x.raw, zcol= NumberOfNewColumn, vname=SomeNameForTheRaster,
 overwrite=TRUE)

 Something like that... Hope it helps,
 Nikos

 ---
 [1] http://mpa.fbk.eu/markus/shortcourse/notes7.html

 ---
 PS - For completion sake...
 Using Grass 6.4.0RC6 in Ubuntu 9.10
 R 2.11

 commands used in R:

 # open images
 ndvi - readRAST6(list of 23 ndvi images)

 # convert to dataframe
 ndvi.df - as.data.frame(ndvi)

 class - predict(RFmodel, ndvi.df)

 # class contains 264647 classified pixels - how to get them back to an
 image?

___
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user