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

如何使用dplyr 1.0.0对多列分别运行glm模型并获得规整输出

实现方案

你需要的功能可以结合dplyr 1.0+的语法、tidyr长表转换、嵌套分组和broom的结果提取实现,完整可运行代码如下:
首先加载所需依赖包:

library(dplyr)
library(tidyr)
library(purrr)
library(broom)

提取各模型系数结果(对应broom::tidy输出)

df %>%
  # 仅选择out开头的因变量列转换为长表,灵活匹配目标列
  pivot_longer(cols = starts_with("out"), 
               names_to = "outcome", 
               values_to = "y") %>%
  # 按不同结局变量分组
  group_by(outcome) %>%
  # 分组嵌套生成各结局对应的独立数据集
  nest() %>%
  # 每组分别拟合glm模型,再提取结构化结果
  mutate(
    model = map(data, ~glm(y ~ pred, family = binomial, data = .x)),
    coeff_res = map(model, tidy)
  ) %>%
  # 展开结果得到规整数据框
  unnest(coeff_res) %>%
  # 可选:移除不需要的嵌套数据、模型列
  select(-data, -model)

输出结果每一行对应单个结局模型的单个参数估计结果,包含变量名、系数、标准误、p值等结构化字段。

提取各模型整体拟合指标(对应broom::glance输出)

如果需要模型的AIC、零偏差、残差偏差等整体拟合指标,只需将上述代码中的tidy替换为glance即可:

df %>%
  pivot_longer(cols = starts_with("out"), 
               names_to = "outcome", 
               values_to = "y") %>%
  group_by(outcome) %>%
  nest() %>%
  mutate(
    model = map(data, ~glm(y ~ pred, family = binomial, data = .x)),
    fit_res = map(model, glance)
  ) %>%
  unnest(fit_res) %>%
  select(-data, -model)

该方案完全适配dplyr 1.0.0及以上版本的语法规范,支持通过starts_with、ends_with、contains等dplyr选择器灵活筛选需要拟合的因变量列,输出结果为标准数据框,比纯map返回的列表更便于后续批量处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:04