首发于只求甚解
bruceR:数据分析的三头六臂

bruceR:数据分析的三头六臂

【重要】请各位读者移步最新的两篇知乎文章:


R语言是新时代的数据分析利器,其丰富的第三方扩展程序包(“R包”)可以实现几乎所有的统计分析方法。然而,无论是R语言小白还是R语言老司机,可能都会觉察出来它的一些不便之处……

举一个最简单的例子:做普通的多元回归分析,R语言基础包的summary()函数仅仅输出了回归系数、标准误、p值等基本的统计指标(如下图所示),但无法直接输出标准化回归系数、偏相关系数等效应量指标,也没有自变量的多重共线性诊断——这些额外的指标其实很重要,反而在经典统计软件SPSS里面可以很轻松地得到。

R语言的基础函数summary()的输出结果(无法满足更高需求)

R虽然功能强大,但毕竟是一个开源的社群,其强大的功能主要是由众多的第三方R包支撑起来的。如果想输出像SPSS那样丰富的结果表,其实比较麻烦,至少需要额外调用很多其他的R包才能解决。且不说初学者很容易迷失在各种R包里面,我作为一个R语言老用户,也不太喜欢每次做分析的时候写冗长的代码、调用过多的R包——bruceR包的出现,正是为了降低使用R语言的“麻烦程度”,摆脱“垂死挣扎累不累”的束缚,获得“不如瘫在床上睡”的自由

“垂死挣扎累不累,不如瘫在床上睡”
bruceR,为“偷懒”而生。
(勤劳的同学可以不用)

R包一般有两种来源:CRAN(R包官方数据库)和GitHub(代码版本管理与资源共享平台)。bruceR于2019年9月1日正式公开发布了0.2.0版本,已经共享到了GitHub,尚未上传到官方的CRAN,所以需要从GitHub安装(用户指南请访问:bruceR)。

安装方法如下:

# 安装方法:
# 1. 安装好devtools包,已安装过的可以忽略
# 2. 调用这个包的install_github函数从GitHub安装bruceR包
install.packages("devtools")
devtools::install_github("psychbruce/bruceR")

安装好之后,可以简单试试里面的函数。

比如,同样是前面提到的这个回归模型,如果用bruceR的GLM_summary()函数来输出,结果是这样的:

model=lm(Temp ~ Month + Day + Wind + Solar.R, data=airquality)
GLM_summary(model)
bruceR::GLM_summary()函数的输出结果

1 /「bruceR」的来龙去脉

bruceR的“前身”是2018~2019年我在研究项目里做数据分析的过程中积攒下来的一系列“小函数”。最早,由于需要获得多层线性模型(HLM)的更丰富、更全面的结果,我初步编制了“HLM_summary()”函数。这个函数能够明确规定变量在哪一层、属于哪种类型等,从而自动计算变量的自由度,并计算多种效应量指标,最后以美观的三线表形式输出到Console(控制台):

当然,HLM_summary()函数经历了多次优化和迭代,已经进化到了bruceR包里的HLM_summary(),更易用、更强大。同时,它还收获了一枚小兄弟:GLM_summary(),功能类似,可以使普通回归模型的输出结果得到丰富和完善(正如本文开头的那个例子)。此为bruceR的“前身”之一,目前,这两个“原始股”函数也已经在室友 @张光耀 开发的“回归分析Shiny用户界面”里得到了进一步的应用:Shiny performer of HLM/GLM (beta version 0.9.4.1)Shiny dashboard of HLM/GLM (beta version 0.9.5.0)

bruceR的第二个“前身”是我为了减少多变量计算的代码量、提高量表分析的效率、让分析代码变得更“优雅”,开发出来的COUNT()、SUM()、MEAN()等一系列函数,可以实现用最少的代码计算多题项复杂量表的总分、平均值等。一般情况下,只需要提供量表变量名的共同部分(如生活满意度量表的缩写“SWLS”)和变量名中的题号范围(如1:5)即可直接计算。

值得一提的是,在这些函数里面,反向计分也得到了最大程度的简化,可以直接设定哪些变量反向计分,而不需要额外生成新的变量。类似的功能也被整合进了bruceR包的Alpha()函数,大大简化了量表信度分析的工作。

bruceR的第三个“前身”则是我在其他包的R函数的基础上,简单扩展出来的一些零零碎碎的小函数。比如bruceR的set.wd()函数便是基础包的setwd()函数的简单扩展,可以直接把工作路径设置到当前R脚本所在的文件夹,这样就不需要每次复制粘贴一大串路径名、再把一个个反斜杠修改为正斜杠……这些都是R语言编程的基础知识,与统计无关。关于R语言的基础入门,也可以参考我之前的知乎专栏文章:

以上三个“前身”均已在正式发布的bruceR包里得到了优化,2019年9月的0.2.0正式版本也增加了具体的说明文档和应用实例。

