给一堆数据后怎么用r处理成正态分布_想整理临床数据发文?教你3分钟搞定Table1...

作者:科研猫 | 西红柿

责编:科研猫 | 依米

在进行文章的撰写时,总是少不了表格的绘制,特别是涉及临床样本的研究,我们文章的第一个内容,也就是Table1,往往就是样本信息的汇总,也就是“三线表”。三线表非常的常见,你在几乎所有的医学期刊中都能见到它的身影。三线表经常被用来展示临床的基线数据,它清晰严谨客观的展现了数据的统计概要,是文章中不可或缺的部分。

f69dca38aa8f5aff308b167c14f7e428.png

d437e77b1c1eaf06284aebbe4428ab44.png 背景知识

形如上面的表格,就是一个标准的三线表。看似简单,实则内涵丰富,我们先来看看这个表格中都有哪些要素:

(1)每一行都是一个变量,可能是连续性变量,也可能是分类变量,每一行都有这些变量的统计信息;对于连续性变量和分类变量,我们用的统计数值是不同的,比如是用Mean±SD或者用%百分比表示,亦或者用极差表示,这些都是跟数据的类型和数据分布有关的。

(2)每一列代表一个分组,要统计每个观察值在各个分组中的信息;常见的是两组,比如对照组和实验组,也可能是三组或者更多,乃至在分组之后还进一步分亚组。

(3)统计分析,使用何时的统计方法,比如t检验、方差分析或者非参数检验等比较不同分组之间的差异,得到诸如p value、t statistics等数值。这里就稍微复杂一点了,到底什么时候用方差分析,什么时候用卡方,什么时候用非参统计比较,这个对于我们的统计理论还是有要求的。

因此呢,虽然这个表格看似简单,其实包含了非常多的信息,否则也不可能在文章中占到No.1的位置。那么,准确无误的三线表究竟该如何制作呢?

d437e77b1c1eaf06284aebbe4428ab44.png 实例操作

三线表的制作有很多方法,最老套方法就是用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)

a0509ad83273feb3fc0c7d2c0ac85084.png

可以看到,有些变量诸如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()函数构建表格。当然,如果是在你自己的数据中,肯定是选择自己需要的数据列。那么,这里的结果是什么样的呢?有没有统计出我们想要的表格呢?

bfc66ac048c6310edc2629ee5b2eea7a.png

在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打开看一下,如下所示,是不是很神奇呢?我们想要的表格一下子就这么成现在我们面前。

fb0e8681e73b418d7309d946c78c6307.png

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

4409874ccc9c2137b742d897dc9c2a9d.png

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

68b14cb815818a1c8300dae223c3b3c1.png

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

本期干货

- 三线表统计代码 -

资源获取方法新规

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

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

678d38c5ef3140e4f947120ce82c4258.png

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

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

2f604bec95d2abecb60fdb5f00947b95.png

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

d222bae09be90daba51daab9b3515ab2.png

https://hiplot.com.cn

点击图片进入Hiplot平台介绍

dd42d25bc82cd6446951d9a72f85a450.png 

往期干货链接

精通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分析图

相关性热图

三维地形图

三维散点图

更多科研新鲜资讯、文献精读和生物信息技能

请关注科研猫公众号

d1b7f73bcbd9fd6e6b49872528c25a1d.png

科研猫原创出品,如需转载,需获授权

若您是读者,欢迎分享,无需授权

上海辰明律师事务所提供版权法律支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值