当前位置: 首页 > 知识库问答 >
问题:

R:以栅格为响应和解释变量的随机森林

白子明
2023-03-14

我想用随机森林方法创建火灾发生概率图。我的响应变量是一个光栅,其中包含每个网格单元的年平均燃烧面积。我的解释变量是多个光栅(温度、海拔、土地利用和人口密度)。是否可以使用光栅作为响应变量,以及基本代码线的外观如何?我找不到这方面的任何信息。

files <- list.files(path="C:/Users/fsorb/OneDrive/Desktop/test/fire_prob", pattern="grd", all.files=FALSE, full.names=TRUE,recursive=TRUE)
predictors <- stack(files)
fire <- raster("C:/Users/fsorb/OneDrive/Desktop/test/env_data/fire.tif")
fire_occ_prob <- randomForest(fire ~ ., data = predictors, ntree=500)

到目前为止,我的代码也是如此,但我得到了一个错误:as中的错误。数据框架默认值(数据):无法将“结构(“RasterStack”,package=“raster”)”转换为数据。框架

我试图保存火栅格as.dataframe但所有网格单元格只得到NA值。

共有1个答案

齐昊苍
2023-03-14

我会尽力

  1. 将响应(火)光栅转换为点
  2. 提取点的预测值
  3. 使用生成的数据帧训练随机森林模型。
require(raster)
require(sf)
require(dplyr)
require(randomForest)

files <- list.files(path="C:/Users/fsorb/OneDrive/Desktop/test/fire_prob", pattern="grd", all.files=FALSE, full.names=TRUE,recursive=TRUE)
predictors <- stack(files)
fire <- raster("C:/Users/fsorb/OneDrive/Desktop/test/env_data/fire.tif")

# convert raster to point
response <- rasterToPoints(fire, spatial = TRUE) %>% st_as_sf()
response$ID <- c(1:nrow(response))
colnames(response)[1] <- "response"

# combine predictor values with the response
rs_preds <- full_join(terra::extract(x=r2, y=response, df=TRUE), 
                      st_drop_geometry(response), by="ID")

# train random forest
fire_occ_prob <- randomForest(response ~ .,
                              data = rs_preds[,!names(rs_preds) %in% "ID"],
                              ntree=500,
                              importance = TRUE)
# plot variable importance
varImpPlot(fire_occ_prob)

# make spatial predictions
sp_pred <- raster::predict(predictors, model=fire_occ_prob)

如果您的目标是进行空间(时间)预测,请确保使用空间(时间)(交叉)验证策略。有关更多信息,请参见Roberts等人(2016):https://doi.org/10.1111/ecog.02881

你好,简

 类似资料:
  • 我正在尝试创建一个动态ML应用程序,允许用户上传一个数据集,以使用随机林模型预测数据集中的第一列。 我在使用randomforest()函数时遇到了问题,特别是当我试图将响应变量指定为数据集的第一列时。对于下面的示例,我使用iris数据集,并将响应变量Species移动到第一列中。 这是我的尝试: 然而,这不起作用。我得到的错误是: 错误:可变长度不同(针对“物种”找到) 只有当我像这样手动指定响

  • 我有一个随机森林,目前建立在100个不同的变量之上。我希望能够只选择“最重要”的变量来构建我的随机森林,以尝试提高性能,但我不知道从哪里开始,除了从rf$重要性中获得重要性。 我的数据只是由数字变量组成,这些变量都经过了缩放。 以下是我的射频代码:

  • 我正在使用randomForest包对不同预测值的光栅堆栈进行分类。分类工作正常,但我还想检索类概率。对于我的代码,我只得到一个具有第一个类概率的RasterLayer,但我希望得到一个具有一个层中每个类的类概率的RasterStack。

  • 主要内容:安装R包 - randomForest,语法,示例在随机森林方法中,创建了大量的决策树。每个观察结果都被送入每个决策树。 每个观察结果最常用作最终输出。对所有决策树进行新的观察,并对每个分类模型进行多数投票。 对于在构建树时未使用的情况进行错误估计。 这被称为OOB(Out-of-bag)错误估计,以百分比表示。 R中的软件包用于创建随机林。 安装R包 - randomForest 在R控制台中使用以下命令安装软件包,还必须安装其它依赖软件包(如

  • 我正在尝试在R中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光

  • 是否可以使用插入符号用多变量响应变量调整随机林(