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

如何对数据框列中存储的GAM模型对象执行gam.check()?

如何对数据框列中的GAM模型批量执行gam.check()

问题根源

你之前的模型构建代码存在关键错误:没有对嵌套的分组数据集逐个调用gam(),导致fit列并未正确存储每个city/sex分组对应的GAM模型,这是后续调用gam.check()报错的核心原因。


步骤1:修正模型构建代码

必须先按city/sex分组,再用purrr::map()遍历每个嵌套数据集,生成对应分组的GAM模型:

library(dplyr)
library(purrr)
library(mgcv)

# 正确构建每个分组的GAM模型
fitted_gam <- demographic_data %>%
  group_by(city, sex) %>%
  nest(data = c(age, year, count)) %>%
  mutate(fit = map(data, ~ gam(count ~ s(age) + s(year),
                               data = .x,
                               family = poisson,
                               method = "REML"))) %>%
  ungroup()

步骤2:批量执行gam.check()

gam.check()主要用于输出诊断信息(无重要返回值),因此用purrr::walk()遍历fit列的模型对象最适合:

带分组标识的批量执行(便于区分输出)

fitted_gam %>%
  pwalk(list(city, sex, fit), ~ {
    cat("=== 分组:城市=", ..1, ",性别=", ..2, " ===\n", sep = "")
    gam.check(..3)
    cat("\n-------------------------\n")
  })

简洁版批量执行

# 直接遍历fit列所有模型
walk(fitted_gam$fit, gam.check)

步骤3:单个分组的模型诊断

如果只需查看特定分组的诊断结果,要用pull()提取单个模型对象(select()返回的是tibble,不是模型本身):

# 提取London/Male分组的模型并执行诊断
london_male_model <- fitted_gam %>%
  filter(city == 'London', sex == 'Male') %>%
  pull(fit) %>%
  pluck(1)  # 提取列表中的模型对象

gam.check(london_male_model)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:25:19