R-论文三线表快速实现-update

作者: jamesjin63 | 来源:发表于2022-07-03 11:12 被阅读0次

    经常在报道基线资料时候,会设计表格,需要摘录统计结果,非常麻烦的调整表格。
    今天本文章利用compareGroups就解决这样的问题。

    今天就来介绍一个简单有效的数据整理成表格的包。直接上效果图

    image.png

    Tableone包

    之前介绍过一期利用 Tableone包实现三线表,最终的展现效果很好。但是有些功能不好实现。譬如OR与RR值的展示。具体操作见:R:绘制临床三线表 -https://www.jianshu.com/p/bfb038bd55cd

    compareGroups包

    同样是实现数据的汇总描述,compareGroups包有以下有点。

    • 可支持多种数据导入,如haven、readxl、readr等,也接受Tibble类型数据集。
    • 内置descrTable的新函数,只需一步就可以构建描述性表。
    • 支持R-markdown文档,支持HTML的分层表。
    • 内置strataTable的新功能,可以按层(变量的值或级别)构建描述性表。
    • 日期变量被视为连续非正态,执行中位数、四分位数和非参数检验。
    • 在compareGroups和descrTable中添加新的参数var.equal。这允许在比较两组以上的比较。

    官网文档见: 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)
    
    

    1.三线表展示

    但是,这不是我们想要的。我们要一个描述性的表格。

    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

    2.非正态数据指定

    那如果有非正态分布;我们需要对非正态分布进行指定,使用下面方法进行指定。

    • 这里method 变量=1表示比较使用正态分布,
    • 变量=2表示使用四分位间距,
    • 变量=3表示使用分类变量比较,
    • 变量=NA表示自动根据Shapiro-Wilks检测,做出是正态还是非正态方法

    我们这里的案例,展示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

    3.图形展示

    compareGroups还有更多的功能,譬如对res进行summary会获得更多的信息。

    另外,compareGroups还提供绘图功能。为此我们进一步对三线表的内容进行可视化。这也是compareGroups的一个优点。但是仅作为探索性分析的展示。

    summary(res) 
    plot(res)
    
    image.png

    如果用做论文发表,这个图还是算了吧。

    4.OR或HR的展示

    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

    5.表格的输出

    计算的结果可以导出各种各样的格式结果:Tables can be exported to CSV, HTML, LaTeX, PDF, Markdown, Word or Excel;这里我们只展示Excel格式。

    • export2csv(restab, file='table1.csv'), exports to CSV format
    • export2html(restab, file='table1.html'), exports to HTML format
    • export2latex(restab, file='table1.tex'), exports to LaTeX format (to be included in Swaeave documents R chunks)
    • export2pdf(restab, file='table1.pdf'), exports to PDF format
    • export2md(restab, file='table1.md'), to be included inside Markdown documents R chunks
    • export2word(restab, file='table1.docx'), exports to Word format
    • export2xls(restab, file='table1.xlsx'), exports to Excel format
    export2xls(createTable(res), file='table1.xlsx')
    
    image.png

    6.compareGroups包缺点

    主要是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还有更多功能,分层展示,小数点调整,但是这些都是细节。我们先出一个总的三线表。然后慢慢在去研究细节问题。

    相关文章

      网友评论

        本文标题:R-论文三线表快速实现-update

        本文链接:https://www.haomeiwen.com/subject/inbkbrtx.html