手把手教你绘制临床基线特征表
临床研究中常需要绘制两组或多组患者(如非AKI组和AKI组)的基线特征表。
下图就是临床中常见的基线特征表。
那么在R中怎么快速绘制绘制临床论文中的基线特征表1?
今天介绍一个新的绘制基线表的包——compareGroups
。
目 录
- 1. 安装和加载R包
- 2. 加载数据集
- 3. 描述总研究人群(overall列)
- 4. 选择研究人群
- 4.1 选择分组变量
- 4.2 选择部分变量
- 4.3 选择亚组人群
- 5. 连续变量的统计检验
- 6. 绘制分层基线特征表
- 7. 导出基线特征表
- 7.1 导出csv文件
- 7.2 导出Excel文件
- 7.3 导出Word文件
- 7.4 导出PDF文件
1. 安装和加载R包
compareGroups
包可以通过分组变量来创建单变量分析结果的基线特征表,在创建出表格后可以导出各种格式用于报告。
在使用之前先安装和加载R包。
install.packages("compareGroups") # 安装包
library(compareGroups) # 加载包
2. 加载数据集
PREDIMED研究是一项随机、多中心队列研究,共7000余名研究对象,选取其中部分数据进行演示说明。
研究人群在纳入研究前时没有心血管疾病,但是有心血管风险。
将研究人群随机分为3组,每组采用不同的饮食(对照组+低脂饮食、橄榄油+地中海饮食、坚果+地中海饮食),然后随访观察主要不良心血管事件的发生率。
data(predimed) # 加载数据集
View(predimed) # 预览数据集
数据集中变量介绍:
group # 分组变量,不同的饮食方式(Control; MedDiet + Nuts; MedDiet + VOO)
sex # 性别,男性和女性
age # 年龄
smoke # 吸烟,三个水平Never、Current、Former
bmi # 体重指数
waist # 腰围
wth # 腰高比
htn # 因子,是否为高血压,No和Yes
diab # 因子,是否为糖尿病,No和Yes
hyperchol # 因子,是否为高血脂,No和Yes
famhist # 因子,是否有冠心病家族史,No和Yes
hormo # 因子,是否使用激素替代疗法,No和Yes
p14 # MeDiet坚持得分
toevent # 主要结局的随访时间(年)。
event # 因子,是否发生感兴趣结局,No和Yes
看下数据集各变量信息。
str(predimed) # 查看数据集结构
从上面我们可以看到,数据集中的分类变量都显示为因子,并且都添加了标签。
在使用compareGroups
包前需要注意下:
- 需要知道数据集中哪些变量是分类变量,将其编码为因子,并注意是不是有序分类变量;
- 给分类变量添加标签属性,默认情况下输出的基线特征表会包含变量标签。
今天用来绘制基线特征表的主要是compareGroups
包的descrTable()
函数。
3. 描述总研究人群(overall列)
先不分组,描述下总样本人群。
descrTable( ~ ., data = predimed)
- ~ 的左边为分组变量或不填变量,不填变量则计算总研究人群的基线特征,并且不进行统计检验;
- ~ 的右边为基线特征表中需要统计分析的变量,如果没填变量仅出现一个
.
,则默认数据集的全部变量进行统计。
从上面可以看出,基线表结果显示的很清楚,虽然大部分变量都没有缺失值,但是hormo变量存在缺失值。
4. 选择研究人群
4.1 选择分组变量
在上面我们简单的统计描述了下总样本人群的基线特征,下面可以添加分组变量分析看看。
group
为分类变量,也是基线表的y变量,表示不同的饮食方式。
descrTable(group ~ ., data = predimed)
4.2 选择部分变量
上面我们简单统计描述了下总研究人群以及添加分组变量后研究人群的基线特征,但是我们纳入的是数据集中的所有变量,有时我们不需要这么多的变量进行统计分析。
下面我们只纳入数据集中的部分变量进行统计分析。
比如我只纳入五个变量进行分析。
descrTable(group ~ age + sex + smoke + waist + hormo, # 左边为分组变量,右边为基线表行变量
data = predimed) # 数据集
如果基线表纳入的变量较多,也可以选择移除数据集中变量的形式来绘制基线特征表。
可以通过-
号的形式移除下面这四个变量。
descrTable(group ~ . - toevent - event - diab - p14,
data = predimed)
4.3 选择亚组人群
除了选择部分变量进行统计分析外,我们还可以选择亚组人群进行分析,比如说只选取女性进行分析。
descrTable(group ~ age + smoke + waist + hormo + toevent + event + diab + p14,
data = predimed,
subset = sex == "Female")
除了选择亚组人群外,还可以在亚组人群基础上选取特定变量进行研究。
descrTable(group ~ age + sex + smoke + waist + hormo,
data = predimed,
selec = list(hormo = sex == "Female", waist = waist > 20))
基线特征表中的变量可以在公式中出现两次,比如说bmi:
descrTable(group ~ age + sex + bmi + bmi + waist + hormo,
data = predimed,
selec = list(bmi.1 = !is.na(hormo)))
输出的基线表中会报告两次bmi的统计结果,第一个bmi表示所有患者的bmi结果,第二个bmi是报告hormo变量中排除缺失值时研究患者的bmi结果。
5. 连续变量的统计检验
默认情况下,连续变量认为是正态分布变量,在生成基线特征表时,将使用均值+标准差
描述连续变量。
如果要指定某一连续变量为非正态分布变量,比如说指定waist
为非正态分布变量,则:
descrTable(group ~ age + smoke + waist + hormo,
data = predimed,
method = c(waist = 2))
上面的结果中waist
变量被描述为中位数+四分位数。
method中的数字:1表示正态分布;2表示连续非正态;3表示分类变量;NA表示执行Shapiro-Wilks检验来确定是正态还是非正态分布。
如果参数method使用的是NA,还可以使用alpha参数来指定统计学意义的阈值。
6. 绘制分层基线特征表
有时我们需要绘制分层后的基线特征表,绘制分层基线特征表的函数为strataTable()
函数。
绘制很简单,先使用descrTable()函数绘制一个基线表,在使用strataTable()函数绘制分层基线表。
restab <- descrTable(group ~ age + smoke + bmi + waist + hormo,
data = predimed)
strataTable(restab, "sex")
如上图所示,我们就绘制好了分层基线特征表了。
7. 导出基线特征表
在绘制好基线特征表后,就是输出表格了。
R包支持输出的格式有很多(如CSV/HTML/LaTeX/PDF/Markdown/Word/Excel
),我们一般常用csv/xls/word/PDF格式,所以就演示输出这几种格式文件。
## 先绘制一个基线特征表
restab <- descrTable(group ~ age + smoke + bmi + waist + hormo,
data = predimed)
restab
7.1 导出csv文件
export2csv(restab, file='table1.csv')
7.2 导出Excel文件
export2xls(restab, file='table1.xlsx')
7.3 导出Word文件
export2word(restab, file='table1.docx')
7.4 导出PDF文件
export2pdf(restab, file='table1.pdf')
上面的四种导入方式各有各的优点,自己看情况输出自己需要的格式。
这个包我会好好研究下,后面还会有推文介绍怎么计算OR值/HR值、基线表输出结果调整等。
参考资料
1. compareGroups包帮助文件
- Sass 基础(三)
- 2018年——霍金怎么样谈未来人工智能,地球还有多少时间
- Linux探秘之用户态与内核态
- 微信小游戏重磅上线,H5游戏和页游迎来新天地?
- 名为“闪电比特币”Lightning Bitcoin,LBTC的新型比特币硬叉被释放
- IDHub亮相区块链行业巅峰盛宴 分享网络生活的“进化论”
- 总结:如何加速你的 WordPress 站点?
- 百年老牌的创新之路:看可口可乐如何用AI、大数据颠覆传统营销
- 微信小游戏上线,小程序或将成为未来的营销工具
- WooCommerce 自定义商品价格显示HTML结构
- 借助Github 为第三方WordPress 主题/插件添加“自动更新”功能
- vue-cli#2.0 webpack 配置分析
- 短代码插件S-shortcodes 更新2.4版本:修复font icon的冲突问题
- 景驰落户广州 王劲称不知百度为何指控 四条回应两大疑点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux安装配置PHPmyadmin
- Angular Service依赖注入的一个具体例子
- php学习day1
- 在Angular里使用rxjs的异步API - Observable
- 自动化监控Oracle表空间并发送报警
- Angular里的消息(Message)显示
- Angular应用内路由(In App Route)的最佳实践
- Angular应用的路由指令RouterLink
- ctfhub-信息泄泄露_备份文件下载
- Angular In-memory Web API使用介绍
- 攻防世界-php_rce
- 无法添加某个relationship给SAP CRM Product category的一个可能原因
- 记一次DataGuard SWITCHOVER_STATUS 状态为RESOLVABLE GAP的处理
- ABAP数据库表的元数据
- ctfshow-萌新赛