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

如何在R中实现逐次排除carb水平的gear分组嵌套GLM建模

解决方案

先整理数据并定义要循环的目标carb水平:

library(dplyr)
library(purrr)
library(broom)
library(plyr) # 保留你原使用的dlply

# 加载数据并预处理
data("mtcars")
mtcars$Name <- row.names(mtcars)
row.names(mtcars) <- NULL

# 先排除carb=6和8,得到基础数据集
base_data <- mtcars %>% filter(!carb %in% c(6,8))
# 定义需要逐次排除的carb水平
exclude_carb_list <- c(1,2,3,4)

接下来用map实现外层循环,对每个要排除的carb水平,执行分组建模并整理结果:

# 嵌套建模并整理结果
final_result <- map_df(exclude_carb_list, function(exclude_carb) {
  # 排除当前指定的carb水平
  filtered_data <- base_data %>% filter(carb != exclude_carb)
  
  # 按gear分组跑GLM模型,和你原代码逻辑一致
  model_list <- plyr::dlply(filtered_data, "gear",
                            function(x) tryCatch(
                              glm(mpg ~ wt, data = x),
                              error = function(e) NA
                            ), .drop = TRUE)
  
  # 整理模型结果,新增排除的carb标识列
  map2_df(model_list, names(model_list), ~{
    if (!is.na(.x)) {
      broom::tidy(.x, confint = TRUE)[2,] %>%
        mutate(gear = .y, excluded_carb = exclude_carb)
    } else {
      # 若模型报错,返回空行(可根据需求调整)
      tibble(term = NA, estimate = NA, std.error = NA, statistic = NA,
             p.value = NA, conf.low = NA, conf.high = NA, gear = .y, excluded_carb = exclude_carb)
    }
  })
})

结果说明

  • final_result包含所有场景的统计结果:
    • excluded_carb列标记当前排除的carb水平
    • gear列标记分组的gear水平
    • 其余列是模型中wt项的回归系数、置信区间等统计量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:55:20