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

gratia包draw()绘图修正及空间变化长期趋势建模的R语法问题

解决bam模型中随空间变化的长期趋势建模与绘图问题

问题背景

需要建模模拟数据中随空间变化的长期趋势,并生成以Longitude为x轴、Latitude为y轴、按日历年CYR分面板的绘图。调整张量积项(ti)的变量顺序时出现如下报错:

Error in check.term(termi, rec) : 
  bam can not discretize with this nesting structure

移除部分协变量可消除报错,但无法生成符合需求的绘图。

报错原因

  1. 张量积项(ti)参数不匹配:原代码中ti包含3个变量,但d/bs/k的长度为2,违反mgcv的参数对应规则;
  2. discrete=TRUE模式限制:bam对张量积项的变量顺序和嵌套结构有严格要求,空间变量需优先于时间变量,否则离散化处理会触发嵌套结构错误;
  3. 基函数与变量类型不匹配:未正确区分空间(2D)和时间(1D循环)的平滑需求。

修正后的R代码

library(mgcv)
library(gratia)

# 修正模型定义
m <- bam(occur ~ s(temp) + 
           sal + 
           s(DO) + 
           sed_depth + 
           water_depth + 
           s(fCYR, bs = "re") + # 长期趋势随机效应
           s(Longitude, Latitude, k = 50, bs = 'tp') + # 空间主效应
           s(fSite, bs = "re") + # 重复测量随机效应
           # 空间-时间交互项:随空间变化的长期趋势(核心修正)
           ti(Longitude, Latitude, CYR, 
              d = c(2, 1),          # 前2个变量为2D空间,第3个为1D时间
              bs = c('tp', 'ds'),   # 空间用薄板样条,时间用循环样条
              k = c(50, 14)),       # 空间基函数数量,时间基函数数量
         data = toad, 
         method = 'fREML', 
         nthreads = 4, 
         discrete = TRUE,
         family = binomial(link = "logit"), 
         gamma = 1.5)

# 生成符合需求的绘图:按CYR分面板,x=Longitude,y=Latitude
draw(m, select = 7,  # 对应修正后的ti项(需根据实际项数调整)
     scales = "fixed",  # 固定各面板的坐标轴范围,便于空间趋势对比
     ncol = 3)          # 控制面板列数,可根据CYR数量灵活调整

关键修正说明

  • 张量积项顺序:将Longitude/Latitude放在ti的前两位,作为2D空间平滑组,CYR作为1D时间平滑组,匹配d/bs/k的参数长度与变量分组规则;
  • 基函数适配:空间变量用tp(薄板样条)适配地理空间结构,时间变量CYR用ds(循环样条)适配年度周期性;
  • 绘图参数调整:select需指定修正后的ti项序号(可通过summary(m)查看项的顺序),scales="fixed"保证各空间面板的坐标轴一致,避免因范围差异误导趋势判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:05:40