巧合?
今(昨)天上午时候交流群里一个小伙伴关于管道符疑问中出现了tbl_summary
函数,下午另一个小伙伴有table1
相关疑问。
晚上想起上午时候提示我没有tbl_summary
函数,查到是gtsummary包的,习惯性看了下包的功能,这不是也可以绘制三线表?
惊了,于是有了这篇分享。
1下载R包,数据
使用内置数据集演示
#install.packages("gtsummary") library(gtsummary) #查看内置数据集 head(trial)
2绘制table1
2.1 简单表格
#先选择部分变量进行展示 trial2 <- trial %>% select(age, grade, death, trt) # 绘制 table1 <- tbl_summary(trial2) table1
可以看到连续型变量使用的是中位数(四分位数),分类变量使用的 个数(比例)。
但是不是缺点什么?
文献中的表1,是不是会有分组?是不是会有总体描述?是不是会有P值?是不是会有mean(sd) ?那就加!
2.2 小修小改
1)添加一下参数,完成上述需求
table2 <- tbl_summary( trial2, by = trt, # 分组 statistic = list(all_continuous() ~ "{mean} ({sd})"), missing = "no" # ) %>% add_n() %>% # 添加非NA观测值个数 add_p() %>% # 添加P值 add_overall() %>% modify_header(label = "**Variable**") %>% # 标签列header bold_labels() #label 粗体
呐,都有了 。。。
2)又发现连续型数据的检验方式可不可以用t检验?必须可以!
table3 <- tbl_summary( trial2, by = trt, # 分组 statistic = list(all_continuous() ~ "{mean} ({sd})") ) %>% add_p(test = list(all_continuous() ~ "t.test")) # 添加P值
就可以根据需求,结合着使用就可以绘制文献中的 “Table1”了 !
那为什么题目不叫绘制表一,因为表2 ,表3也能绘制啊!
3模型结果数据
3.1 逻辑回归模型
#构建逻辑回归 mod1 <- glm(response ~ trt + age + grade, trial, family = binomial) t1 <- tbl_regression(mod1, exponentiate = TRUE) t1
直接把结果提取出来了 且 绘制成了表格,不香吗?
3.2 COX生存分析
生信中出镜率极高的COX生存模型呢,结果可以直接用吗?
自信点,去掉吗
library(survival) t2 <- coxph(Surv(ttdeath, death) ~ trt + grade + age, trial) %>% tbl_regression(exponentiate = TRUE) t2
HR , 95%CI ,P value 都有了,,,
3.3 结果合并
甚至你还可以用tbl_merge函数将多个结果合并在一起,,这有点6了啊
# merge tables tbl_merge_ex1 <- tbl_merge( tbls = list(t1, t2), tab_spanner = c("**Tumor Response**", "**Time to Death**") #防止混淆,定义名字 )
好了,多谢“巧合”,发现了一个简单实用的绘制多种统计表的方式。