分享

想整理临床数据发文?教你3分钟搞定Table1

 昵称69125444 2020-09-14

在进行文章的撰写时,总是少不了表格的绘制,特别是涉及临床样本的研究,我们文章的第一个内容,也就是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<-read.csv('data.csv',header=T)
3head(data)
4str(data)


可以看到,有些变量诸如status,trt,hepato等变量被认作是连续变量了,就像上次我们在随机森林里的处理方式,我们可以自己规定哪些是分类变量,把它转换成因子,今天我们有更简单的办法,在生成三线表的时候直接定义。那么,都说道这里了,我们到底用什么神奇的方法进行三线表的快速统计呢?那就是tableone包,没错这个R包的名字就叫做tableone,意为我们文章中的表1。好的,下一步定义下哪些数据要展现在三线表中,本次我们把trt(治疗)作为分类依据(当然你也可以自己选择一个分类变量进行分组)。

1# 需要进行统计分析的变量
2myVars <- c(
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)
22
23# 分类变量
24catVars <- c('status',
25             'trt',
26             'ascites',
27             'hepato',
28             'spiders',
29             'edema',
30             'stage')
31
32# 构建表格
33tab <- CreateTableOne(
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 <- c('bili''chol''copper''alk.phos''trig')
3
4# 定义用Fisher exact test的数据
5exact <- c('status''stage')
6
7# re-define table one
8tab <- print(
9  tab,
10  showAllLevels = TRUE,
11  nonnormal = nonnormal,
12  exact = exact,
13  cramVars = catVars,
14  smd = TRUE
15)

最终生成的结果,我们用write.csv()函数保存到csv,然后Excel打开看一下,如下所示,是不是很神奇呢?我们想要的表格一下子就这么成现在我们面前。

当然了,上面的表格还有一点点不好看,稍微调节一下边框底纹就可以构建出完美的三线表啦。

是不是非常nice呢?有小伙伴可能还有需求,比如我想做看看不同治疗手段下,不同status 血浆albumin有没有什么区别呢?就像这样:

使用上面的方法,不仅能够给我们省去大量的时间,关键还更加准确一些,所以,赶紧动手操练起来吧。看你能否重现这些表格。

本期干货

三线表统计代码 -


资源获取方法新规


(七天内推送的资源,均可直接获取)

一、请于2020年9月19日23:59分前关注科研猫公众号,在后台回复关键词“200913”获取本篇推文干货百度云链接,获取后请尽快转存或下载以免链接过期。

二、9月19日后该资源获取方式:

添加科研猫客服微信领取。

不用 R 语言同样能做出这么好看的图!科研绘图神器—hiplot是2020年7月19日openbiox联合科研猫郑重推出的全网首个开源绘图平台,目前可提供60余种基础可视化功能,并在不断的更新中

https://

点击图片进入Hiplot平台介绍

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多