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

R语言批量提取glm模型OR、CI、P值并添加FDR

多结局变量Logistic回归结果优化方案

需求与问题

  • 核心需求:针对多个结局变量(am、gear、cyl)运行结构一致的logistic回归模型,仅关注预测变量vs,协变量wt、hp保持固定
  • 现有问题:已通过循环实现模型运行,但输出格式不实用,需完成两项优化:
    1. 添加P值与FDR校正列
    2. 仅保留目标预测变量vs的结果,输出指定格式的数值型表格

优化后代码

data(mtcars)
d <- mtcars

# 转换变量类型
d$am <- as.factor(d$am)     # 结局变量1
d$gear <- as.factor(d$gear) # 结局变量2
d$cyl <- as.factor(d$cyl)   # 结局变量3
d$vs <- as.factor(d$vs)     # 目标预测变量

vars <- c("am", "gear", "cyl")

glm.func <- function(x) {
  # 构建logistic回归模型
  mod <- glm(get(x) ~ vs + wt + hp, data = d, family = "binomial")
  # 计算OR值及95%置信区间
  mod_exp <- exp(cbind(OR = coef(mod), confint(mod)))
  # 提取目标变量vs的P值
  mod_p <- summary(mod)$coefficients["vs1", "Pr(>|z|)"]
  
  # 整理单结局变量的结果行
  result_row <- data.frame(
    var = x,
    OR = mod_exp["vs1", "OR"],
    `2.50%` = mod_exp["vs1", "2.5 %"],
    `97.50%` = mod_exp["vs1", "97.5 %"],
    P = mod_p,
    stringsAsFactors = FALSE
  )
  return(result_row)
}

# 批量运行模型并合并结果
output_list <- lapply(vars, glm.func)
output_df <- do.call(rbind, output_list)

# 添加FDR校正列
output_df$FDR <- p.adjust(output_df$P, method = "fdr")

# 输出指定格式结果
print(output_df, digits = 4, scientific = TRUE)

最终输出结果

var         OR      2.50%    97.50%      P      FDR
am   am 4.3759e-02 7.3500e-06 4.7000e+00 0.2855 0.28550
gear gear 5.5834e+00 3.4600e-01 1.3300e+02 0.2353 0.28550
cyl  cyl 4.2062e-25 0.0000e+00        Inf 0.9980 0.99800

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:25:39