t分布表精确完整图_如何快速绘制临床论文基线特征表
临床研究中常需要绘制两组或多组患者(如非AKI组和AKI组)的基线特征表。
下图就是临床中常见的基线特征表,从下图我们可以看出,第1列为两组患者需要比较的变量;第2列为所有患者的基线特征,这一列在论文中可有可不有;第3列和第4列分别为非AKI组和AKI组的基线特征;第5列比较两组基线特征有没有统计学差异。
在上图中,分类变量表示为计数(百分比),连续变量若呈正态分布表示为均值±标准差,呈非正态分布表示为中位数和四分位数。
那么在R中怎么快速绘制绘制临床论文中的基线特征表1
?
可以使用tableone
包来绘制。
目 录
1. 绘制基线表前的准备
2. 单组汇总数据
3. 分类变量处理
4. 优化单组汇总
5. 显示基线表所有数据信息
6. 指定非正态分布变量
7. 多组汇总数据
8. 统计检验
9. 添加overall列
10. 输出基线特征表
11. 后续
12. CreateTableOne()函数
End
1. 绘制基线表前的准备
安装需要用到的R包install.packages("tableone") # 安装tableone包,绘制基线表需要install.packages("survival") # 安装需要内置数据集的包
加载数据集和包library(tableone) # 加载包library(survival) # 加载包,需要使用survival包的colon数据data(colon) # 加载数据集View(colon) # 预览数据集
本次用来演示的数据集为survival包的colon数据,数据集介绍查看《常用内置数据集介绍》这篇文章。
2. 单组汇总数据
CreateTableOne(data = colon) # 汇总整个数据集特征
从上面可以看出,colon数据集中共有1858
例患者,但由于没有将分类变量转化为因子,所以分类变量显示的也是均值+标准差。
3. 分类变量处理
在数据处理中,大多数分类变量是采用数字编码,二分类变量常表示为0
和1
,多分类变量表示为0
、1
和2
等。
有两种方法可以将分类变量转化为因子:一是先在数据集中将分类变量转化为因子,然后再使用tableone包进行汇总,二是在tableone包中直接指定哪些变量属于因子(使用factorVars
参数进行转换),然后在进行汇总。
dput(names(colon)) # 输出colon数据集变量名称输出变量名称:c("id", "study", "rx", "sex", "age", "obstruct", "perfor", "adhere", "nodes", "status", "differ", "extent", "surg", "node4", "time", "etype")
从数据集介绍中,我们知道 "rx"
、"sex"
、"obstruct"
、"perfor"
、"adhere"
、"status"
、"differ"
、"extent"
、"surg"
、"node4"
、"etype"
都是分类变量。
指定基线表中需要比较的变量
排除一些不需要比较的变量,如id、study之类的变量myVars "rx", "sex", "age", "obstruct", "perfor", "adhere", "nodes", "status", "differ", "extent", "surg", "node4", "time", "etype")
指定基线表中哪些变量是分类变量
catVars "rx", "sex","obstruct", "perfor", "adhere", "status", "differ","extent", "surg", "node4","etype")
4. 优化单组汇总
tab2 data = colon, factorVars = catVars);tab2# 通过vars参数指定哪些变量是基线表中需要汇总的变量# 通过factorVars参数指定哪些变量是分类变量# data参数指定变量的数据来源
从上图可以看出,在指定基线表的汇总变量、分类变量,排除掉无关变量后,基线表的结果显示比前面好很多。
二分类变量显示为第2水平的计数(百分比),比如分类变量为0
和1
,则显示1
的结果;如果为多分类变量,则显示出所有水平数据。
如果在表中要显示所有水平的数据,则输入:
print(tab2, showAllLevels = TRUE)
注意:分类变量的百分比数据是在排除缺失值后计算的。
5. 显示基线表所有数据信息
如果需要显示所有数据信息,包括分类变量和连续变量的缺失值信息,对结果对象使用summary()
函数,先输出连续变量数据信息,在输出分类变量数据信息。
summary(tab2)
6. 指定非正态分布变量
从前面的表中可以看到,连续变量都表示为均数+标准差,这是认为连续变量都呈正态分布。但是实际上有些数据呈非正态分布,需要用中位数(四分位数)表示。
怎么判断连续变量是不是呈正态分布,可以参考《R语言统计绘图:t 检验怎么做?》这篇文章。
假设数据集中"time"和"nodes"两个连续变量呈非正态分布。
nonvar "time","nodes") # 指定哪些变量是非正态分布变量print(tab2, nonnormal = nonvar) # 输出基线表数据信息
可以看出"time"和"nodes"这两个连续变量都用中位数(四分位数)表示了。
如果在print()函数中输入的是nonnormal = TRUE
,则所有连续变量都按非正态分布进行分析。
微调基线表数据输出格式查看《R语言统计与绘图:微调基线特征表1输出格式》这篇文章。
7. 多组汇总数据
在前面,我们对数据集信息进行了单组汇总。但是通常,我们需要比较两组患者之间的基线特征,如比较AKI组和非AKI组。
在本数据集中,我们需要对"status"
生存状态(1
为死亡,0
为删失)进行分组汇总。
tab3 strata = "status", data = colon, factorVars = catVars); tab3# strata参数表示分层,指定需要分层的变量,这里我们指定status变量# 通过vars参数指定哪些变量是基线表中需要汇总的变量。# 通过factorVars参数指定哪些变量是分类变量# data参数指定变量的数据来源
从图上我们可以看出,我们已经分组总结好了,并且在表右边已经自动进行了统计检验,输出了检验p值。
但是呈非正态分布的连续变量并没有输出中位数和四分位数,检验方法也需要调整。
别急,后面进行调整。
8. 统计检验
如上表所示,当进行两组或多组分层汇总时,两组或多组间比较的p
值会自动随着基线表一起输出,如果p值很小,则显示为<0.001
。
CreateTableOne()函数默认的检验方法为:分类变量使用卡方检验(chisq.test()
,进行连续性校正);连续变量使用方差分析(oneway.test()
,假设等方差),两组间方差分析相当于t检验。
但是在基线表中,有些连续变量是非正态分布变量,有些分类变量中单元格期望值较小,这些变量的统计方法不能使用默认的统计方法。
kruskal.test()
函数可以用于呈非正态分布的连续变量,fisher.test()
可以指定分类变量进行fisher精确检验。在两组间比较时,kruskal.test()
和wilcox.test()
等效。
基线表的test列会显示哪些变量是使用非默认检验方法来计算p值。
假设"extent"
变量需要使用fisher精确检验。
print(tab3, # 前面的tab3对象 nonnormal = nonvar, # 指定哪些连续变量是非正态分布变量 exact = "extent") # 指定哪些变量需要使用fisher精确检验
9. 添加overall列
如最前面的举例所示,基线表中可以添加overall列,表示所有患者的特征。
在CreateTableOne()函数中使用addOverall = TRUE
就可以添加overall列了。
tab4 strata = "status", data = colon, factorVars = catVars, addOverall = TRUE) # 增加overall列print(tab4, nonnormal = nonvar, exact = "extent")# strata表示分层,指定需要分层的变量,这里我们指定status变量# 通过vars参数指定哪些变量是基线表中需要汇总的变量。# 通过factorVars参数指定哪些变量是分类变量# data参数指定变量的数据来源
可以看到overall
列添加成功了。
10. 输出基线特征表
到了这一步,R中基线特征表就基本绘制完成了。接下来就要将表格导出到Excel中进行调整,然后导入到Word中绘制三线表。
简单粗暴的方法:就是复制粘贴,使用quote = TRUE
显示引号,使用noSpaces = TRUE
删除用于在R控制台中对齐文本的空格,然后直接复制基线表整个内容并将其粘贴到Excel
电子表格即可。
print(tab4, # 前面的tab4对象 nonnormal = nonvar, # 指定非正态分布变量 exact = "extent", # 指定哪些变量需要使用fisher精确检验 quote = TRUE, # 显示引号 noSpaces = TRUE) # 删除用于在R控制台中对齐文本的空格
另一种方式:如果您不喜欢复制和粘贴,则可以通过以下方式自动导出。
tab4Mat "extent", quote = FALSE, # 不显示引号 noSpaces = TRUE, # 删除用于在R控制台中对齐文本的空格 printToggle = FALSE)
## 保存为 CSV 格式文件,并命名为 myTable。write.csv(tab4Mat, file = "myTable.csv")
注意:quote
参数选FALSE,noSpaces
参数可选TRUE。
基本和前面的举例差不多了,在自己微调下数据就行。
11. 后续
仅输出分类变量
tab3$CatTable
仅输出连续变量
print(tab3$ContTable, nonnormal = nonvar)
12. CreateTableOne()函数
CreateTableOne()是创建基线特征表的函数,可以汇总所有基线变量信息(包括连续变量和分类变量),并可按一个变量或多个变量进行分层汇总,并进行统计检验。
CreateTableOne(vars, strata, data, factorVars, includeNA = FALSE, test = TRUE, testApprox = chisq.test, argsApprox = list(correct = TRUE), testExact = fisher.test, argsExact = list(workspace = 2 * 10^5), testNormal = oneway.test, argsNormal = list(var.equal = TRUE), testNonNormal = kruskal.test, argsNonNormal = list(NULL), smd = TRUE, addOverall = FALSE)
函数参数解释说明vars # 字符向量;指定哪些变量是基线特征表需要汇总的变量# 数据集中的因子视为分类变量,数字型变量视为连续变量# vars参数为空,则指定数据集中所有变量进行汇总
strata # 字符向量;指定分组汇总的变量,为空则进行单组汇总(也就是Overall列)data # 变量来源的数据集名称,所有汇总变量都要在数据集里面factorVars # 字符向量;指定哪些变量为分类变量,指定的变量应是vars参数中的变量includeNA = FALSE # 逻辑词;为TRUE则将缺失值作为因子处理,仅对分类变量有效
test = TRUE # 逻辑词;默认为TRUE,当有2个或多个组时,自动进行组间比较testApprox = chisq.test # 默认卡方检验;当分类变量的单元格期望值较低(如<5)时,不建议使用argsApprox = list(correct = TRUE) # 进行chisq.test的连续校正。
testExact = fisher.test # 进行精确检验的函数,默认为fisher.test。argsExact = list(workspace = 2*10^5) # 指定fisher.test分配的内存空间
testNormal = oneway.test # 连续变量为正态分布进行的检验# 默认为oneway.test,两组时相当于t检验argsNormal = list(var.equal = TRUE) # 假设为等方差分析
testNonNormal = kruskal.test # 连续变量为非正态分布变量进行的检验,非参数检验# 默认为Kruskal-Wallis秩和检验# 当只有两个组时,与wilcox.test(Man-Whitney U检验)等效argsNonNormal = list(NULL) #传递给testNonNormal中指定的函数的参数的命名列表# 默认list(NULL),它只是一个占位符
smd = TRUE # 默认为TRUE;当有两个以上的组时,则将自动计算组间比较的标准化均值差addOverall = FALSE # 仅在分组汇总中使用,将overall列添加到基线表中# smd和p值仅在分组汇总中使用。
参考资料:tableone包帮助文件
课程推荐
多点好看,少点脱发
t分布表精确完整图_如何快速绘制临床论文基线特征表相关推荐
- R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集 目录 R语言使
- activiti表单设计器_基于Vue,ElementUI开发的一款表单设计器
介绍 基于Vue,ElementUI开发的一款表单设计器,提高表单开发效率的利器,让开发者从枯燥的表单代码编写中解放出来 工具地址: http://tools.xiaoyaoji.cn/form Gi ...
- r语言绘制雷达图_用r绘制雷达蜘蛛图
r语言绘制雷达图 I've tried several different types of NBA analytical articles within my readership who are ...
- 提交日期表单状态操作_奇怪的知识又增加了,表单还能查寝?
Hi,胖友们,大家好!好久不见呀,最近表姐在刷微博时,无意间发现一位小伙伴神奇的表单用法. 别人都用表单收集数据,登记信息,而这位小伙伴则是用表单来"查寝",看了他的讲解,表姐不禁 ...
- python 山脊图_纯Python绘制艺术感满满的山脊地图,创意满分
而今天的文章,我们就来一起基于 Python ,配合颜色与字体的选择搭配,使用简短的代码,就可以创作出艺术海报级别的 山脊地图 . 2 基于ridge_map的山脊地图绘制 我们主要使用 matplo ...
- python 山脊图_纯Python绘制满满艺术感的山脊地图
❝ 本文示例代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes❞ 1 简介 下面的这幅图可能很多读者朋友们都看到 ...
- hdc mfc 画扇形图_使用echarts绘制条形图和扇形图
使用echarts绘制条形图和扇形图 简单举例说明下echarts如何绘制条形图和扇形图 代码示例 echarts绘制条形图和扇形图 var mychart1=echarts.init(documen ...
- svn注册表编辑器怎么打开_如何在Windows 10上打开注册表编辑器
svn注册表编辑器怎么打开 Windows and a lot of third-party applications store their settings in the registry. Th ...
- python 四象限图_使用matplotlib绘制四象限图
今天简单研究了一下在python中绘制四象限图的问题,结合前人相关研究成果,绘制出的图效果如下: 绘制这种图的要点是:自己构造新的x轴和y轴,不要用散点图默认的横纵坐标系,并且不要显示原来的横纵坐标系 ...
最新文章
- private关键字和构造方法
- visual studio 2008 快捷键
- python使用scrapy_python使用scrapy发送post请求的坑
- 一步一步部署微软工作流解决方案(MWMS)到生产环境
- 这份免费AI论文太强了,我肝了!
- js图片转二进制流_V8是如何执行一段JS代码的?
- 响应程度怎么填写_如何增加直邮营销的响应率?
- mysql快捷键设置_MySQL快捷命令
- 递归下降分析法的基本思想。_语法分析 | 递归下降分析算法
- python装饰器模式带参数_Python装饰器使用实例:验证参数合法性 请教Python 使用装饰器实现单例模式的原理...
- pb利用pdf虚拟打印机将datawindow中的内容导出为pdf
- zigbee协议栈 任务、事件与轮询机制
- 大地高、正高和正常高的区别
- win服务器系统无法切换输入法,win8系统中文输入法切换不出来
- C# 对目录中的文件名按照数字序号进行排序
- 医学图像配准中的深度学习综述论文解读
- 阿里云天池大数据:【入门】精灵宝可梦数据集分析
- LeetCode·718.最长重复子数组·动态规划
- 月份,星期几的英文表示
- 苹果数据泄漏:内鬼频出,这是库克的错吗?
热门文章
- 无法将输入值传递给JavaScript变量
- freecodecamp_freeCodeCamp论坛的未来
- 决策报表服务器安装_无服务器流处理如何使决策更加容易
- 139_Power BI之某制造企业HR相关数据年度复盘
- 校园计算机知识竞赛活动简介,徽县一中计算机爱好者社团成功举办计算机知识竞赛活动...
- js获取数组最大值的索引_数组中最大值的返回索引
- 基于分位数回归的动态CoVaR计算 案例与代码
- 赶紧收藏!非常实用的 30 个 Python 技巧
- IIS5、IIS6、IIS7的ASP.net 请求处理过程比较
- 参考的datalist分页helper