R语言批量提取glm模型OR、CI、P值并添加FDR
多结局变量Logistic回归结果优化方案
需求与问题
- 核心需求:针对多个结局变量(
am、gear、cyl)运行结构一致的logistic回归模型,仅关注预测变量vs,协变量wt、hp保持固定 - 现有问题:已通过循环实现模型运行,但输出格式不实用,需完成两项优化:
- 添加P值与FDR校正列
- 仅保留目标预测变量
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
相关产品推荐
相关产品推荐

