On Wed, 19 Dec 2007, Daniel McInerney wrote:
The original questioner should have written to the grass-stats list in the
first place - thanks for CC-ing. See below for inline comments:
Hi Andy,
I am unsure how to then move the 'outmap' back across to grass.
How can i convert the df to a spatial grid object.
AFAIK, 'predict' won't create a dataframe object.
R should return FALSE for is.data.frame(outmap) and
TRUE for is.numeric(outmap)
You can slot the model output to the AttributeList of
It hasn't been an AttributeList for a long time - the data slot *is* a
data frame. We *always* need the output of sessionInfo() to help -
update.packages() is most often very helpful too.
one of the SpatialGridDataFrames that you created when
you read in a GRASS raster and then use writeRAST6 to
write it back to GRASS.
e.g. using 'anmax' from your example
anmax$anmax <- outmap
#if that doesn't work, you might try
anmax$anmax <- as.numeric(outmap)
writeRAST6(anmax, "NameOfNewGRASSRaster", "anmax")
Regards,
Daniel.
cc: [EMAIL PROTECTED]
andrew haywood wrote:
Dear List,
I am having some problems analysing some ecoligical models in grass
using the spgrass package through R.
I have 130 plot locations where i have observed presence/absence of a
species. I have followed a similar framework to the BUGSITE modelling
example from Markus's 2003 grass gis handouts (Grass 5) I have no
problems constructing the model based on the 130 plots and the
environmental layers from grass.
See the OSGeo tutorial September 2006:
http://www.foss4g2006.org/contributionDisplay.py?contribId=46&sessionId=59&
confId=1
and the OSGeo Journal note:
http://www.osgeo.org/files/journal/final_pdfs/OSGeo_vol1_GRASS-R.pdf
for more up-to-date information.
However, I am having problems bringing all the maps through into R so I
can make a prediction map.
The region isnt too large 1600 by 800 cells at 10m resolution
I can bring all the environmental layers through to R using readRAST6()
which doesnt take too much time at all.
However i assume I must convert the spatial grid objects into
dataframes to apply the predicted model function.
No, usually not at all, since the objects have a data.frame in the data
slot, and have the standard access methods.
So I then coerce them into dataframes using as.dataframe (this takes
ages) I then merge all the dataframes into a single dataframe. (this
takes ages)
I then apply the model predict to the new data frame.
I am unsure how to then move the 'outmap' back across to grass.
How can i convert the df to a spatial grid object.
Im thinking i must be doing something wrong. As it quite quick to pull
through the layers . But seems to take quite a lot of processing to get
the layers into a datframe appropppriate for applying the predictions.
Any help would be greatly appreciated.
Andy
# pull through environmental layers
# FAST
anmax <- readRAST6("anmax", ignore.stderr=TRUE)
anmin <- readRAST6("anmin", ignore.stderr=TRUE)
aspect <- readRAST6("aspect", ignore.stderr=TRUE)
dem10_lidar <- readRAST6("dem10_lidar", ignore.stderr=TRUE)
Wrong, do:
mydata <- readRAST6(c("anmax", "anmin", "aspect", "dem10_lidar"),
ignore.stderr=TRUE)
then the data slot of the object is a data frame. Look at
summary(mydata)
for a sanity check.
# coerce to dataframe
# SLOW
mypred_anmaxDF<-as.data.frame(anmax)
mypred_anminDF<-as.data.frame(anmin)
mypred_aspectDF<-as.data.frame(aspect)
mypred_dem10_lidarDF<-as.data.frame(dem10_lidar)
# merge into single dataframe
# VERY SLOW
merge_tmp<-merge(mypred_anmaxDF,mypred_anminDF)
rm(mypred_anmaxDF,mypred_anminDF)
merge_tmp1<-merge(merge_tmp,mypred_aspectDF)
rm(merge_tmp,mypred_aspectDF)
mypredDF<-merge(merge_tmp1,mypred_dem10_lidarDF)
#apply model
What is tree? You may need to do extra steps depending on what class(tree)
says - if you have used rpart() or some such, you may find that
outmap <- predict(tree,newdata=mydata, type="class")
works,
or
outmap <- predict(tree,newdata=as(mydata, "data.frame"), type="class")
Maybe just assign into mydata straight away:
mydata$outmap <- predict(tree,newdata=as(mydata, "data.frame"),
type="class")
given ?predict.rpart saying:
"If 'type="class"': (for a classification tree) a factor of
classifications based on the responses."
which looks like a vector for a vector response in the formula to rpart().
But do check what happens if there are NA in the newdata, because the
default predict() behaviour may be to drop those observations. Look at
summary(mydata).
Some formula-using model fitting functions just work, like lm() and
the predict() method for lm objects.
From there, as Daniel wrote:
writeRAST6(mydata, "rpartpred", "outmap")
Hope this helps,
Roger
outmap <- predict(tree,newdata=mypredDF, type="class")