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

使用gratia::data_slice()处理含offset的GAM模型遇错求助

解决gratia包data_slice()处理带offset的GAM模型报错问题

我使用GitHub版本的gratia包,尝试从带有offset的GAM模型中提取拟合值,但调用data_slice()时遇到报错。

场景复现

数据集定义:

df <- data.frame(...)

构建的GAM模型:

gam <- gam(Landings~s(per.change)+offset(log(lmb_eff)), data=df)

执行以下代码时触发错误:

ds <- data_slice(gam, per.change = evenly(per.change, n = 100), Season = evenly(Season), lmb_eff=1)

错误信息:

Error in eval(predvars, data, env) : object 'lmb_eff' not found

解决方案

gratia的data_slice()针对offset有专门的参数配置方式,不需要直接传入offset对应的原始变量(比如lmb_eff),而是通过offset参数直接指定offset的计算值:

  • 当你想固定lmb_eff=1时,对应的offset值为log(1)=0,可以直接设置:
ds <- data_slice(gam, per.change = evenly(per.change, n = 100), Season = evenly(Season), offset = 0)
  • 如果需要基于不同lmb_eff值计算offset,也可以直接传入计算后的offset向量,比如:
# 假设要测试lmb_eff从1到10的情况
lmb_vals <- seq(1,10, by=1)
ds <- data_slice(gam, per.change = evenly(per.change, n = 100), Season = evenly(Season), offset = log(lmb_vals))

之后就可以正常用fitted_values()处理生成的切片数据:

fv <- fitted_values(gam, data = ds)

注意:如果你的模型公式中没有包含Season变量,data_slice()里指定Season = evenly(Season)可能会生成多余的列,但不会影响拟合值计算;如果不需要按Season分组,可去掉该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:40:42