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

如何在R中逐个拟合单变量Logistic回归并导出结果?

R中批量拟合单变量Logistic回归并提取结果

关于你提到的工具说明:

  • ols_step_all_possible 来自olsrr包,仅适用于普通最小二乘(OLS)线性回归,完全不支持Logistic回归,不要使用它。
  • MuMIn包的dredge确实能筛选模型,但用来只做单变量模型属于大材小用,手动批量拟合更高效直接。

解决方案:

以下提供两种实用方法,都能快速拟合20个单变量Logistic回归,并提取系数、优势比(OR)和p值到表格。

方法1:Base R 循环(无需额外包)

# 模拟示例数据(替换成你的真实数据)
set.seed(123)
n <- 100
dat <- data.frame(
  y = rbinom(n, 1, 0.5),
  matrix(rnorm(n*20), ncol=20, dimnames=list(NULL, paste0("x", 1:20)))
)

# 获取所有预测变量名
pred_vars <- colnames(dat)[-1]

# 初始化结果容器
results_list <- list()

# 逐个拟合模型并提取结果
for(var in pred_vars) {
  # 构造回归公式
  fit_formula <- as.formula(paste("y ~", var))
  # 拟合Logistic回归
  model <- glm(fit_formula, data = dat, family = "binomial")
  # 提取自变量的系数、p值(跳过截距项)
  coef_info <- summary(model)$coefficients[2, ]
  # 整理成数据框存入列表
  results_list[[var]] <- data.frame(
    变量名 = var,
    系数 = coef_info[1],
    优势比OR = exp(coef_info[1]),
    p值 = coef_info[4]
  )
}

# 合并为最终表格
final_result <- do.call(rbind, results_list)
rownames(final_result) <- NULL

方法2:Tidyverse + Broom(代码更简洁)

如果你熟悉tidyverse生态,用purrr配合broom包可以更优雅地处理:

library(tidyverse)
library(broom)

# 沿用上面的示例数据,替换成你的数据即可
pred_vars <- colnames(dat)[-1]

final_result <- pred_vars %>%
  map_dfr(function(var) {
    # 拟合模型
    glm(as.formula(paste("y ~", var)), data = dat, family = "binomial") %>%
      # 把模型结果转换成数据框
      tidy() %>%
      # 只保留自变量的行(跳过截距)
      filter(term == var) %>%
      # 计算优势比,并重命名列
      mutate(优势比OR = exp(estimate)) %>%
      select(变量名 = term, 系数 = estimate, 优势比OR, p值 = p.value)
  })

可选:用dredge实现(不推荐)

如果一定要用MuMIn的dredge,需要先拟合全模型,再筛选单变量模型:

library(MuMIn)

# 拟合包含所有变量的全模型(注意需确保无缺失值,设置na.action=na.fail)
full_model <- glm(y ~ ., data = dat, family = "binomial", na.action = na.fail)

# 筛选仅含1个自变量的模型(df=2表示截距+1个变量,自由度为2)
dredge_out <- dredge(full_model, subset = (df == 2))

# 转换为表格并整理列
dredge_result <- as.data.frame(dredge_out) %>%
  mutate(优势比OR = exp(estimate)) %>%
  select(变量名 = term, 系数 = estimate, 优势比OR, p值 = `Pr(>|z|)`)

这种方法需要先拟合全模型,对于仅需单变量模型的场景来说冗余,不如前面两种方法直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:12:44