如何使用 terra::predict 进行栅格输出来预测具有季节变化的 GAM 温度模型

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

我正在尝试使用(mgcv 包)GAM 来模拟跨季节的温度。我有兴趣使用

terra::predict()
将预测温度绘制为栅格。

理想情况下,输出为研究区域的 4 个栅格,代表四个季节(冬季、春季、夏季、秋季)。但是,我不明白如何预测/在使用非空间(非栅格)与因素/组(季节)时是否可以做到这一点。

我的代码示例如下:

library(terra)
library(mgcv)
v <- vect(system.file("ex/lux.shp", package="terra"))
r <- rast(system.file("ex/elev.tif", package="terra"))
set.seed(50)
pnts <- spatSample(v, size = 50)
pnts_r <- terra::extract(r, pnts, method = "simple") 
pnts_r$temp <- sample(0:25, 50, replace = TRUE)
# Define the sequence of seasons
seasons <- c('winter', 'spring', 'summer', 'fall')

# random add seasons seq
pnts_r$season <- seasons[seq_len(nrow(pnts_r)) %% length(seasons) + 1]

mod_gam <- mgcv::gam(temp ~ elevation + factor(season), data = pnts_r, 
                     family = gaussian(), method = "REML")

p <- predict(mod_gam, type="response")
x <- terra::predict(r, mod_gam, type="response")

#Error in eval(predvars, data, env) : object 'season' not found
#In addition: Warning message:
#In predict.gam(model, d, ...) :
#  not all required variables have been supplied in  newdata!`

我知道季节不包含在该栅格中,但我不知道是否可以将空栅格堆叠为占位符,或者应单独执行每个季节的温度建模。我还想引入更多数据来研究年间变化,但想简单地从一年的季节间变化开始。

如有任何帮助,我们将不胜感激

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

你可以做

x <- terra::predict(r, mod_gam, type="response", const=data.frame(season="fall"))

其他季节也是如此。

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