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

GAM绘图:编辑Y轴以包含截距与不确定性的技术问题

GAM绘图添加截距的问题解答

问题1:仅平移值(不考虑截距不确定性)

  • 提取模型截距:直接用coef(model)[1L]获取模型的截距项。
  • 平移估计值:将截距加到fitted_values()或smooth_estimates()返回的fitted、lower_ci、upper_ci列即可。
  • 多模型处理:每个模型的截距独立,需要为每个模型重复提取截距并平移操作。可以封装成函数批量处理:
shift_with_intercept <- function(model, new_data) {
  fv <- fitted_values(model, data = new_data)
  intercept <- coef(model)[1L]
  dplyr::mutate(fv,
    fitted = fitted + intercept,
    lower_ci = lower_ci + intercept,
    upper_ci = upper_ci + intercept
  )
}

问题2:包含截距估计的不确定性(代码错误修正)

你的代码问题出在**terms参数用法错误和未固定其他协变量的水平**:

  1. terms = c("(Intercept)", "x2")是错误用法:fitted_values()的terms参数仅用于筛选结果中保留的预测变量列,无法指定是否包含截距。
  2. data_slice未固定其他协变量:GAM的预测依赖所有协变量,必须将非目标变量(x0、x1、fac、x3、logi)固定到参考水平或代表性值(如均值、基准分类),否则预测值基于默认水平,结果不符合预期。

修正后的代码:

library("gratia")    
set.seed(3)
dat <- gamSim(1,n=1500,dist="normal",scale=20)
dat$fac <- as.factor( sample(c("A1", "A2", "A3"), nrow(dat), replace = TRUE) )
dat$logi <- as.logical( sample(c(TRUE, FALSE), nrow(dat), replace = TRUE) )
bs <- "cr"; k <- 12
b <- gam(y ~ x0 + x1 + I(x1^2) + s(x2,bs=bs,k=k) + fac + x3:fac + I(x1*x2) + logi,
         data=dat)

# 固定其他协变量到参考/代表性水平,仅让x2变化
ds <- data_slice(b, 
                 x0 = mean(x0),          # 连续变量取均值
                 x1 = mean(x1),
                 fac = levels(fac)[1],   # 分类变量取基准水平
                 x3 = mean(x3),
                 logi = FALSE,           # 逻辑变量取基准水平
                 x2 = evenly(x2))

# 获取完整预测值(包含截距、其他固定变量贡献及所有不确定性)
fv <- fitted_values(b, data = ds)

解释:

  • data_slice明确固定所有非目标变量的水平,确保预测仅反映x2的效应+截距+其他固定变量的贡献。
  • 不使用terms参数限制,fitted_values()默认返回完整的线性预测器结果,包含截距的不确定性,此时fitted、lower_ci、upper_ci已经是带有截距和所有固定变量贡献的数值,且包含截距估计的不确定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:55:28