<div>Thanks to all that replied.</div>
<div>&nbsp;</div>
<div>everything works well now. THank you all for such an elegant way to model!!!</div>
<div>Much more fun to play with GRASS and a stats package at the same time.</div>
<div>&nbsp;</div>
<div>I have just received my copy of Open Source GIS A GRASS GIS Approach&quot;, 3rd edition and at a first glance much of the issues are covered in Chapter 10.</div>
<div>&nbsp;</div>
<div>Once again thanks.</div>
<div>&nbsp;</div>
<div>Andy</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><br><br>&nbsp;</div>
<div><span class="gmail_quote">On 12/20/07, <b class="gmail_sendername">Roger Bivand</b> &lt;<a href="mailto:Roger.Bivand@nhh.no">Roger.Bivand@nhh.no</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On Wed, 19 Dec 2007, Dylan Beaudette wrote:<br><br>&gt; On Wednesday 19 December 2007, Roger Bivand wrote:
<br>&gt;&gt; On Wed, 19 Dec 2007, Daniel McInerney wrote:<br>&gt;&gt;<br>&gt;&gt; The original questioner should have written to the grass-stats list in the<br>&gt;&gt;<br>&gt;&gt; first place - thanks for CC-ing. See below for inline comments:
<br>&gt;&gt;&gt; Hi Andy,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;I am unsure how to then move the &#39;outmap&#39; back across to grass.<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;How can i convert the df to a spatial grid object.<br>&gt;&gt;&gt;
<br>&gt;&gt;&gt; AFAIK, &#39;predict&#39; won&#39;t create a dataframe object.<br>&gt;&gt;&gt; R should return FALSE for is.data.frame(outmap) and<br>&gt;&gt;&gt; TRUE for is.numeric(outmap)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; You can slot the model output to the AttributeList of
<br>&gt;&gt;<br>&gt;&gt; It hasn&#39;t been an AttributeList for a long time - the data slot *is* a<br>&gt;&gt; data frame. We *always* need the output of sessionInfo() to help -<br>&gt;&gt; update.packages() is most often very helpful too.
<br>&gt;&gt;<br>&gt;&gt;&gt; one of the SpatialGridDataFrames that you created when<br>&gt;&gt;&gt; you read in a GRASS raster and then use writeRAST6 to<br>&gt;&gt;&gt; write it back to GRASS.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; 
e.g. using &#39;anmax&#39; from your example<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; anmax$anmax &lt;- outmap<br>&gt;&gt;&gt; #if that doesn&#39;t work, you might try<br>&gt;&gt;&gt; anmax$anmax &lt;- as.numeric(outmap)<br>&gt;&gt;&gt; writeRAST6(anmax, &quot;NameOfNewGRASSRaster&quot;, &quot;anmax&quot;)
<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Regards,<br>&gt;&gt;&gt; Daniel.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; cc: <a href="mailto:grass-stats@lists.osgeo.org">grass-stats@lists.osgeo.org</a><br>&gt;&gt;&gt;<br>&gt;&gt;&gt; andrew haywood wrote:
<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;Dear List,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;I am having some problems analysing some ecoligical models in grass<br>&gt;&gt;&gt;&gt; using the spgrass package through R.<br>&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;I have 130 plot locations where i have observed presence/absence of a<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;species. I have followed a similar framework to the BUGSITE modelling<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;example from Markus&#39;s 2003 grass gis handouts (Grass 5) I have no
<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;problems constructing the model based on the 130 plots and the<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;environmental layers from grass.<br>&gt;&gt;<br>&gt;&gt; See the OSGeo tutorial September 2006:<br>&gt;&gt;<br>&gt;&gt; 
<a href="http://www.foss4g2006.org/contributionDisplay.py?contribId=46&amp;sessionId=59&amp;">http://www.foss4g2006.org/contributionDisplay.py?contribId=46&amp;sessionId=59&amp;</a><br>&gt;&gt; confId=1<br>&gt;&gt;<br>&gt;&gt; and the OSGeo Journal note:
<br>&gt;&gt;<br>&gt;&gt; <a href="http://www.osgeo.org/files/journal/final_pdfs/OSGeo_vol1_GRASS-R.pdf">http://www.osgeo.org/files/journal/final_pdfs/OSGeo_vol1_GRASS-R.pdf</a><br>&gt;&gt;<br>&gt;&gt; for more up-to-date information.
<br>&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;However, I am having problems bringing all the maps through into R so I<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;can make a prediction map.<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;The region isnt too large 1600 by 800 cells at 10m resolution
<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;I can bring all the environmental layers through to R using readRAST6()<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;which doesnt take too much time at all.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;However i assume I must convert the spatial grid objects into
<br>&gt;&gt;&gt;&gt; dataframes to apply the predicted model function.<br>&gt;&gt;<br>&gt;&gt; No, usually not at all, since the objects have a data.frame in the data<br>&gt;&gt; slot, and have the standard access methods.
<br>&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;So I then coerce them into dataframes using as.dataframe (this takes<br>&gt;&gt;&gt;&gt; ages) I then merge all the dataframes into a single dataframe. (this<br>&gt;&gt;&gt;&gt; takes ages)
<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;I then apply the model predict to the new data frame.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;I am unsure how to then move the &#39;outmap&#39; back across to grass.<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;How can i convert the df to a spatial grid object.
<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;Im thinking i must be doing something wrong. As it quite quick to pull<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;through the layers . But seems to take quite a lot of processing to get<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;the layers into a datframe appropppriate for applying the predictions.
<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;Any help would be greatly appreciated.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;Andy<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; # pull through environmental layers
<br>&gt;&gt;&gt;&gt; # FAST<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;anmax &lt;- readRAST6(&quot;anmax&quot;, ignore.stderr=TRUE)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;anmin &lt;- readRAST6(&quot;anmin&quot;, ignore.stderr=TRUE)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;aspect &lt;- readRAST6(&quot;aspect&quot;, 
ignore.stderr=TRUE)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;dem10_lidar &lt;- readRAST6(&quot;dem10_lidar&quot;, ignore.stderr=TRUE)<br>&gt;&gt;<br>&gt;&gt; Wrong, do:<br>&gt;&gt;<br>&gt;&gt; mydata &lt;- readRAST6(c(&quot;anmax&quot;, &quot;anmin&quot;, &quot;aspect&quot;, &quot;dem10_lidar&quot;),
<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;ignore.stderr=TRUE)<br>&gt;&gt;<br>&gt;&gt; then the data slot of the object is a data frame. Look at<br>&gt;&gt;<br>&gt;&gt; summary(mydata)<br>&gt;&gt;<br>&gt;&gt; for a sanity check.<br>&gt;&gt;<br>&gt;&gt;&gt;&gt; # coerce to dataframe
<br>&gt;&gt;&gt;&gt; # SLOW<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;mypred_anmaxDF&lt;-as.data.frame(anmax)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;mypred_anminDF&lt;-as.data.frame(anmin)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;mypred_aspectDF&lt;-as.data.frame(aspect)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;mypred_dem10_lidarDF&lt;-
as.data.frame(dem10_lidar)<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; # merge into single dataframe<br>&gt;&gt;&gt;&gt; # VERY SLOW<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;merge_tmp&lt;-merge(mypred_anmaxDF,mypred_anminDF)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;rm(mypred_anmaxDF,mypred_anminDF)
<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;merge_tmp1&lt;-merge(merge_tmp,mypred_aspectDF)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;rm(merge_tmp,mypred_aspectDF)<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;mypredDF&lt;-merge(merge_tmp1,mypred_dem10_lidarDF)<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;#apply model
<br>&gt;&gt;<br>&gt;&gt; What is tree? You may need to do extra steps depending on what class(tree)<br>&gt;&gt; says - if you have used rpart() or some such, you may find that<br>&gt;&gt;<br>&gt;&gt; outmap&nbsp;&nbsp; &lt;- predict(tree,newdata=mydata, type=&quot;class&quot;)
<br>&gt;&gt;<br>&gt;&gt; works,<br>&gt;&gt;<br>&gt;&gt; or<br>&gt;&gt;<br>&gt;&gt; outmap&nbsp;&nbsp; &lt;- predict(tree,newdata=as(mydata, &quot;data.frame&quot;), type=&quot;class&quot;)<br>&gt;&gt;<br>&gt;&gt; Maybe just assign into mydata straight away:
<br>&gt;&gt;<br>&gt;&gt; mydata$outmap&nbsp;&nbsp; &lt;- predict(tree,newdata=as(mydata, &quot;data.frame&quot;),<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;class&quot;)<br>&gt;&gt;<br>&gt;&gt; given ?predict.rpart saying:<br>&gt;&gt;<br>&gt;&gt; &quot;If &#39;type=&quot;class&quot;&#39;: (for a classification tree) a factor of
<br>&gt;&gt; classifications based on the responses.&quot;<br>&gt;&gt;<br>&gt;&gt; which looks like a vector for a vector response in the formula to rpart().<br>&gt;&gt; But do check what happens if there are NA in the newdata, because the
<br>&gt;&gt; default predict() behaviour may be to drop those observations. Look at<br>&gt;&gt; summary(mydata).<br>&gt;&gt;<br>&gt;&gt; Some formula-using model fitting functions just work, like lm() and<br>&gt;&gt; the predict() method for lm objects.
<br>&gt;&gt;<br>&gt;&gt;&gt; From there, as Daniel wrote:<br>&gt;&gt;<br>&gt;&gt; writeRAST6(mydata, &quot;rpartpred&quot;, &quot;outmap&quot;)<br>&gt;&gt;<br>&gt;&gt; Hope this helps,<br>&gt;&gt;<br>&gt;&gt; Roger<br>&gt;&gt;
<br>&gt;&gt;&gt;&gt;&nbsp;&nbsp;outmap&nbsp;&nbsp; &lt;- predict(tree,newdata=mypredDF, type=&quot;class&quot;)<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;<br>&gt;<br>&gt; An article on this in the OSGeo newsletter might be a nice way to document
<br>&gt; simple modeling examples with GRASS and R<br><br>Perhaps, and then there is the section in chapter 10 in &quot;Open Source GIS<br>A GRASS GIS Approach&quot;, 3rd edition (my copy is still on its way, but from<br>
the ToC, it looks as though pages 353-363 should be very helpful).<br><br>In fact, your site is a convenient collection of resources, I ought to<br>have mentioned it in my reply!<br><br>Roger<br><br>&gt;<br>&gt; D<br>&gt;
<br>&gt;<br>&gt;<br><br>--<br>Roger Bivand<br>Economic Geography Section, Department of Economics, Norwegian School of<br>Economics and Business Administration, Helleveien 30, N-5045 Bergen,<br>Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
<br>e-mail: <a href="mailto:Roger.Bivand@nhh.no">Roger.Bivand@nhh.no</a><br></blockquote></div><br>