查看原文
其他

开放科学:四步流实现研究结果的可再生性

荷兰心理统计联盟 荷兰心理统计联盟 2023-02-03


Good Habits to Make your Work more Reproducible




作者:孙丹

声明:文章是个人学习心得,如有错误欢迎指正。

开放与重复(open & replicable) 近年来一直在学术圈广泛讨论,心理学的可重复性危机也已经有多篇文章讨论过。但是质疑可重复性(Replicability)的同时,可再生性(Reproducibility)依旧不可或缺。本文主要从理论与实践两部分来介绍可再生性。


理论(Be reproducible!)

1.1定义

其实一开始的时候,笔者对这两个单词也是经常混着用,区分不了二者的差异。但是在被科普之后,才知道二者还是有本质的区别的。简而言之,

计算水平的可再生性:原始数据 + 原始方法 + 一致的分析环境 = 同样的结果 (computationally Reproducible : original data + original code + same environment  = same results)

可重复性:不同的数据 + 不同的方法 = 同样的结果,这里的前提是针对同一个研究问题,可以是不同的范式,也可以是同样的范式,但是用新一批被试测试 (Replicability: different data + different methods = same research findings)


1.2原因

那么为什么要倡导可再生性呢?

(未来的)自己。翻开自己的某一个课题,你对它的熟悉度,精确度是随着时间变化的。比如独自完成的第一份代码,现在来看,也许会发现有些地方还能完善。如果你的注释不够清晰,那么某些代码甚至要花费点时间才能理解。

 其他人。你需要给导师汇报实验结果,同意公开自己文章对应的数据和代码,又或者将内容分享给你的合作者,来共同完成某个项目等等,都需要保证计算水平的可再生性。

 但是,当代码和数据,甚至运行环境都一致时,你是否能保证这份课题具有很强的可读性,操作明确呢?那么如何养成一个好的习惯,搭建一个可再生性高的课题项目呢?下面将推荐几个有用的工具!

2


工作流(workflow)

2.1设置课题setting up a project

课题结构 (Wilson et al., 2017)

● 一个独立的母文件:每个课题设置独立的文件名,便于区分

●  子文件:不同的文件类型,包括但不限于只读性质的(raw data, read-only),人为产生的(human-generated: code, paper, documentation), 课题有关的(project-generated: clean data, figures, models)

● Readme file

    o 内容(Wikipedia readme page)

    o 制作: 编写格式采用Markdown

●  开放与许可Publication & Licensing

    o 设置公开权限时,注意敏感数据

    o 设置许可协议

  ▪强推WTFPL - Do What the Fuck You Want to Public License(http://www.wtfpl.net/)上手超级简单


2.2实时备份 Establishing a robust backup (version control system)

     Git


2.3撰写代码 writing good code

     Good code: easy and correct

● 可读性(readable)

     o 有效使用空格whitespace和换行符newlines

     o 编写函数和变量时名字注意可读性

     o 统一格式

● 重复使用(reusable)

     o 代码和数据分开

     o 巧用函数

     o Do one thing (and do it well)

         ▪ 一个函数一个目的

         ▪ 一个脚本一个目的

● robust

    o Error management :巧用try/catch 进行代码调试

    o Unit testing

         ▪ in R with the testthat/testthis packages


2.4撰写文档 writing documentation

      理由很简单,文本说明一来可以便于自己以后快速熟悉课题内容,二来可以帮助合作者或同行之间交流学习。常见的说明包括代码里的注释部分,课题下的readme 文件等等。


2.5设置开放权限 Making your project accessible

3


版本控制(Version control)

      为什么要版本控制?99%的相关介绍里会引用如下的图片,这也是很多人写论文时最常用或者曾经常用的命名模式……final之后永远有新的版本123…直到最后论文结束。你有没有遇到过这些情况:

1)想改某一个代码,改完发现,额,没有保存上一个版本,那咋整?已有的备份的还是上一个的上一个?到底哪一个时间保存的是对的?

2)又或者,在某个合作项目里,你改了某个地方,怎么加个标记提醒自己以及合作者?怎么将你的某个内容分享给你的合作者 等等。简而言之,版本控制可以解决上述烦恼,不仅有历史追踪,还可以根据自定义的权限分享给你想分享给的任何人,相信处女座和强迫倾向的小伙伴一定很喜欢。至于理论总结版本控制的优势,感兴趣的朋友,右转这里:

https://stackoverflow.com/questions/1408450/why-should-i-use-version-control

Git,实现版本控制的一个工具,入门简单,不仅有GUI界面,还可以和RStudio结合。(Tip: Git != GitHub, 就像R != RStudio)。


3.1前期准备

●  本地课题文件夹(Project structure见前文)

  o 当然也有推荐模板,比如基于cookiecutter写的模板。

  o在RStudio里也有一个工具包,rrtools 详情

https://github.com/benmarwick/rrtools),欢迎有兴趣的小伙伴撰文分享学习经验~

●  个人GitHub账号

●  安装Git

注意:不同的操作系统安装方法不一致

●  设置SSH KEY: 先产生随机密钥再添加到GitHub上

On GitHub

