迈向可重复的生信分析
引入
尽管科学界普遍同意,可重复再现是评估数据分析的最低标准,但是由于缺乏对数据的整理,对代码工具使用版本的记录等,重复再现某人(甚至有是你自己的)结果都不容易实现。我们常常会遇到以下列举的一系列问题:
- 忘记下载的数据是哪里来的
- 忘记为什么自己要省去不使用部分的数据
- 忘记这个或者那个图是怎么画出来的(特别是对R语言不熟悉的同学们,上网东抄西捡,把代码拼接起来,画完图就完事了)
- 还有一系列类似的小问题
讲了这么多,这里就是希望指出:适当记录实验步骤,让分析可重复的重要性。
如何进行可重复的生信分析
在excel文件中整理好你的数据
我们日常整理的数据基本都会用到excel。在我们进行可重复生信分析之前,我们首先要让初始的excel数据整理得清晰易懂。
首先先看两个例子:
整理前的excel文档:
整理后的excel文档:
通过对比可以看到同样的信息,在正确排版整理后,可读性得到了极大的提高。
对于我们该如何整理excel的文档,作者很贴心的给大家整理了一些小tips:
- 使用矩形的方式排列数据
- 在第一行或者第一列使用表头(并且记得不要手多添加空格,很多R包都会报错如果你的分隔符不一致)
- 一个cell只放一个值
- 每个cell都要有值,空的值可以使用NA表示
- 记得将你的数据备份(存到云盘是个很好的选择)
- 在初始的数据中,不要添加额外的计算,或者进行图型绘制
- 将数据保存为纯文本文件
管理好你的projects
科学大牛曾说过文件命名和管理是有效数据分析最有力的武器。
继续展示一个非常经典的,没有正确进行文件名管理错误例子:
大脑为了偷懒,我们常常会使用最简单的方法进行命名,例如fig1png,fig2png。而且由于很多时候,我们分析不是一天完成的,由于每天的心情不同,我们命名的方式又会出现一系列随机的变化。这个错误的方式可能会在一时间让我们很方便,让我们错以为我们已经将需要的信息已经保存起来了。但是日后过了一周一个月半年,再回来找该文件的时候我们会发现,我们很难再找到我们所需要的东西,因为我们命名的方法并没有任何可寻的归类。
关于如何进行文件名管理,很久之前我已经发过一篇推文,阐述比较好的文件名管理方式:
看完我的推文后,也顺便总结一下视频作者给出的建议:
- 使用日期开头(2018-09-05_xxxx),便于文件的sort
- 不要使用空格
- 命名要有意义,并且一致
- 在重要的文件夹中写上Read.me文件进行内容记录(千万不要依赖你大脑去记住你做了什么,让电脑帮你去记录)
为一切东西写脚本记录
很喜欢一句话“如果你要做一个分析一次,那么你以后可能会做1000次一样的分析”。将你的每一步分析写成脚本,你一定会受益其中的:
- 让你对分析更加清晰
- 分析可以重复,并且进行流程化的分析
- 会让你知道/避免分析中出现的错误(错误的参数,输入输出等)
这里视频作者也给出了一些相关的小技巧:
- 当你对不同步骤整理了多个脚本后,可以使用流程对不同的步骤进行拟合。(流程整理的工具可以使用snakemake/nextflow等相关的工具)
- 当你整理好流程后,需要对整个流程进行详细的介绍,以便日后的重复分析。
- 当你需要重复使用到一段代码的时候,将它变成function,以便重复利用
- 不要覆盖旧的脚本版本,保存为多个不同的版本以便进行tracking
另外对于如何进行脚本的记录,我以前也写过一篇文章,里面更加详细地介绍了如何进行脚本记录:
进行环境管理与版本控制
进行环境管理和版本控制也是决定一个分析是否能够重复的关键。这部分视频作者比较简单的带过了,没有进行太过仔细的分析。对于如何进行环境与版本管理,会推荐使用conda和docker。这里就先挖个坑,我日后给大家详细介绍。
总结
最后将上面的内容简单总结为几个小点:
- 管理好你的项目文件名
- 适当写READMEs进行信息记录
- 将数据保持简洁,易读
- 适当的在你的代码写上注释
- 对软件版本进行管理
- 自动化你的分享流程
- 分享你所用的计算机环境
参考链接:
- https://speakerdeck.com/minecr/the-results-in-table-1-dont-seem-to-correspond-to-those-in-figure-2-427452c9-ca4f-4e35-b911-590e6c577430?slide=47
- https://www.biostat.wisc.edu/~kbroman/presentations/cmp2018.pdf
视频链接:
https://www.youtube.com/watch?v=994uO3U-R1c&feature=youtu.be