使用 Terra 创建 logit GAM 物种预测栅格

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

我正在尝试使用 r 中的 GAM 来预测物种的出现(存在/不存在)。我已经安装了 GAM,但有两个问题。

  1. 为什么我的预测不是二进制的(即 1/0 表示存在/不存在)?
  2. 我可以使用 terra::predict() 来预测整个栅格堆栈中的发生情况,而不是创建测试数据集吗?
library(terra)
library(mgcv)
library(sf)

#polygons to generate random points within
v <- vect(system.file("ex/lux.shp", package="terra")) |> st_as_sf()

#get a raster from terra 
r <- rast(system.file("ex/elev.tif", package="terra"))

# Create 50 random points
set.seed(50)
pnts <- st_sample(v, size = 50, type = "random") |> st_as_sf()

# Return the exact raster value the point lies on
pnts_r <-  terra::extract(r, pnts, method = "simple") 

# Add occurrence column
pnts_r$occ <- as.factor(sample(0:1, 50, replace = TRUE))

# Fit the GAM
mod_gam <- mgcv::gam(formula = occ ~ elevation, 
                     data = pnts_r,
                     family = binomial(link = "logit"),
                     method = "REML")

# Predict using our training data
predict(mod_gam) # Why aren't the responses 1s and 0s?

# Predict using the entire raster
terra::predict(mod_gam, r, fun = "predict", na.rm=TRUE) # Error invalid name(s)

我知道模型中的变量名称需要与栅格中的变量名称相同,但在本例中只有 1(“高程”)并且两者相同。

r raster predict terra gam
1个回答
0
投票

经过一番摆弄,我想我已经回答了我的两个问题。也许这会对以后的某人有所帮助。

  1. 响应不是二进制的,而是发生的概率。通过设置阈值(通常为 0.5),可以进一步将其操纵为存在/不存在栅格。

  2. 如果您首先使用
  3. terra::as.data.frame(r, xy = TRUE)

    将它们转换为数据帧,

    terra::predict() 将在给定新栅格(或堆栈)的情况下工作。

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