可复现的计算科学研究十条简单规则,以及自己的一些经验

《Ten Simple Rules for Reproducible Computational Research》对做计算科学方面研究的同仁有非常好的借鉴意义,本文结合我自己的经验对其阐述。

科学研究的可重复性(replication)和可复现性(reproducibility)非常重要,然而很多科研论文普遍遗漏了对结果可复现性非常重要的实验细节。

可复现性不仅是对所属研究领域的精神上的责任,缺乏可复现性也会成为研究者的负担。对可复现性的良好实践对于让先前开发的方法有效应用于新的数据,或者对代码的复用,以及对结果应用于新项目都非常必要。

科学研究的可复现性确保同行能够重现你的结果,这能增加他人对你的科研工作的信任、兴趣、以及引用。

下面结合我自己的经验对其阐述。

  • For Every Result, Keep Track of How It Was Produced
    写文档记录每一个分析步骤的所有细节:软件的名称、版本、输入文件、精确的运行参数。尽量写脚本实现分析流程自动化。
  • Avoid Manual Data Manipulation Steps
    尽量用shell命令或者写脚本,实现数据处理的自动化,避免手动处理。
  • Archive the Exact Versions of All External Programs Used
    如果可能,打包所有外部程序,比如Interproscan5.0将软件和数据都组织好打包,方便他人使用。
  • Version Control All Custom Scripts
    运用版本控制系统,如Subversion、Git和Mercurial。比如我在Github上托管了一些开源项目的代码,如果不便公开,实验室内部也可以自己搭建与Github类似的Gitlab
  • Record All Intermediate Results, When Possible in Standardized Formats
    这个我深有感触,特别是做大运算量、多步骤的分析时,保留中间结果让整个流程更清晰,也能避免因改变参数等情况花大量时间重头计算,此外也方便查错。
  • For Analyses That Include Randomness, Note Underlying Random Seeds
    记录随机数种子,这是我最近才意识到的。因为大多编程语言的随机数生成器并非完全的随机,均是伪随机,需要通过设置随机数种子来增加随机性。当随机数种子不变时,能够复现随机数。
  • Always Store Raw Data behind Plots
    最好把常见的图表绘制程序写成R包,再写R脚本自动读取原始数据来绘图,这样能保证图表风格的一致性,也能提高脚本的可复用性,轻松变换格式应对不同场合。
    我同学从她师姐那儿儿只得到图表,没有原始数据,当编辑让他修改图片格式的时候,他就没办法了。
  • Generate Hierarchical Analysis Output, Allowing Layers of Increasing Detail to Be Inspected
    不仅单单给出最终的结论,还要良好地组织各子结果。文中推荐超文本文件(html文件),Blast2GO便是采用此方法。某家生物信息学公司还专门开发了一套软件来管理分析结果。
  • Connect Textual Statements to Underlying Results
    集成课题相关的材料,便于追踪课题思路和结果。我觉得可以为每一个课题专门建立网站来管理数据。
  • Provide Public Access to Scripts, Runs, and Results
    计算方面的论文一般都要提供软件下载、或者在线服务,实验所采用的数据通常也应该提供下载。这样能提高审稿的质量和速度,也能增加论文被接受的机会,也能增加论文发表后被引用的机会,更重要的是有利于研究工作的长远发展。

此外,还有一些文中没有涉及的东西。下面是我的血泪史换来的一些经验:

  • 课题数据的文件组织,我常见的组织形式:/backup, /data, /analysis, /scripts/, /paper, /reference, /doc。
  • 良好的软件架构/结构,代码的模块化,代码重构,可移植性。
  • 编码的规范性,比如Perl要用use strict,要用perltidy格式化代码
  • 做完整的单元测试,避免今后后悔莫及。
  • 如果数据量太大,要么多线程编程,要么把数据分割。并行计算。

希望对大家有用,欢迎大家补充。

本文转自爪爪《可复现的计算科学研究十条简单规则,以及自己的一些经验》http://blog.shenwei.me/ten-simple-rules-for-reproducible-computational-research/

评论  3  访客  2
    • tanger_009 1

      写的这么好这么没人赞一个!

    发表评论

    匿名网友

    拖动滑块以完成验证