确保已经登陆GitHub -- Settings -- SSH and GPG keys --- new SSH KEY  -- paste your public key in the “Key” boc -- give it an informative title -- add ssh key


3.2实践操作(Practice)

      参考HappyGitWithR分别罗列了三种情形1)new project, GitHub first (Chap 15); 2) Existing project, GitHub first(Chap 16); 3) Existing project, GitHub last (Chap 17)。有兴趣的同学可以查看对应章节,以下实践操作主要介绍前两种情况。


3.2.1 New project, GitHub first (cookiecutter template + git bash操作)

       正如前文介绍,一个好的课题需要包括几个主要的部分,你可以借助RStudio来创建不同的文件,也可以用现成的模板。这里模板是Cookiecutter写的(作者 Dr. Barbara Vreede )


3.2.1.1安装cookiecutter

● a. 打开command prompt,确认是否安装了 pip, 输入 pip --version

● b. 在命令窗口输入pip install cookiecutter即可安装

● c. 打开git bash 下载模板

    o 定位到指定路径

    o 下载指定模板,并回答对应问题


3.2.1.2 初始化本地课题


3.2.1.3 Connecting to GitHub

● 建立新的repository

●  填写基本信息,注意这里不要勾选readme file,可以后期自己编辑

●  链接本地文档到远程端

● 上传到远程端

 刷新远程端就会看到本地文件夹已经在github页面啦


3.2.2 Existing project, GitHub first(HappyGitWith R_Chap 16)

● Make a repo on GitHub 方法和之前类似

● New RStudio Project via git clone

    o 本地路径A

● Bring your existing project ever

    o 将已有的课题(本地路径B)移动或拷贝到本地路径A的课题下

    o In RStudio, git pane页面下会看到所有成功拷贝过去的文件,并且显示为untracked files

● Stage and commit 

    o Click the “git” tab

    o 选择你想同步的所有文件后,勾选staged

       ▪ Default: stage it

       ▪ When to reconsider: 即你可以选择该文件只存在本地文件,而不同步到远程端,那就不要点击staged. 

       ▪ 如果这是永久性的属性(即不同步到远程端),那么可以在.gitignore文件里设置

    o 如果git tab页面没有单独跳出来,点击commit

    o 在commit message 添加合适的备注

    o 点击 commit

● Push your local changes to GitHub

    o 点击 push 按钮

●Confirm the local change propagated to the GitHub remote

    o 刷新浏览器,就会看到你github页面里的指定同步的课题已经更新了

    o 点击 commit,会看到带有“init”的备注信息

● The end

    o Repeat,

    o do work somewhere. Commit it 

    o Pull it or push it(二者顺序看情况,如和他人合作某一课题时,最好先下载最新的网页端的课题) ,synced up between local and remote

(Image credit: Software Carpentries)


3.2.3 .gitignore文件

      设置隐藏文件,这样可以控制文件的开放权限。比如示例操作里调用的cookiecutter template默认数据文件夹不上传。具体可以参考下文的拓展资源。

4


网络资源

4.1 paper

      -good enough practices in scientific computing 

(https://doi.org/10.1371/journal.pcbi.1005510)


4.2 Version control

      -Why version control 

(https://stackoverflow.com/questions/1408450/why-should-i-use-version-control)

- Version control for the solo data scientist 

(https://stackoverflow.com/questions/2712421/r-and-version-control-for-the-solo-data-analyst)


4.3 Git

      -cheetsheet

(https://www.atlassian.com/git/tutorials/atlassian-git-cheatsheet)

      -gitignore

(https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files)


4.4 GitHub and RStudio tutorials

      -webinar

(https://rstudio.com/resources/webinars/rstudio-essentials-webinar-series-managing-part-2/)


4.5 rrtools: tools for writing reproducible research in R

      - https://github.com/benmarwick/rrtools


4.6 E-book

      - happy git with R

(https://happygitwithr.com/)

      -Git Magic

(http://www-cs-students.stanford.edu/~blynn/gitmagic/)


  致谢:Open Science Community Utrecht (OSCU) & Research Data Management Support (RDM support) 联合组织的工作坊 Best practice for Writing reproducible and version control以及主讲者Dr. Barbara Vreede 在工作坊中介绍的以Cookiecutter为基础写的Project的模板。

 关于作者:孙  丹 

荷兰乌特勒支大学(Utrecht University)社会心理学博士在读,目前主要关注自由意识(conscious will)和行为动作(action)之间的关系以及动作控制(Action control) 有关的加工过程。

  本期排版孟  雪

  往期热门:

         2019年值得关注的心理统计学文章(上)

         2019年值得关注的心理统计学文章(下)

         六年磨一剑:张昱城老师分享顶刊发表经验

         九种方法筛选无效问卷及对研究设计的启示

         我们为什么不劝退心理学

       2019年荷兰心理统计联盟推文合集












    最后,正值新春佳节,荷兰心理统计联盟全体成员恭祝大家平安喜乐,鼠年大吉。也借此机会向所有奋斗在前线的医护人员,处在疫情区的民众致敬!

    “隔离病毒,但不能隔绝爱。众志成城,没有我们过不去的坎。加油武汉,加油中国!”













您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存