如何用R制作多变量AUC及95%置信区间表格
多变量AUC及95%CI表格制作方案
问题背景
你需要制作一个多行表格,每行对应一个变量的AUC值和95%置信区间,目前已实现单变量表格生成,想扩展到多变量并寻求更简便的实现方法。
多变量表格实现方法
方法一:循环批量处理(基础实现)
如果数据中有多个需计算ROC的变量,可通过循环避免重复编写单变量代码:
假设你的数据框为df,二分类结局变量是y,待分析变量列表为vars <- c("Average Diastolic BP", "Age", "BMI"),代码如下:
# 加载依赖包 library(pROC) library(dplyr) library(gt) # 定义待分析变量列表 vars <- c("Average Diastolic BP", "Age", "BMI") # 初始化空列表存储结果 auc_results <- list() # 循环计算每个变量的AUC和95%CI for (var in vars) { roc_obj <- roc(df$y, df[[var]]) auc_val <- round(auc(roc_obj), 2) ci_vals <- round(ci.auc(roc_obj), 2) ci_str <- paste(ci_vals[1], ci_vals[3], collapse = " - ") auc_results[[var]] <- data.frame( Characteristic = var, "Area under curve" = auc_val, "Confidence interval" = ci_str, check.names = FALSE ) } # 合并结果并生成gt表格 Table_AUC <- bind_rows(auc_results) %>% gt() Table_AUC
方法二:用purrr简化迭代(更简洁)
借助purrr::map_dfr可一行完成结果合并,代码更紧凑:
library(pROC) library(dplyr) library(purrr) library(gt) vars <- c("Average Diastolic BP", "Age", "BMI") Table_AUC <- map_dfr(vars, function(var) { roc_obj <- roc(df$y, df[[var]]) tibble( Characteristic = var, "Area under curve" = round(auc(roc_obj), 2), "Confidence interval" = paste(round(ci.auc(roc_obj), 2)[c(1,3)], collapse = " - ") ) }) %>% gt() Table_AUC
方法三:专用工具包(新手推荐)
如果想快速生成标准化表格,推荐使用finalfit包,它专为临床研究表格设计,可自动完成ROC计算与结果整理:
library(finalfit) library(dplyr) library(gt) # 定义结局变量和待分析变量 explanatory <- c("Average Diastolic BP", "Age", "BMI") dependent <- "y" # 直接生成包含AUC的表格 auc_table <- finalfit(dependent, explanatory, data = df, metrics = TRUE) %>% select(Characteristic, `Area under the curve`, `95% CI`) %>% gt() auc_table
内容的提问来源于stack exchange,提问作者Shad
相关产品推荐
相关产品推荐

