我正在尝试使用(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!`
我知道季节不包含在该栅格中,但我不知道是否可以将空栅格堆叠为占位符,或者应单独执行每个季节的温度建模。我还想引入更多数据来研究年间变化,但想简单地从一年的季节间变化开始。
如有任何帮助,我们将不胜感激
你可以做
x <- terra::predict(r, mod_gam, type="response", const=data.frame(season="fall"))
其他季节也是如此。