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

如何将Cox回归输出结果转换为DataFrame?

将Cox回归结果转换为指定格式的DataFrame(R语言)

问题背景

我用以下代码运行了单变量Cox回归模型:

res <- coxph(Surv(DFS, DFS.Event) ~ Grade, data = Grade)
summary(res)

模型输出结果如下:

Call:
coxph(formula = Surv(DFS, DFS.Event) ~ Grade, data = Grade)

  n= 172, number of events= 38 
   (12 observations deleted due to missingness)

             coef exp(coef) se(coef)     z Pr(|z|)
GradeGrade2 1.153     3.167    1.026 1.123    0.261
GradeGrade3 1.006     2.736    1.028 0.979    0.327

            exp(coef) exp(-coef) lower .95 upper .95
GradeGrade2     3.167     0.3158    0.4237     23.67
GradeGrade3     2.736     0.3655    0.3651     20.50

Concordance= 0.539  (se = 0.04 )
Likelihood ratio test= 1.82  on 2 df,   p=0.4
Wald test            = 1.34  on 2 df,   p=0.5
Score (logrank) test = 1.45  on 2 df,   p=0.5

需要把上述输出转换成如下格式的DataFrame:

Variable    coef    exp(coef)   se(coef)    z   p   lower 0.95  upper 0.95
GradeGrade2 1.153   3.167   1.026   1.123   0.261   0.4237  23.67
GradeGrade3 1.006   2.736   1.028   0.979   0.327   0.3651  20.5

解决方案

方法1:用broom包快速生成整洁DataFrame

broom是专门用来整理统计模型输出的工具包,操作简单:

  1. 安装并加载依赖包:
install.packages("broom")
library(broom)
library(dplyr)
  1. 提取并整理结果:
# 获取系数、标准误、z值、p值等核心信息
tidy_result <- tidy(res) %>%
  rename(Variable = term, p = p.value) %>%
  mutate(`exp(coef)` = exp(coef))

# 获取95%置信区间
ci_result <- confint(res) %>%
  as.data.frame() %>%
  rename(`lower 0.95` = 1, `upper 0.95` = 2) %>%
  rownames_to_column("Variable")

# 合并两部分数据并调整列顺序
final_df <- left_join(tidy_result, ci_result, by = "Variable") %>%
  select(Variable, coef, `exp(coef)`, se.coef, z, p, `lower 0.95`, `upper 0.95`) %>%
  rename(se(coef) = se.coef)

# 查看最终结果
final_df

方法2:手动提取模型输出(无需额外包)

如果不想安装新包,直接从模型的summary对象里提取数据:

library(dplyr)
library(tibble)

# 提取系数表部分
coef_table <- as.data.frame(summary(res)$coefficients) %>%
  rownames_to_column("Variable") %>%
  rename(p = `Pr(>|z|)`)

# 提取置信区间表部分
ci_table <- as.data.frame(summary(res)$conf.int) %>%
  rownames_to_column("Variable") %>%
  select(Variable, `lower .95`, `upper .95`)

# 合并并整理成目标格式
final_df <- left_join(coef_table, ci_table, by = "Variable") %>%
  select(Variable, coef, `exp(coef)`, se(coef), z, p, `lower .95`, `upper .95`) %>%
  rename(`lower 0.95` = `lower .95`, `upper 0.95` = `upper .95`)

# 查看结果
final_df

两种方法都能得到符合预期的DataFrame,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:51