安装bruceR包、查看函数的说明文档、运行函数的应用实例,是最直接的了解途径。

一言以蔽之:我目前分析数据和作图,只加载一个bruceR包就已经可以完成很多不同的事情(当然,前提是你要足够熟悉你所做的分析和R语言的基本知识)。

2 /「bruceR」的功能概览

bruceR的全称是“BRoadly Useful Collections and Extensions of R functions”,它为数据分析提供了“三头六臂”。

  • “三头”——总体而言,bruceR的函数覆盖了数据分析必不可少的三大环节:
  1. 变量处理
  2. 统计建模
  3. 制表绘图
  • “六臂”——具体而言,bruceR有六大系列的函数:
  1. 基础性分析(如频率统计与分布直方图、相关分析与相关矩阵图)
  2. 多变量计算(如计算带有反向计分的多题项量表总分或均值)
  3. 信效度分析(如内部一致性信度α、探索性/验证性因素分析)
  4. 方差分析类(如t检验、ANOVA、简单效应检验、两两多重比较)
  5. 回归模型类(如一般/广义/多层线性模型的高级工具包与完整结果输出)
  6. 绘图模板类(如专为ggplot2设计的科研绘图主题theme_bruce)

主要函数如下:

https://github.com/psychbruce/bruceR#main-functions-in-brucer

当然!这些函数并非“从零开始”编制的,毕竟R语言发展至今已经有大量可以依赖的R包,重复造轮子是没有必要的!我做的工作只是把已有R包的一些函数进一步优化和集成,使每一种分析及其完整结果都可以用很短的一行代码实现。

如果你很想知道这些函数的内部是怎么写的,可以直接在Console里面输入函数名(不加后面的括号),然后回车,就可以看到函数的内部代码了。

此外,bruceR还为用户推荐了很多实用的R包(虽然这些包在bruceR的开发过程中没有被用到):MBESS、metafor、texreg、summarytools……

3 /「bruceR」的未来展望

bruceR虽然看似“海纳百川”,但并不企图囊括所有的统计方法(那也不现实)——目前,我只会把经常用到的分析功能打包进bruceR。

0.2.0版本已经集成了与线性回归、信度分析、因素分析等常用分析相关的函数,但方差分析类函数还有待开发。虽然我们常说“t检验、方差分析都是线性回归的特例”(Common statistical tests are linear models),但它们在满足研究者的统计需求方面还是有差别的。尤其对于方差分析,当交互作用显著后,我们需要做简单效应检验(等价于回归分析中的调节作用和简单斜率检验)。对此,我之前写过的三篇知乎专栏文章已经有所介绍,但均是基于SPSS软件(链接如下)。bruceR的下一步工作就是在已有R包(如afex、ez、emmeans、multcomp)的基础上,优化出一系列能够方便做各种类型的方差分析及其简单效应检验、两两多重比较的函数。

相信在不久的将来,bruceR可以变得更强大!

若读者有任何建议,欢迎在评论区留言。

谢谢!

彩蛋:关于安装R包

一般来说,安装bruceR的过程中不会出现bug。不过,在某些情况下,安装过程可能会有不必要的“小插曲”。不必惊慌,我们有办法来解决:

  1. 由于bruceR依赖于很多其他R包(如大名鼎鼎的tidyverse、ggstatsplot),这些R包及其依赖的更基础的R包的最新版本可能要比你电脑上已安装的版本新一些,因此你很有可能会被问到“是否更新这些包”(见样例)。最简单的做法是不更新,这并不会有什么影响,除非你原来的包版本过低。
  2. 个别用户在安装某些被bruceR依赖的R包时,可能会出现无法正常安装的情况。这并不是bruceR的问题,一般可以通过认真阅读报错信息、单独安装这些R包、再正常安装bruceR来解决。
  3. 安装bruceR时,你会看到它额外安装了很多看似不相关的R包(可能高达200多个)。不用担心,这些包大多是tidyverse、ggstatsplot所依赖的基础包(是的,这两个包依赖了上百个R包)。bruceR直接依赖的R包其实只有6个:rio、dplyr、stringr、data.table、psych、ggplot2;同时安装的其他R包也屈指可数:tidyverse、ggstatsplot、MuMIn、jtools、semPlot。
  4. 如果想知道R包之间的依赖关系,bruceR提供了一个函数pkg_depend()。比如pkg_depend("tidyverse")、pkg_depend("ggstatsplot")。可以看到,tidyverse依赖了82个R包,ggstatsplot足足依赖了218个R包!事实上,bruceR直接依赖的6个R包也都早已存在于tidyverse或ggstatsplot里面了。这里把它们单独拿出来是为了能在加载bruceR时顺带加载这6个包(技术细节,请读者忽略 =. =)。

关于bruceR的最新介绍,请访问:github.com/psychbruce/b

当你在使用R时,也可以通过代码 ?bruceR 快速查看bruceR的说明文档。

编辑于 2022-04-28 16:42