经常在报道基线资料时候,会设计表格,需要摘录统计结果,非常麻烦的调整表格。 今天本文章利用
compareGroups
就解决这样的问题。
今天就来介绍一个简单有效的数据整理成表格的包。直接上效果图
image.png
之前介绍过一期利用 Tableone包
实现三线表,最终的展现效果很好。但是有些功能不好实现。譬如OR与RR值的展示。具体操作见:R:绘制临床三线表 -https://cloud.tencent.com/developer/article/2138919
同样是实现数据的汇总描述,compareGroups
包有以下有点。
官网文档见: compareGroups 4.0: Descriptives by groups
所有数据均来自于data(predimed)
。
image.png
根据age、sex、smoke、waist、hormogroup
五个因素,进行组间比较。我们可以看到res的输出结果,包含每个变量的组间p值及使用的统计方法。
我们可以直接输出全部的表格汇总,或者根据分组变量进行展示:
library(compareGroups)
library(tidyverse)
data(predimed)
head(predimed)
# ALL data
descrTable( ~ ., data = predimed)
# ALL data by group
descrTable(group ~ ., data = predimed)
但是,这不是我们想要的。我们要一个描述性的表格。
res <- compareGroups(group ~ age + sex + smoke + waist + hormo,
data = predimed)
res
-------- Summary of results by groups of 'Intervention group'---------
var N p.value method selection
1 Age 6324 0.003** continuous normal ALL
2 Sex 6324 <0.001** categorical ALL
3 Smoking 6324 0.444 categorical ALL
4 Waist circumference 6324 0.045** continuous normal ALL
5 Hormone-replacement therapy 5661 0.850 categorical ALL
-----
Signif. codes: 0 '**' 0.05 '*' 0.1 ' ' 1
只需要增加一个createTable(res)
函数,即可实现描述性表格的展示
createTable(res)
image.png
那如果有非正态分布;我们需要对非正态分布进行指定,使用下面方法进行指定。
我们这里的案例,展示age跟waist都用非正态分布。
createTable(res)
## add non-normal test
res=compareGroups(group ~ age + smoke + waist + hormo, data = predimed,
method = c(waist = 2, age = 2))
createTable(res)
image.png
更多参数调试,见官方网站 https://cran.r-project.org/web/packages/compareGroups/vignettes/compareGroups_vignette.html
compareGroups
还有更多的功能,譬如对res
进行summary
会获得更多的信息。
另外,compareGroups
还提供绘图功能。为此我们进一步对三线表的内容进行可视化。这也是compareGroups
的一个优点。但是仅作为探索性分析的展示。
summary(res)
plot(res)
image.png
如果用做论文发表,这个图还是算了吧。
compareGroups
这一功能是比较优秀的。也是这里所要介绍给大家的。因为Tableone不能汇总OR跟RR的信息,需要单独计算,然后排列。
我们的因变量y必须是二分类或者生存数据,才会产生OR与HR的比值比。
这里我们还是用predimed
数据,但是因变量转成htn
二分类变量。当然,自变量分类等级的参考也可以进行更改。这里默认是第一个。如果需要更改,见https://cran.r-project.org/web/packages/compareGroups/vignettes/compareGroups_vignette.html#subsetting
res1 <- compareGroups(htn ~ age + sex + bmi + smoke, data = predimed,
ref = 1)
createTable(res1, show.ratio = TRUE)
image.png
接下来是HR的展示。这里面比OR要多一步,就是指定结局变量及利用Sur
模型,先建立生存分析的模型。
library(survival)
predimed$tmain <- with(predimed, Surv(toevent, event == "Yes"))
createTable(compareGroups(tmain ~ group + age + sex, data = predimed),
show.ratio = TRUE)
image.png
计算的结果可以导出各种各样的格式结果:Tables can be exported to CSV, HTML, LaTeX, PDF, Markdown, Word or Excel;这里我们只展示Excel格式。
export2xls(createTable(res), file='table1.xlsx')
image.png
主要是compareGroups
的结果不能用DT::datatable
展示,就是他的结果可以print
,也可以保存本地csv、excel。
DT::datatable(createTable(res1, show.ratio = TRUE))
这里要实现Tableone
的结果,就导出csv文件,然后再读入进来。即可对compareGroups的结果用DT::datatable展示。
library(tidyverse)
export2csv(x, file='table1.csv')
xa=read.csv('table1.csv',header=T)
DT::datatable(xa)
image.png
compareGroups
还有更多功能,分层展示,小数点调整,但是这些都是细节。我们先出一个总的三线表。然后慢慢在去研究细节问题。