如何提高研究的长期可重复性(尤其是使用R和Sweave)


31

情境: 为了回应先前有关可重复研究的问题,杰克写道

创建JASA归档文件时发现的一个问题是CRAN软件包的版本和默认值已更改。因此,在该归档文件中,我们还包括了所用软件包的版本。当人们更改其包装时,基于小插图的系统可能会崩溃(不确定如何在《纲要》的包装中包括额外的包装)。

最后,我想知道当R本身改变时该怎么做。例如,是否有生产虚拟机的方法,该虚拟机可以复制用于纸张的整个计算环境,从而使虚拟机不会很大?

题:

  • 有什么好的策略可确保可重现的数据分析在将来(例如发布后的五,十年或二十年)可重现?
  • 具体来说,使用Sweave和R时,有什么好的策略可以最大程度地提高重复性?

这似乎与确保可重现的数据分析项目将在其他人的计算机上运行时使用的默认值,软件包等略有不同的问题有关。


您是否考虑过使用RUnit进行单元测试以验证理论行为?

Answers:


18

在某种程度上,这变得不可能。考虑一下著名的Pentium浮点Bug的情况:您不仅需要保存模型,数据,参数,包,所有外部包,主机系统或语言(例如R)以及OS。 。还有可能全部运行的硬件。现在考虑一些结果可能是基于仿真的,并且需要特定的机器集群。

这只是实用性。

话虽如此,我认为在修订版本控制中对代码(也许还有数据)进行版本控制,存储所有相关软件的版本以及通过运行单个顶级脚本来再现结果的更实用的解决方案可能是“足够好”的妥协。

你的旅费可能会改变。这也因学科或行业而异。但是,请记住关于万无一失的系统不可能的旧见解:您只是创造了更聪明的愚人。


1
(+1)我只能同意你的看法。特别是关于R,似乎很难确保(a)更新软件包后某些计算将保持可重复性(最近发生在我身上),并且(b)有一天不会与依赖项发生冲突(例如,对lme4)。
chl 2010年

13

可再现性的第一步是确保数据的格式易于将来的研究人员阅读。平面文件是此处的明确选择(Fairbairn印刷中)。

为了使代码长期有效,也许最好的办法是编写清晰的文档,解释代码的作用及其工作方式,以便在工具链消失时,可以在将来的某些系统中重新实现分析。 。


1
商定的,可靠的数据和元数据优先。
mindless.panda


7

如果您对虚拟机路由感兴趣,我认为可以通过安装了特定版本R和软件包的小型Linux发行版来实现。包含数据以及脚本,并将整个内容包装在虚拟框中文件中。

这不能解决前面提到的硬件问题,例如Intel CPU错误。


4

除了已经给出的出色答案之外,我还建议两点:

  • 在代码的关键点上,将当前数据作为平面文件转储,适当地命名并在注释中进行描述,从而突出显示一个包是否在引入差异的地方产生了不同的结果。这些数据文件以及原始输入和结果输出应包含在“可重复研究集”中

  • 在代码中包括对相关软件包的一些测试,例如使用诸如TestThat之类的东西。困难的部分是进行小的,可重现的测试,这些测试可能会突出显示您的分析相关的软件包所做的任何更改。这至少会向另一个人强调环境之间的某些差异。


1

好的建议,我现在有很多事情要研究。

请记住,一个非常重要的考虑因素是首先要确保工作“正确”。通过增加您所做的事情和您所说的所做的事情是同一件事的机会,Sweave之类的工具便发挥了这种作用。


1
苏门答腊项目也可能会有所帮助:Neuroensemble.org/trac/sumatra/wiki。您可以使用它的命令行界面来运行代码,在R或其他版本中运行。也有一个Python API。在R-blogger上有一篇不错的博客文章,讨论了以R为中心的可重复性研究工具,并提到了使用Sumatra。 r-bloggers.com/managing-a-statistical-analysis-project- –-guidelines-and-best-
practics
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.