使用 terra::predict 和 caret::train ranger 模型生成物种分布的预测栅格

问题描述 投票:0回答:1

我正在进行一个物种分布项目,涉及存在点和伪不存在/背景点。我已经设置了一个数据框,并使用 caret::train 训练了 10 k 倍的模型,并且我使用 method="ranger" 让生活变得更轻松。所以,现在我有了一个平均的游侠模型。

现在,我遇到了障碍。我有这个堆栈栅格文件,其中包含生物气候资料(WorldClim)、地形数据(海拔、坡度等),以及几个分类栅格(土地利用和地质类型)。计划是使用 terra::predict 来获取显示存在概率的栅格。

但问题是:当我运行预测函数时,它给我带来了麻烦。它要么根本不运行,要么吐出有关“列中缺少数据”的错误消息我已经检查过,并且我的堆栈栅格都很好;当我使用更简单的 *randomForest *没有 k-folds 时,它们工作得很好。 我尝试寻找其他预测方法并尝试如何提供数据,但到目前为止还没有运气。有人有任何想法或建议来帮助我解决这个问题吗?

非常感谢!

目标: 使用伪不存在和随机森林生成物种分布的概率栅格。然后使用该模型来预测仅变化的气候栅格的当前和未来分布。

caret terra
1个回答
0
投票

一些简单的示例数据(来自

?terra::predict

library(terra)
logo <- rast(system.file("ex/logo.tif", package="terra"))   
names(logo) <- c("red", "green", "blue")
p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85, 
   66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31, 
   22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)

a <- matrix(c(22, 33, 64, 85, 92, 94, 59, 27, 30, 64, 60, 33, 31, 9,
   99, 67, 15, 5, 4, 30, 8, 37, 42, 27, 19, 69, 60, 73, 3, 5, 21,
   37, 52, 70, 74, 9, 13, 4, 17, 47), ncol=2)
xy <- rbind(cbind(1, p), cbind(0, a))
e <- extract(logo, xy[,2:3])
v <- data.frame(cbind(pa=xy[,1], e))

拟合模型并检查它返回的内容

model <- ranger::ranger(formula=pa~., data=v) predict(model, logo[1:4]) |> str() #List of 5 # $ predictions : num [1:4] 0.00101 0.00101 0.00101 0.00101 # $ num.trees : num 500 # $ num.independent.variables: num 3 # $ num.samples : int 4 # $ treetype : chr "Regression" # - attr(*, "class")= chr "ranger.prediction"

我们对“预测”感兴趣,并且想知道我们可以使用这个函数

predfun <- function(...) predict(...)$predictions

并将其与 
terra::predict

 一起使用
x <- predict(logo, model, fun=predfun)

如果这对您没有帮助,那么请更改我的示例并在您的问题中使用它来显示您陷入困境的地方。

© www.soinside.com 2019 - 2024. All rights reserved.