分享

三行情书!爱上R语言的最大理由之一: R语言帮你快速形成规范“三线表”

 妙趣横生统计学 2019-12-08

第28天 学习R语言的最大理由:利用R快速成文

30天R语言已经接近尾声,我们进行了R语言的介绍、对数据的导入、整理、统计分析、绘制统计图表,现在我们该形成论文了。

学习R语言一个最大的理由是快速成文!我们都知道无论是SPSS,还是SAS数据分析结果,呈现出来的统计表实在是惨不忍睹。但是,论文写作,必须绘制出合格的三线表!怎么办,SPSS和SAS分析出结果后,我们只能一个一个抄录,将分析数据逐个复制黏贴到已经绘制好的表格中,实在是头大。

但是R语言不同,现在它有很多灵活的工具,这里介绍的是一个包,叫做tableone,它可以帮助我们快速形成统计分析的三线表,而且极其规范。

今天我们率先介绍的是,利用R语言快速形成第27天所介绍的生存分析。

1. 案例

我们一个真实世界临床研究,通过队列随访获得胰腺癌患者的生存结局,探讨术中放化疗等因素对胰腺癌生存的影响。结局变量包括时间(time)和结局(censor),结局中删失意味着生存。影响因素包括年龄、trt(术中放化疗)、sex(性别)、bui(占位处)、ch(胰胆管浸润程度)、P(有无腹膜转移)、stage(TNM分类)。

2. 一般论文的统计分析策略

对于这样的案例,我们应该如何去分析?

这一案例,一般如果写一篇论文,可以从2个角度来分析。第一个角度,就侧重于感兴趣的因素,比如术中放化疗,其他因素作为混杂因素处理;第二角度,所有的因素地位相同,可以探讨各个因素的影响。我们本论文按照第一角度为例,看看R语言如何一气呵成。

以下是论文的统计分析策略与预计结果

题目:术中放化疗对胰腺癌患者生存结局的影响研究

统计分析策略:一般论文分析套路是,统计描述、差异比较、回归分析。

1)首先,要开展基本情况的描述,描述患者的基本特征和相应的结局。

2)我们可能需要比较下采取术中放化疗和不采取术中放化疗人群的特征差异性,看分组是否均衡。

3)了解了分组均衡后,我们把分组不均衡的因素和术中放疗因素(trt)一起构建COX回归方程,这就是常见的分析三个过程。

最终结果:最基本的就包括以下几个结果:对于本题的的内容和目标,统计分析最终得到以下三张非常重要,但需要花大量精力、大量时间去整理规范的统计表。

1)统计描述的结果

2)差异性比较结果

 3)COX回归分析结果

3. 如何利用R语言出口成章?

要完成上述3张表格的规范性问题,我们可以结合tableone和broom包共同完成。

1)准备工作

安装和导入R语言两个重要的包survival、tableone、此外还有一个非常重要的包broom,等下也非常有用,导入数据

install.packages("survival")

install.packages("tableone")

library(tableone)  

library(survival)

library(broom)

pancer<-read.csv("pancer.csv")

2)进行数据的整理

pancer数据库总的来说结构相对简单,无序进行复杂的操作。这里主要要进行的是,对部分变量进行因子化的操作。

fvars<-c(“sex”,”trt”,”bui”,”ch”,”p”,”stage”)

pancer[fvars] <- lapply(pancer[fvars], factor)

3)首先进行统计描述

tableone包的CreateTableOne()就是核心的函数了,他可以帮助我们创建规范的三线表,如果其中的变量是 因子,它就计算比例,如果是数值变量,它就计算均数和标准差;如果是偏态分布,则可以通过“nonnormal = ”注明,可以计算M(P25,P75)了。

vars <- c("age","sex","trt","bui","ch","p","stage","censor","time")

tableOne <- CreateTableOne(vars = vars,  data = pancer)

table1<-print(tableOne,nonnormal = c("time"),showAllLevels = TRUE)

write.csv(table1,file="table1.csv")  #形成统计分析的excel表

上图左侧是excel表格,然后可以将Excel结果复制到word并形成三线表。我们发现,无论是正态分布的数据(age),偏态分布数据(time),分类数据,都是按照数据的特征形成不同的结果,均数、中位数或者构成比。迅不迅速?神不神奇?

4)接着进行分组比较

通过以下R语言即可完成执行,同样是CreateTableOne()函数看,在参数设置中增加了”strata = ”,就可以分组进行分析了。

vars1 <- c("age","sex","bui","ch","p","stage")

tabletwo <- CreateTableOne(vars = vars1, strata = c("trt"), data = pancer)

table2<-print(tabletwo,nonnormal = c( ),showAllLevels = TRUE)

write.csv(table2,file="table2.csv")  #形成统计分析的excel表

可以看出,三行R语言就完成了我们所有变量的比较,有定量的age,也有其它的分类数据,如果你是偏态数据,它还可以进行秩和检验帮你算出。真是出口成章。

5)接着进行COX回归分析

resCox<-coxph(Surv(time,censor)~age+sex+bui+ch+p+stage+trt,data=p1) #进行COX回归

table31<-ShowRegTable(resCox, exp = TRUE, digits = 2, pDigits = 3,

        printToggle = TRUE, quote = FALSE, ciFun = confint)

table32<-tidy(resCox)

table3<-cbind(table31,table32) #table31 table32是两个结果,现在合并成一个总表

write.csv(table7,file="table3.csv") # 数据导出

我们可以看出,常见需要的回归系数、标准误、p值都在,最令人惊奇的是HR及95CI%置信区间完美合并到一起。若按传统的spss方法,这些数据合并整理成一张表格是非常损耗时间和精力的事情。真是太棒了!

4.总结

一般的临床研究,统计分析就三把斧:统计描述、差异性比较和回归建模,显然R语言完美解决了统计分析结果整理形成规范三线表的麻烦。在统计描述上,可以根据不同数据的特征给出不同的统计描述方法,在差异性比较方面,可以给出不同数据比较的不同差异性比较方法,包括t、F、卡方、fisher法和秩和检验;在回归分析上,不仅是Cox回归。线性回归、logistic回归都同样可以形成规范的表格。这些表格,如果人工来整理,不仅慢,而且不规范!

开玩笑说,R语言可以批量制造论文了!现在R语言对你吸引力是不是很大了?你觉得是不是值得你学习了呢?

如果你这样的方法值得我们大家学习,请帮助朋友圈转发吧。非常感谢

DAY28的内容就介绍到这里!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多