从 SAS 到 R - 什么是报告的“必须”包

机器算法验证 r sas 报告
2022-03-30 06:12:47

SAS 相对于 R 的一大优势可以说是它能够用很少的语句生成相当复杂的报告。想想PROC SUMMARYPROC TABULATE例如。

由于它的开放性和充满活力的社区,我的心向往 R。但我必须承认,SAS 的 PROCS 开箱即用非常强大。为了部分解决这些问题,我编写了一个名为summarytools的 R 包,它提供了生成体面的外观和可翻译的方法(感谢 pander,Pandoc在 R 中实现)简单的报告(频率、单变量统计、码本,对于基本部分)到各种格式,如 RTF 、pdf 和降价。

然而,即使使用by()来对统计数据进行分层(无论是频率还是单变量数值统计),我觉得我仍然距离生成灵活和完整的表格(例如 withPROC TABULATE或)还有很长的路要走PROC MEANS所以我的问题是:你发现什么 R 包是从数据帧中提取基本统计数据、拆分这个变量并过滤另一个变量的“必须”包。我希望这不是一个太宽泛的问题;在发布到这里之前,我已经做了功课并尝试找到这个问题的答案。我确信有一些非常制作精良的软件包可以解决这些问题,而我只是还没有看到它们……还没有。

3个回答

R 的问题在于,有很多方法可以构建出色的报告,并且有很多 R 包对这项任务有帮助。一种方法虽然已经过时,但在http://biostat.mc.vanderbilt.edu/wiki/pub/Main/StatReport/summary.pdf中显示。请注意,那里的一些功能已经更新,如http://biostat.mc.vanderbilt.edu/HmiscNew [并真正注意tabulr功能]。该方法围绕,我相信您会发现对于生成高级表格(包括包含显微图形和脚注的表格),比该方法具有许多优势LATEXLATEXmarkdown-pandoc

我认为我们应该用图形替换几乎所有的表格。新的 R greport(“图形报告”)包采用图形应该用于主要演示文稿的理念,并且图形应该超链接到出现在 pdf 报告附录中的支持表格。http://biostat.mc.vanderbilt.edu/Greportgreport使用Hmisc包中的新函数来绘制分类数据(即,将表格转换为图表)和显示连续变量的整体分布。

似乎按变量报告和过滤/拆分数据是两个正交任务。人们通常为这些使用不同的软件包。

对于管理数据,很少有真正流行的包:dplyrdata.table

对于报告表,一个对我来说很突出的软件包是stargazer

以下是一些演示:http ://cran.r-project.org/web/packages/stargazer/vignettes/stargazer.pdf

它涵盖了乳胶html(以及ASCII,但没有使用过)。

我从未使用过 SAS,所以我不知道这是否会涵盖您想要的所有功能。

2020 年发布了记者包,其运作方式与proc report. 您可以使用其他 R 包获取所需的数据和统计信息,然后将生成的数据帧发送到报告器。像这样:

library(reporter)

# Create temporary path
tmp <- file.path(tempdir(), "example3.pdf")

# Read in prepared data
df <- read.table(header = TRUE, text = '
      var     label        A             B          
      "ampg"   "N"          "19"          "13"         
      "ampg"   "Mean"       "18.8 (6.5)"  "22.0 (4.9)" 
      "ampg"   "Median"     "16.4"        "21.4"       
      "ampg"   "Q1 - Q3"    "15.1 - 21.2" "19.2 - 22.8"
      "ampg"   "Range"      "10.4 - 33.9" "14.7 - 32.4"
      "cyl"    "8 Cylinder" "10 ( 52.6%)" "4 ( 30.8%)" 
      "cyl"    "6 Cylinder" "4 ( 21.1%)"  "3 ( 23.1%)" 
      "cyl"    "4 Cylinder" "5 ( 26.3%)"  "6 ( 46.2%)"')

# Create table
tbl <- create_table(df, first_row_blank = TRUE) %>% 
  stub(c("var", "label")) %>% 
  define(var, blank_after = TRUE, label_row = TRUE, 
         format = c(ampg = "Miles Per Gallon", cyl = "Cylinders")) %>% 
  define(label, indent = .25) %>% 
  define(A, label = "Group A", align = "center", n = 19) %>% 
  define(B, label = "Group B", align = "center", n = 13)


# Create report and add content
rpt <- create_report(tmp, orientation = "portrait", output_type = "PDF") %>% 
  page_header(left = "Client: Motor Trend", right = "Study: Cars") %>% 
  titles("Table 1.0", "MTCARS Summary Table") %>% 
  add_content(tbl) %>% 
  footnotes("* Motor Trend, 1974") %>%
  page_footer(left = Sys.time(), 
              center = "Confidential", 
              right = "Page [pg] of [tpg]")

# Write out report
write_report(rpt)

报告可以文本、RTF 或 PDF 格式输出。这是PDF版本: 在此处输入图像描述

这个包的优点是您可以创建几乎任何类型的报告。这将需要比table1或更多的工作stargazer但由于它只生成报告,并不尝试生成统计信息,因此您可以自由使用任何 R 统计包。所以更多的工作,但更多的自由。