在R中使用randomForest包,如何映射随机森林预测?

时间:2016-07-08 14:21:49

标签: r random prediction

enter image description here我正在尝试使用randomforest来生成空间预测图。

我通过使用随机森林回归开发了我的模型,但是在最后一步中我遇到了一些使用最佳预测器来构建预测图的困难。我想创建一个地图预测图。

我的代码:

library(raster)
library(randomForest)

set.seed(12)
s <- stack("Density.tif", "Aqui.tif", "Rech.tif", "Rainfall.tif","Land Use.tif", "Cond.tif", "Nitrogen.tif", "Regions.tif","Soil.tif","Topo.tif", "Climatclass.tif", "Depth.tif")

points <- read.table("Coordonnées3.txt",header=TRUE, sep="\t", dec=",",strip.white=TRUE)

d <- extract(s, points)
rf <-randomForest(nitrate~ . , data=d, importance=TRUE, ntree=500, na.action = na.roughfix)
p <- predict(s, rf)

plot(p)

样本数据:

> head(points)
       LAT      LONG
1 -13.057007 27.549580
2  -4.255000 15.233745
3   5.300000 -1.983610
4   7.245675 -4.233336
5  12.096330 15.036016
6  -4.255000 15.233745

运行短代码时的错误是:

Error in eval(expr, envir, enclos) : object 'nitrate' not found.

2 个答案:

答案 0 :(得分:0)

我猜你在适合模型时会发生错误。

为什么会有一个名为nitrate的变量。鉴于您如何创建RasterStack,可能有一个名为Nitrogen。无论哪种方式,您都可以通过查看names(s)colnames(d)找到答案。

请注意,points不好!它们的顺序相反。订单应该是(经度,纬度)。

根据您的评论(请编辑您的问题),您应该 添加硝酸盐点文件(第三列)或类似的东西。然后做

 xy <- points[, 2:1]
 nitrate <- points[,3]

提取点并与观察到的数据结合

 d <- extract(s, xy)
 d <- cbind(nitrate=nitrate, d)

构建模型并预测

 rf <-randomForest(nitrate~ . , data=d, importance=TRUE, ntree=500, na.action = na.roughfix)
 p <- predict(s, rf)

答案 1 :(得分:0)

当您尝试构建林时,听起来好像是错误。不使用公式界面可能是最有帮助的。此外,如果d很大,则不建议使用公式接口。从randomForest上的帮助文件:&#34;对于大型数据集,尤其是那些具有大量变量的数据集,不建议通过公式接口调用randomForest:处理公式可能会有太多的开销。 #34;

假设存在d$nitrate,则解决方案为randomForest(y = d$nitrate, x = subset(d, select = -nitrate), importance=TRUE, ntree=500, na.action = na.roughfix)