作者:科研猫 | 西红柿
责编:科研猫 | 依米
在进行文章的撰写时,总是少不了表格的绘制,特别是涉及临床样本的研究,我们文章的第一个内容,也就是Table1,往往就是样本信息的汇总,也就是“三线表”。三线表非常的常见,你在几乎所有的医学期刊中都能见到它的身影。三线表经常被用来展示临床的基线数据,它清晰严谨客观的展现了数据的统计概要,是文章中不可或缺的部分。
背景知识形如上面的表格,就是一个标准的三线表。看似简单,实则内涵丰富,我们先来看看这个表格中都有哪些要素:
(1)每一行都是一个变量,可能是连续性变量,也可能是分类变量,每一行都有这些变量的统计信息;对于连续性变量和分类变量,我们用的统计数值是不同的,比如是用Mean±SD或者用%百分比表示,亦或者用极差表示,这些都是跟数据的类型和数据分布有关的。
(2)每一列代表一个分组,要统计每个观察值在各个分组中的信息;常见的是两组,比如对照组和实验组,也可能是三组或者更多,乃至在分组之后还进一步分亚组。
(3)统计分析,使用何时的统计方法,比如t检验、方差分析或者非参数检验等比较不同分组之间的差异,得到诸如p value、t statistics等数值。这里就稍微复杂一点了,到底什么时候用方差分析,什么时候用卡方,什么时候用非参统计比较,这个对于我们的统计理论还是有要求的。
因此呢,虽然这个表格看似简单,其实包含了非常多的信息,否则也不可能在文章中占到No.1的位置。那么,准确无误的三线表究竟该如何制作呢?
实例操作三线表的制作有很多方法,最老套方法就是用Excel或者SPSS进行统计分析,一行一行输入数据,然后计算中位数,标准差,然后再做统计比较,计算好数据,逐个导入Excel,之后编辑好边框和底纹。这一套流程走下来,我估摸着至少一天时间得进去了,还不说你算得对不对,选的统计方法准不准。
对于我们之中惜时如金(懒到极致)的各位来说,一个个输入数据可真是要哭了(更多的是怕输错)。那么,在这个高速发展的时代,有没有一个方法是可以3分钟就做好一个完美的三线表呢?当然有的!这个困难我来帮你解决!话不多说,我们直接开始!
下面先来看看我们准备的测试数据,本次示例数据来源于梅奥诊所原发性胆汁性肝硬化临床数据。以下是数据表的所有信息汇总:
age: | in years |
albumin: | serum albumin (g/dl) |
alk.phos: | alkaline phosphotase (U/liter) |
ascites: | presence of ascites |
ast: | aspartate aminotransferase, once called SGOT (U/ml) |
bili: | serum bilirunbin (mg/dl) |
chol: | serum cholesterol (mg/dl) |
copper: | urine copper (ug/day) |
edema: | 0 no edema, 0.5 untreated or successfully treated |
1 edema despite diuretic therapy | |
hepato: | presence of hepatomegaly or enlarged liver |
id: | case number |
platelet: | platelet count |
protime: | standardised blood clotting time |
sex: | m/f |
spiders: | blood vessel malformations in the skin |
stage: | histologic stage of disease (needs biopsy) |
status: | status at endpoint, 0/1/2 for censored, transplant, dead |
time: | number of days between registration and the earlier of death, |
transplantion, or study analysis in July, 1986 | |
trt: | 1/2/NA for D-penicillmain, placebo, not randomised |
trig: | triglycerides (mg/dl) |
首先读入数据,然后用str()函数看一下数据类型是不是如我们所愿。
1library(tableone)2data"data.csv",header=T)3head(data)4str(data)
可以看到,有些变量诸如status,trt,hepato等变量被认作是连续变量了,就像上次我们在随机森林里的处理方式,我们可以自己规定哪些是分类变量,把它转换成因子,今天我们有更简单的办法,在生成三线表的时候直接定义。那么,都说道这里了,我们到底用什么神奇的方法进行三线表的快速统计呢?那就是tableone包,没错这个R包的名字就叫做tableone,意为我们文章中的表1。好的,下一步定义下哪些数据要展现在三线表中,本次我们把trt(治疗)作为分类依据(当然你也可以自己选择一个分类变量进行分组)。
1# 需要进行统计分析的变量 2myVars 3 "time", 4 "status", 5 "age", 6 "sex", 7 "ascites", 8 "hepato", 9 "spiders",10 "edema",11 "bili",12 "chol",13 "albumin",14 "copper",15 "alk.phos",16 "ast",17 "trig",18 "platelet",19 "protime",20 "stage"21)2223# 分类变量24catVars "status",25 "trt",26 "ascites",27 "hepato",28 "spiders",29 "edema",30 "stage")3132# 构建表格33tab 34 vars = myVars,35 data = data,36 factorVars = catVars,37 strata = "trt"38)39print(tab)
在这里的代码中,由于我们输入的数据含有比较多的数据列,所以选择的列也多了一些。首先我们定义了需要进行统计分析的列,其次是定义了这些变量中到底哪些是分类变量,然后通过CreateTableOne()函数构建表格。当然,如果是在你自己的数据中,肯定是选择自己需要的数据列。那么,这里的结果是什么样的呢?有没有统计出我们想要的表格呢?
在R语言输出的结果中,我们可以发现计量数据都是用“(mean (SD))”描述,分类变量用“ (%) ”表示,而且还算出了P值。可以说,这个基本上就是我们想要的表格了,只是还需要导入到Excel中进行格式的美化。
函数默认情况下使用正态分布方法分析资料,因此会出现“(mean (SD))”的描述,但是像本例中的临床生化指标bili,chol,属于偏态分布,用“(mean (SD))”描述显然是错误的,所以需要进一步定义变量。同时,非正态指标也不能用t检验进行比较,需要用非参检验方法,例如对生存状态(”status”)、临床分期("stage")需用Fisher exact检验。因此,我们在这里需要把非正态分布的数据和需要进行Fisher exact检验的分类变量挑选出来。同时用cramVars参数可以显示两个水平的分类变量构成比,smd参数为显示standardized mean differences。
1# 定义非正态分布数据 2nonnormal "bili", "chol", "copper", "alk.phos", "trig") 3 4# 定义用Fisher exact test的数据 5exact "status", "stage") 6 7# re-define table one 8tab 9 tab,10 showAllLevels = TRUE,11 nonnormal = nonnormal,12 exact = exact,13 cramVars = catVars,14 smd = TRUE15)
最终生成的结果,我们用write.csv()函数保存到csv,然后Excel打开看一下,如下所示,是不是很神奇呢?我们想要的表格一下子就这么成现在我们面前。
当然了,上面的表格还有一点点不好看,稍微调节一下边框底纹就可以构建出完美的三线表啦。
是不是非常nice呢?有小伙伴可能还有需求,比如我想做看看不同治疗手段下,不同status 血浆albumin有没有什么区别呢?就像这样:
使用上面的方法,不仅能够给我们省去大量的时间,关键还更加准确一些,所以,赶紧动手操练起来吧。看你能否重现这些表格。
本期干货
- 三线表统计代码 -
资源获取方法新规
(七天内推送的资源,均可直接获取)
一、请于2020年9月19日23:59分前关注科研猫公众号,在后台回复关键词“200913”获取本篇推文干货百度云链接,获取后请尽快转存或下载以免链接过期。
二、9月19日后该资源获取方式:
添加科研猫客服微信领取。
不用 R 语言同样能做出这么好看的图!科研绘图神器—hiplot,是2020年7月19日openbiox联合科研猫郑重推出的全网首个开源绘图平台,目前可提供60余种基础可视化功能,并在不断的更新中。
https://hiplot.com.cn
点击图片进入Hiplot平台介绍
往期干货链接
精通R语言(含代码及测试数据)
Day1 R语言简介及安装 | Day2 RStudio安装及使用 |
Day3 常用数据类型 | Day4 数据导入及读取 |
Day5 数据管理及操作 | Day6 数据处理进阶及控制结构 |
Day7 图形绘制入门 | Day8 常用图形绘制 |
Day9 高级图形绘制 | Day10 常用统计分析 |
Day11 方差分析 | Day12 回归分析 |
Day13 广义线性模型 | Day14 PCA & tSNE |
Day15 聚类分析 | Day16 机器学习 |
Day17 ggplot绘图 | Day18 Shiny网页可视化 |
科研绘图(含代码分享)
热图 | 滑珠图 | 蜜蜂群图 |
圈图 | 韦恩图 | 小提琴图 |
饼图 | 火山图 | 中国地图 |
山峦图 | 气泡图 | 世界地图 |
箱线图 | 柱状图 | 等高线图 |
三维饼图 | 半小提琴图 | PCA分析图 |
相关性热图 | 三维地形图 | 三维散点图 |
更多科研新鲜资讯、文献精读和生物信息技能
请关注科研猫公众号
科研猫原创出品,如需转载,需获授权
若您是读者,欢迎分享,无需授权
上海辰明律师事务所提供版权法律支持