前言
在之前章节中,尽管我们已经介绍了在 R中进行元分析时所需 要用到的各种技术、方法和策略,然而这些所涉及的统计程序仅占 整个元分析家族的一小部分。当我们在实际的元分析过程中,可能还会遇到以下问题:
1.如果你发现在元分析的R代码中有一个错误,那么需要做出一些调整再复制一些分析步骤
2.合作者或审稿人建议你使用另外一种不同的方法或模型,或余姚对你的数据进行敏感性分析
3.你想把分析过程的某些部分分派给合作者,这需要给他发送一份你当前的分析现状
4.你可能需要中断分析工作一段时间,这意味着返回工作之前,你也许会忘记一 些分析步骤
5.你希望能将自己的分析结果与其他项目合作者共享,但他们可能从未接触过 R, 也未安装 Rstudio
在这仅列举部分你可能遭遇的场景。因此当在 R中进行元分析时, 如果能够创建一个可重复分析的工作流程(reproducible work
flow),显然对你和他人都有利。可重复性也是开放科学实践的基 石。让你的元分析具有完全的可重复性,会为其他关注你是如何获 得分析结果的研究者带来直观的答案。RStudio是一个创建可重复工作流程的最佳工具,它能够促进研究者在一个项目上的合作。在这里我们将介绍两个工具用于重复、呈现和传播分析:RMarkdown 和 Open Science Framework。
R Project
在开始正式分析前,有一个好办法是先在你 RStudio中创建一个R项目。R projects创建了一个与你电脑中特定的文件夹相关联的新环境,这其中包含了你在分析时所有需要用到的数据与 R代码。 R project中进行分析意味着你创建的所有对象都暂时保存在你的 project中,方便你在下次返回工作时可以直接使用。为了创建一个 新的 Rproject,你需要点击 RStudio的右上角 Project图标,并在 下拉菜单中选择 NewProject。
然后,你还需要创建一个新目录(New Directory),即你电脑上 的一个新文件夹,将它设定为你 project的工作目录。
点击New Directory。
比如,你可以将你的新项目命名为“Meta-Analysis Project”,将 项目文件夹保存在 my~Documents/Rfolder
点击完“Create Project”后,你就成功创建了自己的 R project。 在 RStudio窗口的右下角 Files标签下,你将会看到当前存储在该项目文件夹中的所有数据。通过点击“New Folder”,你也还可以在 RStudio中直接创建子文件夹,例如一个专门用于存储 data的文件夹。
R project的一大特色是,不需要使用绝对路径去引用或导入我 们想要调用的文件。我们只需要指定文件名,或者,如果需要调用一个子文件,只需要输入文件名和子文件名即可。例如,假定在我们的数据子文件夹中有一个数据集data.xlsx,通过使用 readxl包,我们只需要指定数据文件夹和文件名就能够轻松导入该数据集。
read_excel("data/data.xlsx")
我们也可以将 RStudio右上角的 Environment中所列的所有 objects保存为一个R Data(.rda)文件,存放至 project folder。假定 在你 Global Environment中有一个dat数据框。我们可以使用下面的代码,将该数据集保存至我们的 data folder里面
save(dat,file="data/dat.rda")
在以后我们可以使用下述函数,将该数据集重新加载至我们的Global Environmen内
load("data/dat.rda")
R Markdown
Markdown是一种用于文本格式化的简单标记语言。R Markdown是对 Markdown的拓展,它可以轻松地把纯文本、R代码以及R代码的输出整合在一个文档中。这使得 R Markdown在报告你的分析结果时是一个非常有帮助的工具。我们可以使用 RMarkdown来创建 HTML或 PDF文件,并且用于记录你分析时所使用的全部代码、基于这些代码所获得的结果以及用于解释每一步分析步骤的详细文本。在 R Studio中创建 RMarkdown非常便利。 只需要点击 R Studio窗口左上角一个带有绿色加号的白色图标,然后在下拉菜单中点击“R Markdown”如下图所示:
在定义完新 RMarkdown文档名后,它应该出现在你 RStudio 的左上角。
除前六行外,在该文档中已经包含了一些典型内容,我们可以删除它们
这部分是你的YAML header(另一种多栏布局的标题 Yet Another Multicolumn Layout)。它包括标题、作者、数据和文档的导出格式。在此我将输出格式设定为 html_document,意味着该文档完成后将输出一个 HTML页面。RMarkdown的结构包括两部分: 纯 Markdown文本和所谓的R chunks,呈灰底。在这里我将不会详细讲解 R Markdown文档中的文本部分是如何格式化的,并且在 Cheat Sheet上(https://rstudio.com/wp- content/uploads/2015/02/rmarkdown-cheatsheet.pdf)上有大量资源可以学习 Markdown语法(这大概只需要花费你 20分钟左右 时间)。另一方面,关于 R code chunks部分,只是包含通常你需要在控制台输出的所有R代码。通过点击位于文档右上方的“Insert” 图标,你就可以增加自己的新的code chunks。
这些chunks中的 code的运行方式与常规 R code相同,除了其输出结果不会显示在 Console或者 Plotspane中。你只需要点击每个 chunk右侧的绿色三角形,就能运行该 chunk。
一旦完成该文档,我们可以通过点击上方的'Knit'图标将它导出为 HTML(或 PDF,或 MSWord文档)。这将以定义的格式导出一个包含所有的文本、代码和结果的文档。
我们在此仅对 RMarkdown做了一次非常简短的介绍,其实它有很多的功能需要去探索。你可以访问全面的在线指南 (https://bookdown.org/yihui/rmarkdown/),学习更多的关于 R Markdown的知识。
OSF
开放科学框架(OpenScienceFramework,OSF)是促进研究合作与重复工作(reproducibility)的一种开源线上平台。 OSF实际上是 一个线上的资源库,为了方便沟通合作以及使研究过程的所有步骤透明化,研究者们将他们的代码和分析脚本存放其中。OSF是开放科学运动的先锋,在过去的十年间其势头越来越大。我们鼓励所有的元分析者通过提供他们所收集的数据以及用以分析的代码的开放访问,推进其研究与分析过程对公众的透明化。在 OSF默认情况下, 你为自己创建的所有存储库都是私人的,你可以自行决定是否公开、 何时公开以及公开什么内容。在下文中,我们将为你展现如何在 R 中设立 OSF repository、上传与下载文件以及如何添加合作者。
1.访问令牌
在正式开始使用 OSF前,你首先需要在这里 https://osf.io/创建一个个人账户。然后你还需要生成一个访问令牌(Access Token), 这样就可以在 RStudio中直接操作我们的资源库(repository)。可 以在 https://osf.io/settings/tokens,点击 Createtoken,生成访问令牌。
在 Scopes栏下,勾选所有方框并再次点击 Createtoken。此时会出现你的personal access token,将它复制并保存到只有你能找到的地方。
2.安装osfr包及认证
为了能够通过 R直接访问OSF,我们需要使用 osfr包。你可以使用如下代码安装并加载它。
devtools::install_github('CenterForOpenScience/osfr')
library(osfr)
在使用 osfr包的功能前,需要使用 access token进行身份认证(authenticate)。 这一过程是很有必要的,因为只有自己(或者任何有权使用 token的人)才能更改 myrepository中的内容。为 了进行验证,我们需要使用 osf_auth函数,并给它提供我们刚刚收到的 access token(下面展示的 token是虚构,并不是我实际使用的 access token)
osf_auth("AtmuMZ3pSuS7tceSMz2NNSAmVDNTzpm2Ud87PcqfHZPtG9U3NLHkRPSt4eE3zRb4")
3.建立仓库
通过使用 osfr,我们现在能基于 R代码创立一个 online
repository,假如,我正在进行一项新的元分析项目,我想将个人的 data以及 R Markdownscript上传至 OSF repository,我把它命名为 “Meta-AnalysisProject”。为了能在 osf.io (https://osf.io/dashboard)创建一个 project,可以使用 osf_create_project函数。我需要输入我想创建的 repository的名字,并将它保存至名为 meta_analysis_project的 Robject中。
meta_analysis_project<-osf_create_project("Meta-Analysis Project")
通过使用 osf_open函数,我能够访问刚才新建的
repositort online。
osf_open(meta_analysis_project)
现在我的 repository已经新建成功,我们可以继续对它添加组件(components),就像在电脑中对文件夹操作一样。假如我想创建两个组件,一个是 my datasets,另一个是 R Markdown scripts。 那么需要使用 osf_create_componentfunction。首先我必须为该函 数提供 R object for my repository(meta_analysis_project),然后为组件设置标题。最后将它们作为 objects保存至我的R environment。
scripts<-osf_create_component(meta_analysis_project,title= "AnalysisScripts")
datasets<-osf_create_component(meta_analysis_project,title= "Datasets")
如果现在转到我的 repository线上页面,你可以看到两个组件已被添加。
4.更新和下载
我们可以使用 osf_upload函数,将 data上传至 OSF repository。 该函数需要提供我想要添加文件的 component/folder(就是刚才我们保存的 R object)以及输入路径。假如我们想上传一个名为 “Analysis.rmd”R Markdown script,它当前正保存在我们的 R project的子文件夹“scripts”中。我们可以使用下述代码上传。
osf_upload(scripts,"scripts/Analysis.rmd")
我们可以使用 osf_ls_files函数,访问该脚本组件的内容,以检查该文档是否已经被成功上传。
osf_ls_files(scripts)
在输出结果中我们可以判断上传是否已经成功。如果我们要下载一个文档,我们可以从 osf_ls_files函数的 output中选择一行,并将它 作为 osf_download 函数的 input,从而将该特定文件下载至我们计算机上的 project文件夹。
osf_download(osf_ls_files(scripts)[1,])
5.合作与共享
在我们的 OSFrepository网页上,可以在“Contributors”栏下添加合作者。
同时,我们也可以在任何时候,通过点击页面右上角的 Make Public公开我们的 repository