You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用terra::predict输出栅格,预测含季节变化的GAM温度模型

解决GAM模型结合terra预测季节温度栅格的问题

你的报错原因很明确:GAM模型包含factor(season)自变量,但预测用的栅格仅提供了elevation,缺少季节变量。不需要单独为每个季节建模,只需为每个季节指定固定的因子值,即可生成对应季节的预测栅格,具体实现如下:

修正后的完整代码

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)

# 定义季节列表
seasons <- c('winter', 'spring', 'summer', 'fall')
# 为采样点分配季节
pnts_r$season <- seasons[seq_len(nrow(pnts_r)) %% length(seasons) + 1]

# 构建包含季节因子的GAM模型
mod_gam <- mgcv::gam(temp ~ elevation + factor(season), data = pnts_r, 
                     family = gaussian(), method = "REML")

# 为每个季节生成预测栅格
season_preds <- lapply(seasons, function(current_season) {
  # 使用const参数固定当前季节的因子值,传递给模型
  terra::predict(r, mod_gam, const = list(season = current_season), type = "response")
})

# 将多个季节的栅格合并为多波段栅格
season_temp_rast <- rast(season_preds)
# 设置波段名称为对应季节
names(season_temp_rast) <- seasons

# 查看结果
season_temp_rast

关键说明

  • const参数的作用:通过const可以给预测时的所有栅格单元统一设置常量变量值,这里就是每个季节对应的因子水平,完美解决了非空间因子变量的传递问题。
  • 多波段栅格输出:最终的season_temp_rast包含4个波段,分别对应冬、春、夏、秋的温度预测结果,符合你的需求。
  • 扩展到年际变化:后续如果加入年际变量(如factor(year)),只需嵌套循环年份和季节,为每个年份-季节组合设置const = list(season = s, year = y),即可生成对应组合的预测栅格。

内容的提问来源于stack exchange,提问作者R Reid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:46