# 安装包
if (!requireNamespace("survival", quietly = TRUE)) {
install.packages("survival")
}if (!requireNamespace("gtsummary", quietly = TRUE)) {
install.packages("gtsummary")
}if (!requireNamespace("dplyr", quietly = TRUE)) {
install.packages("dplyr")
}if (!requireNamespace("datawizard", quietly = TRUE)) {
install.packages("datawizard")
}if (!requireNamespace("broom.helpers", quietly = TRUE)) {
install.packages("broom.helpers")
}
# 加载包
library(survival)
library(gtsummary)
library(dplyr)
library(datawizard)
library(broom.helpers)
回归分析表格
回归分析表格是用于展示回归模型结果的表格,它提供了模型中变量的统计信息,帮助解释变量之间的关系。
示例
如图是基于survival
包的内置pbc数据集绘制的回归分析表格。图中分别使用了Cox风险比例模型和广义线性回归模型探索血清蛋白、性别、年龄对生存状况的影响。
环境配置
系统要求: 跨平台(Linux/MacOS/Windows)
编程语言:R
依赖包:
survival
,gtsummary
,dplyr
,datawizard
数据准备
使用R包survival内置的pbc数据集,包含了418名原发性胆汁性肝硬化(PBC)患者的信息,这些患者在研究开始时或之前已经接受了熊去氧胆酸(UDCA)治疗。pbc数据集记录了pbc患者的生存时间、生存状态、治疗方式、年龄、性别、白蛋白水平、肝肿大情况等临床信息。
<- pbc %>%
df filter(status != 1) %>%
mutate(status = ifelse(status == 2, 1, 0)) %>%
select(2:13) %>%
na.omit() %>%
# 将`albumin`分为3组
mutate(albumin3cat = categorize(albumin, split = "quantile", n_groups = 3))
head(df[,1:6])
time status trt age sex ascites
1 400 1 1 58.76523 f 1
2 4500 0 1 56.44627 f 0
3 1012 1 1 70.07255 m 0
4 1925 1 1 54.74059 f 0
5 2503 1 2 66.25873 f 0
6 1832 0 2 55.53457 f 0
可视化
1. 基础回归分析表格
# 基本绘图
<- coxph(Surv(time, status) ~ albumin + sex + age,
t1 data = df
%>%
) tbl_regression()
t1
Characteristic | log(HR) | 95% CI | p-value |
---|---|---|---|
albumin | -1.7 | -2.1, -1.2 | <0.001 |
sex | |||
m | — | — | |
f | -0.56 | -1.1, -0.06 | 0.027 |
age | 0.03 | 0.01, 0.05 | 0.004 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
该表是基础回归分析表格,通过coxph()
调用Cox比例风险模型和使用tbl_regression()
将回归分析的结果表格化。
2. tbl_regression()参数设置
# tbl_regression()参数设置
<- coxph(Surv(time, status) ~ albumin + sex + age,
t1 data = df
%>%
) # 参数设置
tbl_regression(
conf.level = 0.90,
exponentiate = TRUE,
include = c("sex", "albumin"),
show_single_row = sex,
label = list(sex ~ "sex as categorical")
)
t1
Characteristic | HR | 90% CI | p-value |
---|---|---|---|
sex as categorical | 0.57 | 0.37, 0.87 | 0.027 |
albumin | 0.19 | 0.13, 0.28 | <0.001 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
表中tbl_regression()
有很多参数设置,可以更改表格的置信区间,行名等信息。
重要参数:tbl_regression
conf.level
: 确定回归分析的置信水平,默认的0.95表示95%置信区间。exponentiate
: 是否对HR值取指数,默认列是log(HR)值。include
: 统计表格中包含哪些自变量因素(行)show_single_row
: 适用于二分类变量,不显示对照组。label
: 更改自变量因素的名称(行名)。
3. 添加global-p
# 添加global-p
$albumin3cat=as.factor(df$albumin3cat)
df
<- coxph(Surv(time, status) ~ albumin3cat + sex + age,
t1 data = df) %>%
tbl_regression() %>%
add_global_p()
t1
Characteristic | log(HR) | 95% CI | p-value |
---|---|---|---|
albumin3cat | <0.001 | ||
1 | — | — | |
2 | -0.72 | -1.2, -0.27 | |
3 | -1.3 | -1.7, -0.77 | |
sex | 0.073 | ||
m | — | — | |
f | -0.48 | -0.98, 0.02 | |
age | 0.03 | 0.01, 0.05 | <0.001 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
该表通过add_global_p()
添加全局P值。
4. 添加q-value
# 添加q-value
<- coxph(Surv(time, status) ~ albumin + sex + age,
t1 data = df
%>%
) tbl_regression() %>%
# 添加q-value列
add_q()
t1
Characteristic | log(HR) | 95% CI | p-value | q-value1 |
---|---|---|---|---|
albumin | -1.7 | -2.1, -1.2 | <0.001 | <0.001 |
sex | ||||
m | — | — | ||
f | -0.56 | -1.1, -0.06 | 0.027 | 0.027 |
age | 0.03 | 0.01, 0.05 | 0.004 | 0.006 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio | ||||
1 False discovery rate correction for multiple testing |
该表通过add_q()
添加q-value列。
5. 合并列
# 合并列
<- coxph(Surv(time, status) ~ albumin3cat + sex + age,
t1 data = df) %>%
tbl_regression() %>%
# 修改表头名称
modify_header(p.value = "**P**",estimate="**log(HR) (CI)**") %>%
# 将评分列和CI列合并并应用于评分不为NA的行
modify_column_merge(
pattern = "{estimate} ({conf.low}, {conf.high})",
rows = !is.na(estimate)
)
t1
Characteristic | log(HR) (CI) | P |
---|---|---|
albumin3cat | ||
1 | — | |
2 | -0.72 (-1.2, -0.27) | 0.002 |
3 | -1.3 (-1.7, -0.77) | <0.001 |
sex | ||
m | — | |
f | -0.48 (-0.98, 0.02) | 0.062 |
age | 0.03 (0.01, 0.05) | <0.001 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
该表将评分列和CI列合并,是一种常见的形式,合并后恰当修改了表头。
重要函数 modify_header
/ modify_column_merge
:
modify_header:modify_header()
可用于修改标题名称。其中label
表示变量列,p.value
表示P值列,ci
表示置信区间列,estimate
表示评分列,conf.low
表示置信区间下区间,conf.high
表示置信区间上区间。
modify_column_merge
:参数pattern
是要合并列的模式,参数rows
是要应用到的行。
6. 模型整合
模型横向整合
# 模型横向整合
<- coxph(Surv(time, status) ~ albumin + sex + age,
t1 data = df
%>%
) tbl_regression()
<- glm(time ~ albumin + sex + age,
t2 data = df
%>%
) tbl_regression()
# t1, t2模型整合
<- tbl_merge(
t3 tbls = list(t1, t2),
tab_spanner = c("**Cox Model**", "**GLM Model**")
)
t3
Characteristic |
Cox Model
|
GLM Model
|
||||
---|---|---|---|---|---|---|
log(HR) | 95% CI | p-value | Beta | 95% CI | p-value | |
albumin | -1.7 | -2.1, -1.2 | <0.001 | 1,128 | 813, 1,442 | <0.001 |
sex | ||||||
m | — | — | — | — | ||
f | -0.56 | -1.1, -0.06 | 0.027 | 34 | -360, 428 | 0.9 |
age | 0.03 | 0.01, 0.05 | 0.004 | -7.7 | -20, 4.9 | 0.2 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
该表使用tbl_merge
横向整合了pdb患者的Cox比例风险模型和广义线性回归模型的结果。
模型纵向整合
# 模型纵向整合
<- coxph(Surv(time, status) ~ albumin + sex + age,
t1 data = df[df$hepato==0,]
%>%
) tbl_regression()
<- coxph(Surv(time, status) ~ albumin + sex + age,
t2 data = df[df$hepato==1,]
%>%
) tbl_regression()
tbl_stack(list(t1, t2), group_header = c("Patients without hepato", "Patients with hepato"))
Characteristic | log(HR) | 95% CI | p-value |
---|---|---|---|
Patients without hepato | |||
albumin | -1.4 | -2.3, -0.47 | 0.003 |
sex | |||
m | — | — | |
f | -1.1 | -1.9, -0.36 | 0.004 |
age | 0.06 | 0.03, 0.09 | <0.001 |
Patients with hepato | |||
albumin | -1.4 | -2.0, -0.87 | <0.001 |
sex | |||
m | — | — | |
f | -0.29 | -0.97, 0.38 | 0.4 |
age | 0.01 | -0.01, 0.04 | 0.3 |
Abbreviations: CI = Confidence Interval, HR = Hazard Ratio |
该表使用tbl_stack
纵向整合了有无hepato的两组pdb患者的Cox比例风险模型的结果。
应用场景

单变量和多变量Cox回归分析表格用于中危NMIBC患者3年肿瘤复发情况。[1]

该回归分析表格显示了多变量Cox回归分析中晚期总死亡率的独立预测因素。[2]
参考文献
[1] CHEN J X, HUANG W T, ZHANG Q Y, et al. The optimal intravesical maintenance chemotherapy scheme for the intermediate-risk group non-muscle-invasive bladder cancer[J]. BMC Cancer, 2023,23(1): 1018.
[2] BENKE K, ÁGG B, SZABÓ L, et al. Bentall procedure: quarter century of clinical experiences of a single surgeon[J]. J Cardiothorac Surg, 2016,11: 19.