跳到主要内容

生物导体:计算生物学和生物信息学的开放软件开发

摘要

生物导体项目是一项为计算生物学和生物信息学协同创建可扩展软件的倡议。该项目的目标包括:促进合作开发和创新软件的广泛使用,减少进入跨学科科学研究的障碍,促进实现研究结果的远程再现。我们描述了我们的目标和方法的细节,确定了当前的挑战,将生物导体与其他开放式生物信息学项目进行了比较,并提供了工作示例。

背景

生物导体项目[1]是为计算生物学和生物信息学(CBB)协作创建可扩展软件的倡议。生物学,特别是分子生物学,正在经历两个相关的转变。首先,人们越来越认识到许多生物过程的计算性质,计算和统计模型可以发挥巨大的作用。其次,高通量数据采集的发展对生物研究管道的每个阶段的计算和统计复杂性提出了要求。Bioconductor项目的主要目标是创建一个持久且灵活的软件开发和部署环境,以满足这些新的概念、计算和推断挑战。我们努力减少进入CBB研究的障碍。一个关键目标是简化统计研究人员探索CBB数据资源和算法并与之进行有效交互的过程,通过这些过程,工作生物学家可以获得和使用最先进的统计方法,以便在CBB中进行准确推断。

统计学家和生物学家面临的诸多挑战包括数据采集、数据管理、数据转换、数据建模、组合不同数据源、利用不断发展的机器学习方法以及开发适合CBB的新建模策略。我们在应对这些挑战时强调了发展的透明度、再现性和效率。所有这些任务的根本是对软件的需求;仅凭想法无法解决出现的实质性问题。

统计基因组学开源计算环境的主要动机是透明性、追求再现性和开发效率。

透明度

CBB中的高通量方法极其复杂,将信息从低级信息结构(例如微阵列扫描图像)转换为与设计和协变量数据相结合的表达度量统计数据库涉及许多步骤。这是不可能的先验的最终分析对管道中许多步骤中的变化或错误有多敏感。这个领域的可信工作需要暴露整个过程。

追求再现性

分子生物学中的实验协议是用于创建特定物质或过程的成分和算法的完整列表。实验声明的准确性可以通过完全遵守协议进行检查。CBB中的算法工作应采用此标准。可移植的源代码应与每个已发布的分析以及分析所基于的数据一起提供。

发展效率

通过开发,我们不仅指特定计算资源的开发,还指整个CBB中计算方法的开发。感兴趣的研究人员可以阅读开源环境中的软件和数据资源,并可以进行修改和扩展以实现新的功能。新手可以将开放资源用作学习材料。当建立了良好的文档协议时,这尤其有效。因此,开源方法有助于招募和培训未来几代科学家和软件开发人员。

本文的其余部分致力于描述生物导体背后的计算科学方法。主要部分详细介绍了设计方法和具体的编码和部署方法,描述了具体的未解决挑战,并审查了局限性和未来目标。然后我们考虑了其他一些为CBB提供软件解决方案的开源项目,并以如何使用Bioconductor软件分析微阵列数据的示例结束。

结果和讨论

方法

我们采用的软件开发策略有几个先例。20世纪80年代中期,Richard Stallman启动了自由软件基金会和GNU项目[2]试图提供Unix操作系统的免费开放实现。该项目的主要动机之一是,对于计算科学的研究人员来说,“他们的创造/发现(软件)应可供每个人测试、证明、复制和工作,以推动进一步的科学创新”[]. 与Linux内核一起,GNU/Linux组合引发了我们今天所知的巨大开源运动。开源软件不再受到偏见的看待,它已经被主要的信息技术公司采用,并改变了我们对计算科学的思考方式。关于如何管理开源软件项目的大量文献:参见Hill[4]以获得良好的介绍和全面的参考书目。

Linux内核成功的关键因素之一是其模块化设计,它允许独立和并行开发代码[5]在虚拟分散网络中[]. 开发人员不在公司的层次结构中进行管理,而是直接负责项目的各个部分,并在必要时直接交互以构建复杂的系统[6]. 我们的组织和开发模型试图遵循这些原则,以及从R项目演变而来的原则[7,8].

在本节中,我们回顾了七个对建立科学开放源码软件项目很重要的主题,并从CBB的角度进行了讨论:语言选择、基础设施资源、设计策略和承诺、分布式开发和招募开发人员、外部资源的重用、,代码和文档的发布和许可。

语言选择

CBB带来了广泛的挑战,任何软件开发项目都需要考虑它将解决哪些具体方面。对于生物导体项目,我们希望首先关注生物信息学问题。特别是,我们对与DNA微阵列相关的数据管理和分析问题感兴趣。这种定位要求编程环境具有良好的数值功能、灵活的可视化功能、数据库访问以及广泛的统计和数学算法。我们与R的共同经验表明,它的一系列实施良好的统计和可视化工具将减少CBB健壮软件的开发和发布时间。我们还注意到,R在CBB社区中得到了广泛的应用,独立于生物导体项目。许多其他生物信息学项目和研究人员发现R是一种很好的语言和工具集。例如Spot系统[9],马诺瓦[10]和dChip[11]. 我们现在简要列举R软件环境的特性,这些特性是其选择背后的重要动机。

原型制作能力

R是一种高级解释语言,可以轻松快速地原型化新的计算方法。这些方法在解释的实现中可能无法快速运行,那些成功且得到广泛使用的方法通常需要重新实现才能运行得更快。这通常是一个很好的折衷方案;我们可以轻松探索许多概念,并为那些成功的概念投入更多精力。

包装协议

R环境包括一个完善的系统,用于将相关软件组件和文档打包在一起。该语言对以“包”形式创建、测试和分发软件提供了大量支持。使用软件包系统,我们可以开发不同的软件模块,并用协议遵从性、基于测试的验证、版本标识和软件包相互依赖性的明确概念分发它们。该打包系统已被世界各地数百名开发人员采用,并且位于综合R存档网络的核心,在该网络中,数百个独立但可互操作的包可以作为开放源代码下载,这些包解决了广泛的统计分析和可视化目标。

面向对象编程支持

CBB中问题的复杂性通常转化为需要许多不同的软件工具来解决单个问题。因此,许多软件包用于单个分析。为了确保可靠的包互操作性,我们采用了一种正式的面向对象编程规程,该规程编码在正式类和方法的“S4”系统中[12]. Bioconductor项目是S4学科的早期采用者,也是R的面向对象编程中许多改进(由John Chambers建立)的动机。

WWW连接

从在线来源获取数据是大多数CBB项目的重要组成部分。R有一套经过良好开发和测试的功能和包,可以访问不同的数据库和web资源(例如,通过http)。还有一个处理XML的包[13],可从Omegahat项目获得,以及SOAP客户端包的早期版本[14],SSOAP,也可从Omegahat项目获得。这些与Stein提出的建议非常一致[15]并帮助我们创建一个环境,让用户能够感受到各种数据、注释和分析资源的紧密集成。

统计模拟和建模支持

R提供的统计和数值算法包括随机数生成器和机器学习算法。这些都经过了很好的测试,并且是可靠的。生物导体项目已经能够以最小的努力使其适应CBB的要求。同样值得注意的是,基于参与生物导体项目的研究人员的工作,一些创新和扩展已经回流到这些包的作者身上。

可视化支持

R的优势之一是其数据和模型可视化功能。与R的许多其他领域一样,这些能力仍在不断发展。我们已经能够快速开发出绘制染色体位置基因的绘图,这是一种热图功能,以及许多其他图形工具。很明显,我们需要使这些绘图中的许多具有交互性,以便用户可以查询和浏览这些绘图,我们的未来计划也涉及到这些开发。

支持并发计算

R也是并行统计计算中突破性研究的基础。软件包,如远程虚拟机简化用于在Beowulf或类似的工作站计算集群上进行计算的便携式解释代码的开发。这些工具提供了简单的接口,允许通过在可能异构的机器上的并发R会话中的函数和环境上进行计算来进行并行计算的高级实验。这个包提供了一个更高级别的抽象,它独立于诸如消息传递接口(MPI)之类的通信技术[16]或并行虚拟机(PVM)[17]. 并行随机数生成[18]在集群中分布部分随机模拟时至关重要,由管理rsprng(rsprng)罗西尼更全面地描述了在R中编程并行过程的实际好处和问题等。[19]还有李和罗西尼[20].

社区

也许使用R最重要的方面是它的活跃用户和开发人员社区。这不是一种静态语言。R正在经历重大变革,专注于不断变化的科学计算技术领域。让生物学家了解这些创新,同时让那些参与统计计算的人了解CBB社区的需求,这是非常富有成效的,我们希望对这两个社区都有益。

基础设施基础

我们一开始就认为,在早期阶段,需要对软件基础设施进行大量投资。Bioconductor项目的前两年,在以可重用数据结构和软件/文档模块(R包)的形式开发基础设施方面付出了巨大努力。对可重用软件组件的关注与经常采用的一次性方法形成鲜明对比。在生物信息学问题的一次性解决方案中,编写代码以获得给定问题的答案。该代码的设计不是为了适应该问题的变化,也不是为了适应不同问题的应用,实际上可能只适用于最初应用该代码的特定数据集。希望进行类似分析的研究人员通常必须从头开始构建工具。在这种情况下,除非通过艰苦的改造,否则无法达到研究再现性的科学标准。我们希望重用、细化和扩展将成为生物信息学中与软件相关的主要活动。当可重用组件分布在一个可靠的平台上时,要求发布的新分析附带执行所有相关计算的便携式和开放式软件工具变得可行。这将有助于直接再现,并通过透明化改变或扩展新计算方法的方法来提高研究效率。

这里描述的软件基础架构概念的两个示例是exprSet(exprSet)的类博科生物包,以及各种Bioconductor元数据包,例如hgu95av2型.一个exprSet(exprSet)是一种数据结构,它将基于阵列的表达测量与协变量和微阵列集合的管理数据绑定在一起。基于R数据帧列表结构,exprSets(表达式集)为程序员和分析员进行基因筛选、构建基于注释的子集以及微阵列结果的其他操作提供了极大的便利。exprSet的设计促进了为新的微阵列平台提供分析工具的三层架构:通过exprSet结构将低级别数据桥接到高级别分析操作。低级处理软件的设计者可以专注于创建exprSet实例,而不需要考虑任何特定的分析数据结构表示。分析过程的设计者可以忽略低级结构和过程,直接对exprSet(exprSet)代表。该设计负责简化三个关键生物导体包的互操作:阿菲,结婚、和利马.

这个hgu95av2型该软件包是一个相关软件包的大型集合之一,这些软件包将制造的芯片组件与有关序列、基因功能、路径中的基因成员以及基因的物理和管理信息的生物元数据联系起来。该包包括许多传统命名的散列环境,提供基于探测命名法的元数据高性能检索,或基于元数据规范的探测名称组检索。这两种类型的信息(元数据和探测名称集)都可以与一起使用exprSets(表达式集):例如,探测名称向量立即用于提取命名探测的表达式值,因为exprSet(exprSet)结构继承了命名的提取容量R数据帧.

设计策略和承诺

设计良好的科学软件应降低数据复杂性,便于访问建模工具,并支持对不同级别的不同数据资源的集成访问。软件基础设施可以成为良好科学实践(其他人应该能够轻松复制实验结果)和创新的基础。

采用合同设计、面向对象编程、模块化、多尺度可执行文档和自动资源分配是Bioconductor项目采用的一些基本软件工程策略。

按合同设计

虽然我们没有采用正式的承包方法(例如,埃菲尔[21])在我们的编码学科中,收缩隐喻仍然有助于描述在Bioconductor中创建可互操作组件的方法。例如,考虑一下促进分析存储在关系数据库中的表达式数据的问题,其中的约束条件是,用户希望能够像处理任何exprSet一样处理数据,并且不希望在任何时候将不需要的记录复制到R中。从技术上讲,数据访问可以通过各种方式进行,使用数据库连接、DCOM[22]通信或CORBA[23],仅举几个例子。在合同设计专业中exprSet(exprSet)功能必须提供一组指定的功能。无论提供程序的代码返回什么对象,它都必须满足exprSets(表达式集)合同。除其他外,这意味着对象必须响应函数exprs和p数据对象分别满足R矩阵和数据帧契约。由此可见快递(x个)【i,j】例如,将返回编码表达式级别的数字th基因j个对象中的第个采样x个,无论x个.在这里j个无需表示数值指标,但可以保存任何适合通过平方拍算子查询矩阵的向量。合同义务的满足简化了分析过程的规范,编写分析过程时可以不考虑exprSet信息的底层表示。

R开发的一个基本主题是简化开发人员陈述、遵循和验证此类设计合同满意度的方法。支持以最少的重新编码在相关类之间方便地继承行为的环境功能在这一学科中非常重要。

面向对象编程

面向对象编程方法有多种方法。我们鼓励但不要求在Bioconductor软件中使用所谓的S4正式类和方法系统。S4对象范式(主要由Chambers定义[12]R)中包含的修改与Common Lisp类似[24]和迪伦[25]. 在这个系统中,类被定义为具有指定的结构(根据一组类型化的“槽”)和继承关系,方法被定义为通用的(用于指定基本契约和行为)和专用的(用于满足特定类的对象)。可以为打算实例化给定类的对象提供约束,并且可以检查对象是否符合合同要求。S4系统是合同专业进行设计的基本工具,已被证明非常有效。

模块化

软件应该设计为一个交互模块系统的概念已经相当成熟。模块化可以发生在系统结构的各个级别。我们力求在数据结构、R功能和R包级别实现模块化。这意味着数据结构被设计成拥有最少的内容,以便在高效编程中发挥有意义的作用。这个表达式集例如,结构包含有关表达式级别的信息(快递插槽),可变性(se.exprs软件),协变量数据(现象数据插槽)和几种类型的元数据(插槽描述,注释笔记). 协变量数据与表达式数据的紧密绑定使开发人员无需分别跟踪这两种类型的信息。这个exprSet(exprSet)结构明确排除了与基因相关的注释信息(如基因符号或染色体位置),因为这些信息具有潜在的不稳定性,并且在许多涉及exprSets(表达式集)R功能级的模块化意味着编写功能是为了完成一项有意义的任务,而不是完成更多的任务,并且在功能级可以使用文档(帮助页面)和示例。这简化了调试和测试。包级别的模块化要求所有包都包含足够的功能和文档,以便与大多数其他包隔离使用和理解。例外情况正式编码在随包分发的文件中。

多尺度和可执行文档

准确和彻底的文档是有效软件开发和使用的基础,必须以统一的方式创建和维护,才能产生最大的影响。我们从R继承了一个强大的系统,以面向功能的手册页面中的可执行示例部分的形式进行小规模文档和单元测试。我们还引入了大规模文档的新概念渐晕概念。Vignette超越了典型的手册页文档,通常侧重于记录一个函数或一组函数的行为。想定案例的目的是详细描述执行特定任务所需的处理步骤,该任务通常涉及多个功能,可能涉及多个包。软件包的用户可以交互式访问与该软件包关联的所有想定案例。

这个Sweave公司系统[26]用于创建和处理渐晕图。一旦编写完成,用户就可以在不同的级别上与它们进行交互。转换后的文档以Adobe的可移植文档格式(PDF)提供,并且可以通过工具包裹。然而,新用户需要更简单的界面。我们在这方面的第一个产品是vignette explorervExplorer(虚拟资源管理器)它提供了一个小部件,可用于导航各种代码块。每个块都与一个按钮关联,代码显示在小部件内的窗口中。当用户单击按钮时,将对代码进行评估,并在第二个窗口中显示输出。其他按钮提供其他功能,例如访问文档的PDF版本。我们计划在未来几年内大幅扩展该工具,并将其与研究紧密结合到可重复研究中(参见[27](如图所示)。

自动化软件分发

模块化承诺给习惯于集成“端到端”环境的用户带来了成本。Bioconductor的用户需要熟悉大量软件包的存在和功能。为了降低这一成本,我们扩展了R/CRAN的打包基础设施,以更好地支持在用户级别部署和管理包。Bioconductor中的repoTools软件包提供了一些功能,包括在有新版本可用时自动更新软件包,以及自动获得所有软件包依赖项的工具。请注意,R包装设计和分发中的新方法包括为所有包装提供MD5校验和,以帮助验证包装内容在运输过程中没有更改。

总之,这些工程承诺和开发为CBB带来了一套相当协调的工具。值得考虑的是,S语言中“一切都是物体”的概念是如何影响我们的方法的。我们在致力于契约化和面向对象编程以及资源的自动分配中使用了这个概念,其中包目录和生物元数据都是直接的R对象。包和文档还不能作为R对象处理,这会导致复杂性。我们正在积极研究方法,以简化在具有允许符号重用的名称空间的多包环境中编写和使用文档的过程,并加强会话图像和正在使用的包清单之间的连接,以便在会话关闭时将保存的R图像准确恢复到其功能状态。

分布式开发和开发人员招聘

分布式开发是一个过程,通过这个过程,地理位置上相隔甚远的个人可以生成和扩展软件项目。R项目已使用该方法约10年。在这种情况下,这是必要的,因为目前没有任何机构在这一领域拥有足够数量的研究人员来支持如此规模的项目。分布式开发有助于包含各种观点和经验。项目外部个人的贡献导致了核心开发团队的扩张。核心成员资格取决于开发人员是否愿意采用共同的目标和方法,是否愿意淹没个人目标,而不是为更大的科学社区创建软件。

分布式开发需要使用工具和策略,这些工具和策略允许不同的程序员几乎同时在项目的相同组件上工作。更重要的需求之一是共享代码库(或存档),项目的所有成员都可以通过某种形式的版本管理系统访问和修改。我们采用了并发版本系统[28,29]并在此系统中创建了一个中心档案,团队所有成员都可以访问。

需要额外的规程来确保一个程序员的更改不会导致系统中其他代码的失败。在R语言中,软件组件自然地被分成包,包结构和内容的正式协议在R Extensions手册中指定[30]. 每个方案都应该代表一个连贯的主题。通过使用定义良好的应用程序编程接口(API),包的开发人员可以自由修改其内部结构,只要他们继续提供文档化的输出。

我们依赖R包测试系统支持的测试机制[30]确保连贯、非倒退的发展。每个开发人员都负责记录所有函数,并提供示例和可能测试代码的其他脚本或命令集。每个开发人员都有责任确保在将更改提交回中央存档之前,所有测试都能成功运行。因此,知道代码的人最好地编写测试程序,但所有人都有责任运行这些程序,并确保他们所做的更改不会影响其他人的代码。在某些情况下,一个作者的更改将需要更改其他作者的代码和测试。在我们使用的系统中,这些情况在开发过程中发生时会被检测和处理,从而减少了来自现场的错误报告的频率。

开发团队成员通过私人邮件列表进行交流。在许多情况下,他们还使用私人电子邮件、电话和会议,以便参与联合项目并随时了解其他成员的想法。

外源资源的再利用

我们现在提出了三个论点,支持使用和改编其他项目的软件,而不是重新实现或重新发明功能。我们考虑的第一个论点是,编写好的软件是一个具有挑战性的问题,如果可能的话,应该避免重新实现现有算法。与新的未经测试的方法相比,应该优先使用已被证明并被充分理解的标准工具和范例。所有软件都包含错误,但使用和维护良好的软件往往包含更少的错误。

第二个论点是,CBB是一个巨大的领域,这一进展需要许多项目和软件开发人员的协调努力。因此,我们需要结构化的范例来访问用其他语言和系统编写的数据和算法。此功能的结构和集成程度越高,使用起来就越容易,因此使用起来也就越多。作为具体示例,我们考虑了我们最近开发的用于处理图形或网络结构的工具。生物导体中有三个主要的与图形交互的包。他们是图表,苏格兰皇家银行Rgraphviz公司第一个提供了用于处理R中的图的类描述和基本基础结构,第二个提供了对图的算法的访问,第三个提供了丰富的图布局算法集合。这个图表这个项目的包是从头开始编写的,但其他两个是其他软件项目BOOST创建的丰富软件例程库的接口[31,32]和格拉夫维兹[23]这两个项目都是具有大型代码库的非常重要的项目。我们对复制这项工作没有兴趣,只要可能,我们只会访问其他项目生成的函数和库。

这种方法对我们和其他项目都有很多好处。对于生物信息学和计算生物学,我们可以快速访问各种图形算法,包括图形布局和遍历。这些社区中的开发人员获得了一个新的用户基础和一组他们可以考虑的新问题。获得一个新的用户群通常非常有用,因为有着以前意想不到的需求的新用户往往会暴露出设计和实现中的弱点,而更复杂或更有经验的用户往往能够避免这些弱点。

同样,我们计划发展和鼓励与其他项目的合作,包括通过开放生物信息学基金会和国际互操作性联盟组织的项目。到目前为止,我们没有特别关注合作,部分原因是我们选择了与这些项目提供的工具没有明显重叠的发展领域。在这种情况下,我们的理念仍然是开发与这些项目提供的软件的接口,而不是重新完成他们的工作。在某些情况下,其他项目已经认识到合作的潜在收益,并已开始为我们开发与其系统的接口,以期为未来做出贡献[33].

支持标准化和重用现有工具的另一个论点最好参考一个具体示例。考虑一下标记和标记语言的主题。对于任何特定的问题,都可以快速设计出一个足以解决该问题的标记。那么我们为什么要采用XML这样的标准呢?这种选择的原因之一是熟悉该范式的程序员的可用性,因此培训成本较低。第二个原因是XML社区正在增长和发展,我们将在不必启动的情况下获得实质性的技术改进。这并不罕见。计算研究的其他领域与CBB一样充满活力,通过协调和分享想法和创新,我们简化了自己的任务,同时为这些其他领域提供了激励。

代码的发布和许可

现代科学出版标准包括同行评审和随后在期刊上发表。软件发布是一个稍有不同的过程,到目前为止,只有有限的正式同行评审或官方期刊发布参与。我们以开源许可证发布软件,作为我们的主要发布方式。我们这样做是希望它将鼓励重复性、扩展性和普遍遵守科学方法。这一决定还确保了该准则向公众公开审查和评论。决定在开放源代码许可证下发布软件还有许多其他原因,表中列出了其中一些原因1.

表1决定根据开源许可发布软件的原因

在确定发布形式时,另一个考虑因素是需要允许我们自己的软件具有进化方面。我们有很多理由采取一种战略,使我们能够随着时间的推移扩展和改进我们的软件产品。CBB领域相对不稳定,随着新技术的发展,需要新的软件和推断方法。此外,软件技术本身也在发展。因此,我们希望有一个发布策略,能够适应不同级别的软件更改。我们希望,该战略还将鼓励我们的用户将软件技术视为一个动态领域,而不是静态领域,因此,我们将关注这一领域以及更传统的生物领域的创新。

我们决定以R包的形式发布软件是这一考虑的重要部分。包很容易分发,它们有版本号并定义了一个API。每年两次协调发布所有Bioconductor包。在任何时候,每个包都有一个发布版本和一个开发版本。唯一允许对发布版本进行的更改是错误修复和文档改进。这确保了用户不会在发布版本中获得的代码中遇到激进的新行为。所有其他更改(如增强或设计更改)都在开发分支上执行[34].

在发布前大约六周,我们会做出重大努力,以确保开发分支上的所有包都得到协调,并能很好地协同工作。在此期间,通过对生物导体芯进行同行审查,进行了广泛的测试。在发布时,开发分支中包含在发布更改模式中的所有包现在都是已发布的包。这些包的早期版本被弃用,取而代之的是新发布的版本。同时,创建了一个新的开发分支,开发人员开始在新分支中处理包。请注意,这些与版本相关的管理操作对开发人员几乎没有影响。发布管理器负责包快照和文件版本修改。开发人员的源代码库相当简单,不需要保留任何源代码文件的多个副本,即使有两个版本始终处于活动状态。

我们还想指出,有一些令人信服的论据支持为软件开发和部署选择不同的范例。在这个关键时刻,我们并不是试图说服其他人以这种方式分发软件,而是阐明我们的观点和我们做出选择的原因。在不同的条件下,或在不同的目标下,我们很可能会选择不同的模式。

特别关注事项

我们现在考虑计算生物学和生物信息学研究提出的四个具体挑战:再现性、数据进化和复杂性、培训用户和响应用户需求。

可复制研究

我们希望解决CBB已发表作品的再现性问题。再现性本身就很重要,是科学发现的标准。再现性是渐进改进或细化过程中的一个重要步骤。在大多数科学领域,研究人员不断改进和扩展其他领域的结果,但对于科学计算来说,这通常是例外,而不是规则。

Buckheit和Donoho[35]指的是克莱尔伯特的工作和哲学,陈述以下原则:“科学出版物中关于计算科学的文章不是学术本身,它只是学术的广告。实际的学术是完整的软件开发环境和生成数字的完整指令集。”

让作者不仅发布他们作品的广告,而且发布作品本身,这将带来巨大的好处。从根本上改变计算科学出版从学术广告到学术本身的范式将是一个受欢迎的补充。在这方面可以使用的一些概念和工具包含在[36,37].

当试图根据已发布的描述重新实施计算方法时,会遇到许多困难。施瓦布等。[38]提出以下几点:

“事实上,只要使用传统的科学出版方法来描述计算研究,问题就会出现。在一篇传统的文章中,作者仅概述了相关的计算:纸介质的局限性禁止完整的文档,包括实验数据、参数值和作者的程序。对比因此,读者必须痛苦地重新完成作者的作品,然后才能验证和利用它……读者必须花费宝贵的时间,仅仅是重新发现作者无法方便交流的细节。"

开发一个能够支持CBB可再生研究的方便创建和分发的系统是一项艰巨的任务。然而,生物导体项目采用了有助于部分实现可再生CBB的实践和标准。

发表文章来源的数据正在成为CBB的规范。这种做法提供了可复制研究所需的一个组成部分——数据访问。需要的另一个主要组成部分是访问软件以及用于转换数据以提供论文结论所依据的输出的一组明确的指令或命令。在这方面,CBB的出版不太成功。很容易在最负盛名的期刊上找到主要的出版物,这些出版物对基本结论背后的计算和推理过程进行了粗略或难以理解的描述。如果保存在公共档案中的数据附带可移植代码和脚本,这些代码和脚本可以重新生成文章的图形和表格,则可以消除此问题。

R成熟的平台独立性与Bioconductor的包装和文档标准相结合,形成了一个系统,在该系统中,使用工作代码和脚本分发数据可以实现CBB中可复制和可重复研究的大部分要求。创建表格或图形的步骤可以在Swave文档中清楚地显示出来。R用户可以导出代码以进行修改或重放参数设置的变化,以检查报告计算的稳健性或探索其他分析概念。

因此,我们相信R和Bioconductor可以为CBB的普遍可再生研究提供一个起点。R中用于支持可重播性和远程鲁棒性分析的基础设施可以用其他语言实现,例如Perl[39]和Python[40]. 所需要的只是一些平台相关的格式,用于将定义分析的数据、软件和脚本绑定在一起,以及一个可以自动呈现为分析步骤及其结果的易读帐户的文档。如果格式是R包,那么这个包就构成了一个可分发的软件元素,它体现了正在发布的计算科学。这正是所支持的纲要概念[36].

生物注释动力学

元数据是关于数据的数据,其定义取决于研究人员的观点。一个研究人员的元数据很可能是另一个研究者的实验数据。我们将考虑两大挑战。首先是元数据的演化性质。随着新的实验的完成,以及我们对所涉及的生物过程的理解,元数据的变化和发展也在增加。元数据数据的第二个主要问题是其复杂性。我们正在努力开发软件工具,使数据分析师和研究人员更容易适当地使用现有的元数据。

元数据的不断更改和更新表明,我们必须有一个系统或收集过程,以确保任何元数据都可以更新,并且可以分发更新。我们系统的用户需要访问最新版本。我们的解决方案是将元数据放入R包中。这些包是使用半自动过程构建的[41]并使用在回购工具包裹。有一种自然的方法可以应用版本号,这样用户可以确定其数据是否是最新的,或者在必要时可以获取旧版本以验证特定分析。此外,用户可以根据构建元数据包的数据源的通用版本同步各种元数据包。

自动化构建数据包的过程有许多优点。首先,模块在某种程度上是统一的,如果包是人工编写的,这是不可能的。这意味着该技术的用户只需熟悉一个软件包即可熟悉所有此类软件包。其次,我们可以快速创建许多包。因此节省了大量劳动力。对于微阵列分析,所有数据包应具有相同的信息(染色体位置、基因本体类别等)。两个软件包之间的唯一区别是,每个软件包只引用了被检测的特定基因集(探针)。这意味着数据分析师可以轻松地从一种芯片切换到另一种芯片。这也意味着我们可以开发一套用于操作元数据的工具,并且所有用户都可以立即获得这些工具的改进。用户可以自由地使用来自其他潜在专有源的数据扩展数据包。

用我们处理软件的相同方式处理数据也有很多优点。在服务器端,我们可以使用相同的软件分发工具,通过版本编号指示更新和改进。在客户端,用户无需了解数据包的存储或内部详细信息。他们只是像安装其他软件包一样安装它们,然后使用它们。

经常出现的一个问题是,人们是否应该仅仅依赖在线资源来获取元数据。也就是说,给定一个标识符,用户可以通过查询相应的数据库来获取更多最新信息。我们建议的数据包不能是最新的。然而,在线访问所有资源的方法有一些缺点。首先,用户并不总是在线的,他们并不总是知道所有适用的信息源,而且亲自获取此类信息的投资可能很高。由于网络资源的所有者可以随意更新和修改他们的产品,因此也存在着难以解决的重复性问题。如果数据以web服务格式提供,那么这些困难中的一些(但不是全部)可以得到缓解。

在这种情况下,另一个支持我们方法的论点是,它允许构建数据包的人合并来自多个来源的不同信息。在为Bioconductor构建元数据包时,我们发现一些数据可以从不同来源获得,在这种情况下,如果可能的话,我们会寻求共识。该过程相当复杂,详见AnnBuilder公司包装和纸张[41].

培训

CBB的大多数项目都需要结合生物学、计算机科学和统计学的技能。由于这是一个新领域,而且在这一领域几乎没有专门的培训,因此,关注培训似乎会带来一些实质性的好处。从生物导体项目的角度来看,我们的许多潜在用户不熟悉R语言,通常在科学上更倾向于一个学科,而不是三个学科。因此,我们必须为所有人都可以访问的软件模块制作文档。我们对此采取了两方面的方法,我们针对所有组成学科开发了大量的课程材料,并且我们开发了一个系统,以小插曲的形式,更广泛地说,以具有动态内容的可导航文档的形式,交互使用软件和文档。

在过去的两到三年里,课程材料得到了发展和完善。生物导体开发团队的几个成员已经教授了课程,并根据成功和反馈对材料进行了改进。开发的材料是模块化的,并且是自由分发的,尽管对出版有限制。材料的重点是介绍和使用作为Bioconductor项目一部分开发的软件,但这不是一项要求,仅仅反映了我们自己的特定目的和目标。

在这一领域,我们认为,我们将从那些在技术文档创作方面有更多经验的人的贡献中受益匪浅。可能有一些战略、概念和方法是该领域的标准实践,但我们基本上不知道。然而,在短期内,我们依靠学生、同事和生物导体系统的用户来指导我们,我们希望许多人能做出贡献。其他人可以很容易地做出重大贡献,即使是那些几乎没有编程技能的人。所需要的是一个感兴趣领域的领域知识,以及对需要其他感兴趣领域额外领域知识的问题的识别。

我们的经验是,许多新用户经常将自己转变为开发人员。因此,我们的培训材料和文档的开发也需要关注这一群体的需求。软件组件的数量远远超出了我们的生产能力。吸引他人合作编写软件对成功至关重要。

响应用户需求

任何软件项目的成功都取决于它既能为所解决的问题提供解决方案,又能吸引用户社区。也许解决用户需求的最有效方法是通过电子邮件帮助列表,并且在项目激活后立即建立一个帮助列表。此外,重要的是要保持可搜索的存档可用,以便系统本身有内存,并且可以向新用户咨询常见问题的答案。同样重要的是,项目成员通过这个公共论坛处理错误报告和功能请求,因为它既传播了他们的意图,也提供了讨论的公共记录。我们的邮件列表(mailto:bioconductor@stat.math.ethz.ch)取得了成功:每年约有800个订户和3000封电子邮件。

吸引用户社区本身需要一种分发软件和提供足够培训材料的方法,以允许潜在用户探索系统并确定它是否足以满足其目的。另一种方法是开发一个图形用户界面(GUI),使与系统的交互具有足够的自解释性,而不需要文档。我们注意到,此解决方案通常更适用于底层软件任务定义明确且众所周知的情况。在本例中,软件需求(以及统计和生物需求)在不断发展。R主要面向命令行,我们选择至少在最初几年的开发中遵循这种模式。当然,我们欢迎那些以GUI开发为目标的人,并与他们合作,但我们自己在这一领域的尝试仅限于生产一些小部件,这些小部件可以在特定点促进用户交互。

用户在下载和安装R和Bioconductor模块时遇到困难。其中一些困难是由于用户的本地环境(防火墙和缺乏对互联网的直接访问)造成的,还有一些是由于我们的软件出现问题(bug),部分原因是通常很难充分测试通过互联网进行交互的软件。然而,我们设法帮助每个愿意坚持的用户正确安装R和Bioconductor。我们必须克服的另一个重大困难是开发一个系统,该系统不仅允许用户下载他们知道自己想要的软件包,而且还允许用户同时下载它所依赖的所有其他软件包。与R和R软件包系统的大多数其他用途相比,使用Bioconductor软件对软件包(包括提供机器学习、生物元数据和实验数据的软件包)的相互依赖性要大得多。reposTools包包含许多处理这些任务所需的基础设施。它是一组用于处理R包存储库的功能,这些存储库基本上是R包集合的互联网位置。

一旦安装了基本软件,用户将需要访问文档,如上面描述的培训材料和其他材料,如上一节中描述的小插曲。如果用户可以很容易地获得示例并在自己的计算机上运行,那么这些材料是最有价值的。我们注意到这一问题与可重复研究一节中描述的问题明显相似。再一次,我们正处于一个愉快的状态,即拥有一个可以服务于两个目的的范式和工具。

其他开源生物信息学软件项目

开放生物信息学基金会支持类似于生物导体的项目,这些项目名义上植根于特定的编程语言。BioPerl公司[42],生物巨蟒[43]和BioJava[44]是基于开源语言的生物信息学项目的突出例子。Stajich及其同事清楚地描述了BioPerl项目的意图和设计方法[45].

BioPerl公司

在本节中,我们将讨论BioPerl和Bioconductor之间的共性和差异。这两个项目都致力于开放源码分发和基于社区的开发,由一批确定的核心开发人员执行项目的主要设计和维护任务。这两个项目都使用面向对象的编程方法,目的是抽象生物信息学中计算工作流的关键结构和功能特征,并定义稳定的应用程序编程接口(API),向不需要了解这些接口的人隐藏实现细节。这些工具包基于高度可移植的编程语言。这些语言拥有为非生物信息目的开发的大量软件资源。R(综合R存档网络,CRAN)和Perl(综合Perl存档网络,CPAN)的存储库提供了对各种工作流元素的结构化软件模块和文档集合的镜像WWW访问。针对软件重用的开发方法可以通过建立与现有CPAN或CRAN过程的接口而不是重新实现这些过程来实现生产力的大幅提高。为了成功地进行重用,外部资源的维护者必须致力于资源API的稳定性。这种稳定性往往是广泛使用的模块的标准。最后,这两种语言都有相当大的互操作性基础设施。这意味着每个项目都可以使用用无关语言编写的软件。R具有与Perl、Python、Java和C的良好接口。R的API允许从其他语言调用R中的软件RSPerl公司包装[46]便于从Perl直接调用R。因此,Bioconductor和BioPerl开发人员和用户有很多机会共生使用代码。下面的脚本说明了BioPerl在R中的使用。

>库(RSPerl)

> .PerlPackage(“Bio::Perl”)

>x<-。Perl(“get_sequence”,“swiss”,

“ROA1_HUMAN”)

>x$division()

[1] “人类”

>x$附加()

[1] “P09651”

>未列出(x$get_keywords())

[1] “核蛋白”“RNA-结合”

[3] “重复”“核糖核蛋白”

[5] “甲基化”“转运”

...

这个。PerlPackage命令将BioPerl模块纳入范围。Perl使用参数“swiss”和“ROA1_HUMAN”调用BioPerl get_sequence子例程。生成的R对象是对perl哈希的引用。RSPerl基础结构允许通过$操作符查询散列。请注意RSPerl公司不是Bioconductor支持的实用程序,并且安装BioPerl和RSPerl公司允许互操作的资源可能很复杂。

Bioconder和BioPerl项目之间的主要区别涉及范围、分发方法、文档和测试,以及面向对象设计的重要细节。

范围

BioPerl显然倾向于处理序列数据和与序列数据库接口,支持序列可视化和查询外部注释。生物导体倾向于微阵列实验的统计分析,主要关注阵列预处理、质量控制、阵列内和阵列间规范化、协变量和设计数据与表达数据的绑定,以及生物学和临床问题的下游推断。Bioconductor的软件包专门用于各种微阵列制造和分析范式以及计算生物学中感兴趣的其他高通量分析,包括基因表达序列分析(SAGE)、阵列比较基因组杂交(arrayCGH)和蛋白质组飞行时间(SELDI-TOF)数据。我们说这些项目“倾向于”这些担忧,因为很明显,这两个项目最终都旨在支持计算生物学的一般研究活动。

分发、文档和测试

BioPerl继承了CPAN支持的分发范式。软件模块可以通过交互方式获取和安装,例如perl-MCPAN-e外壳。此过程支持自动检索请求的包和依赖项,但不由运行时事件触发。Bioconductor扩展了CRAN分发功能,以便可以根据计算请求“及时”获得和安装软件包。对于Perl和R,软件模块和包都是文件的结构化集合,其中一些是源代码,一些是关于代码的文档。在Bioconductor中,文档和测试之间的关系比在BioPerl中更紧密。Bioconductor中的手册页和小插曲包括可执行代码。手册页或小插曲中的代码故障属于质量控制事件;在手册页面中试验可执行代码(通过R的示例函数)对于学习软件行为很有用。在Perl中,测试占用单独的程序,通常不与文档集成。

面向对象过程的详细信息

R和Perl都是可扩展的计算机语言。因此,可以以两种语言的不同方式引入支持不同面向对象编程(OOP)方法的软件基础设施。

R的核心开发人员在R中提供了两种不同的OOP方法。这些方法被命名为S3和S4。在S3中,只要将类名设置为对象类属性的值,就可以将任何对象分配给类(或类序列)。类层次结构是在对象级别隐式定义的。泛型方法定义为普通函数,特定于类的方法根据作为参数传递的对象的类进行调度。在S4中,支持类结构的形式化定义,并在类定义中显式定义类层次结构[12]. 类实例是显式构造的,并在构造时进行验证。泛型方法是非标准的R函数,泛型方法的元数据是在包级别建立的。具体方法根据参数列表的类签名进行调度(多次调度)。总的来说,S4中体现的OOP方法更接近Dylan或Scheme,而不是C++或Java。生物导体不需要特定的OOP方法,但鼓励使用S4,核心成员为R中S4 OOP方法的文档编制和测试提供了特殊工具。

Perl中的OOP方法有着悠久的历史,在BioPerl中得到了广泛的应用。Perl中OOP的基本方法似乎更像S3而不是S4,因为Perl的祝福操作可以将任何Perl数据实例与任何类关联。CPAN类::Multimethod模块可以用于允许通用子例程的多个调度行为。BioPerl中标识的特定对象类针对序列数据(例如Seq、LocatableSeq、RelSegment)、位置数据(Simple、Split、Fuzzy)和一类重要的对象,称为接口对象,这些对象是名称以“I”结尾的类。这些对象定义了可以对指定类的对象调用哪些方法,但不实现任何方法。

BioJava、BioPython、GMOD和MOBY

其他开放式生物信息学项目的意图和方法与生物导体项目密切相关。

生物爪哇[44]提供了Dazzle,这是一个支持分布式注释系统规范的servlet框架,用于共享序列数据和元数据。BioJava版本1.4包括用于通用字母和符号列表处理的java类、用于解析爆炸相关分析输出的工具,以及用于构建和拟合隐藏马尔可夫模型的软件。原则上,这些资源中的任何一种都可以通过萨瓦瓦接口[46].

生物巨蟒[43]提供了通过解析各种对齐或聚类算法的输出来构建python对象的软件,以及用于各种下游任务(包括分类)的软件。BioPython还提供了将可并行化任务分解为可分离进程的基础设施,以便在工作站集群上进行计算。

通用模型生物数据库(GMOD)项目旨在构建可重复使用的组件,这些组件可用于成功创建开放且可广泛访问的模型生物(例如,蠕虫、果蝇和酵母)数据库。研究的主要任务是基因组可视化和注释、文献管理、生物本体活动、基因表达分析和通路可视化和注释。

生物MOBY[47]提供了一个框架,用于开发和编目与分子生物学和基因组学相关的web服务。基本目标是提供数据、注释或分析服务的中央注册中心,这些服务可以通过编程方式用于发布和使用与各种生物环境相关的数据和注释资源。

随着这些不同项目的成熟,特别是在互操作性方面,我们希望向Bioconductor添加基础设施,以简化统计数据分析中这些资源的使用。我们希望R和Bioconductor对互操作性的承诺使其他语言的开发人员能够重用R中已经存在和测试的统计和可视化软件。

使用生物导体(示例)

Bioconductor项目的成果包括在[1]. 我们通过对来自白血病研究的微阵列档案的具体分析描述了软件和注释数据的使用。

急性淋巴细胞白血病(ALL)是一种常见且难以治疗的恶性肿瘤,其治疗结果存在很大差异。一些ALL患者有明确的染色体畸变特征,这些畸变的功能后果尚不完全清楚。利用生物导体工具对具有两种特殊形式染色体易位的ALL患者之间的基因表达对比进行了新的表征。Bioconductor完成的最重要的任务是使用简单易用的工具对数百个微阵列进行最先进的标准化,将与详细协变量数据绑定的标准化表达数据进行清晰的图表化,灵活的基因和样本过滤方法,以支持深入到可管理和可解释的子集,用于探索和交流基因组发现的灵活可视化技术,以及表达平台元数据和生物注释数据之间的编程连接,支持方便的功能解释。我们将通过实际命令/输出序列的转录来说明这些。这里概述的一些处理和分析活动的更详细版本可以在GOstats公司包裹。

数据集来自达纳法伯癌症研究所的里兹实验室[48]. 它包含128名ALL患者的数据。将比较两个亚组。第一组由4号染色体和11号染色体(标记为ALL1/AF4)之间易位的患者组成。第二组由9号染色体和22号染色体(标记为BCR/ABL)之间易位的患者组成。这些条件在此数据集中是互斥的。

使用Affymetrix HGu95Av2平台,使用全球气候变化评估来自阿菲包裹。它的输出是类的对象exprSet(exprSet)可以用作其他功能的输入。包裹hgu95av2型提供生物元数据,包括从Affymetrix标识符到GO的映射、染色体位置等。这些数据当然可以从许多其他来源获得,但将其作为R包有一些优点。

加载适当的包后,我们首先将ALL子集exprSet(exprSet)用感兴趣的协变量提取这些样本。The design of the表达式集类包含用于同时设置case和probe的方法。通过对ALL使用平方拍表示法,我们导出了一个新的exprSet(exprSet)只有所需患者的数据。

>数据(“ALL”)

>eset<-ALL[,ALL$mol%(%)

c(“BCR/ABL”,“ALL1/AF4”)]

接下来,我们发现ALL1/AF4和BCR/ABL组之间差异表达的基因。我们使用函数lmFit(最小匹配)来自利马软件包,可以同时评估许多不同组和条件之间的差异表达。功能lmFit(最小匹配)接受描述实验设计的模型矩阵并生成类的输出对象M阵列LM存储每个基因的拟合模型信息。拟合的模型对象由eBayes公司为每个基因生成经验贝叶斯测试统计数据的功能,包括调节t吨-统计数据,第页-微分表达式的值和log-odds。日志2-折叠变化、平均强度和Holm调整第页-显示了前10个基因的值(图1).

图1
图1

ALL数据的边缘分析。最左边的数字是行索引,ID是Affymetrix HGU95av2登录号,M是表达式的对数比,A是对数平均表达式,B是差异表达式的对数比值。

我们选择那些已经调整的基因第页-值低于0.05。多重比较的默认调整方法使用Holm的方法来控制家庭错误率。我们可以使用一种不太保守的方法,例如错误发现率,multtest包提供了其他可能性,但对于本例,我们将使用非常严格的Holm方法来选择少量基因。

>选择<-p.adjust(适合$p.value[,2])

< 0.05

>esetSel<-重置[已选择,]

选择165个基因进行进一步分析。通过R的热图功能生成的热图,我们可以可视化这两组患者之间这些基因的差异作用。请注意,如何集成不同的软件模块以提供非常丰富的数据分析环境。2清楚地表明,这两个组可以根据基因表达进行区分。

图2
图2

ALL白血病数据的热图(由Bioconductor函数heatmap()生成)。

我们可以进行许多其他测试,例如,在那些被调节的基因中,编码在特定染色体上(或可能编码在特定的染色体上)的基因是否过度表达t吨-测试。这些问题中的许多通常是以超几何分布来解决的,但它们也可以被认为是双向或多向表,并且可以对结果数据应用替代统计检验(所有这些都可以在R中找到)。

我们简要地将注意力转向基因本体论(GO)注释与这些数据的结合使用。我们首先在选定的Affymetrix探测器中确定一组唯一的LocusLink标识符。功能GOHyperG公司在中找到GOstats公司包裹。它对我们为GO图中由这些基因诱导的每个术语选择的基因列表中过多的基因进行超几何检验(图).

图3
图3

图1所示分析中所选基因的分子功能富集超几何分析。

最小的第页-发现的值为1.1e-8,对应于术语“MHC II类受体活性”。我们看到,在带有GO注释的12个基因中,有6个被选中。如果我们使用稍微保守的基因选择方法,那么GO注释中所选基因的数量会更高。

对于任何其他有注释包的物种或芯片,复制上述结果几乎不需要更改代码。分析员只需要替换对数据包的引用,hgu95av2型,与那些用于其数组的基本原理和代码保持不变。

同样,由于数据分析师可以访问完整的源代码,因此可以替换其他算法或统计测试。所有工具都可以在源代码级别进行修改,以满足本地要求。

结论

我们详细介绍了Bioconductor项目所采用的软件开发方法。Bioconductor已经运行了大约三年,在那时它已经成为CBB的一个重要软件项目。我们认为这个项目的成功是由许多因素造成的。这些包括选择R作为主要开发语言,采用软件设计的标准实践,以及相信创建软件基础设施是这种规模的成功项目的重要和基本组成部分。

群体动态也是生物导体成功的一个重要因素。愿意共同努力,确保软件开发中的合作与协调为开发人员和用户带来实质性利益,鼓励其他人加入并为项目做出贡献,也是我们成功的主要因素。

迄今为止,该项目提供了以下资源:用于获取软件、数据和元数据、论文和培训材料的在线存储库;协调软件战略和开发讨论的开发团队;提供软件测试、改进建议和自助服务的用户社区;80多个软件包、数百个元数据包和多个实验数据包。

在这一点上,值得考虑未来。虽然我们开发的许多软件包都是针对特定问题的,但还有一些是为了支持未来的发展而设计的。这个未来看起来很有趣。我们在CBB中遇到的许多新问题都不容易通过技术转让解决,而是需要新的统计方法和软件工具。我们希望我们能够鼓励更多的统计学家参与这一领域的研究,并使他们自己和他们的研究适应这一领域所必需的方法论和软件开发的混合。

总之,我们想指出的是,生物导体项目有许多开发人员,并非所有开发人员都是本文的作者,他们都有自己的目标和目的。这里提出的观点不是为了全面或规定性的,而是为了展示我们的集体经验和作者的共同目标。在一个非常简化的版本中,可以从以下观点对这些进行总结:协调的合作软件开发是促进CBB良好研究的适当机制。

工具书类

  1. 生物导体。[http://www.bioconductor.org]

  2. GNU操作系统-自由软件基金会。[网址:http://www.gnu.org]

  3. Dafermos GN:管理和虚拟分散网络:Linux项目。第一个星期一。2001, 6 (11): [http://www.firstmonday.org/issues/issue6_11/daferms/index.html]

    谷歌学者 

  4. 自由软件项目管理HOWTO。[http://www.tldp.org/HOWTO/Software-Proj-Mgmt-HOWTO]

  5. 托瓦尔兹L:Linux的边缘。通信协会计算机械。1999, 42: 38-39. 10.1145/299157.299165.

    谷歌学者 

  6. 雷蒙德·ES:大教堂和集市。第一个星期一。1998年,3(3):[http://www.firstmonday.org/issues/issue3_3/raymond/index.html]

    谷歌学者 

  7. R开发核心团队:R:统计计算的语言和环境。奥地利维也纳:R统计计算基金会。2003

    谷歌学者 

  8. 统计计算的R项目。[网址:http://www.R-project.org]

  9. 定点主页。[http://spot.cmis.csiro.au/spot]

  10. Wu H,Kerr MK,Cui X,Churchill GA:MAANOVA:斑点cDNA微阵列实验分析软件包。基因表达数据分析:方法和软件。编辑:Parmigiani G,Garrett E,Irizarry R,Zeger S.2003,纽约:施普林格出版社,313-341。

    第章 谷歌学者 

  11. Li C,Wong WH:寡核苷酸阵列的基于模型的分析:表达指数计算和异常值检测。美国国家科学院院刊2001,98:31-36。10.1073/pnas.011404098。

    第条 公共医学 中国科学院 公共医学中心 谷歌学者 

  12. 钱伯斯·J·M:用数据编程:S语言指南。1998年,纽约:Springer-Verlag

    书籍 谷歌学者 

  13. 可扩展标记语言(XML)。[http://www.w3.org/XML]

  14. 方框D、Ehnebuske D、Kakivaya G、Layman A、Mendelsohn N、Nielsen H、Thatte S、Winer D:简单对象访问协议(SOAP)1.1。[http://www.w3.org/TR/SOAP/]

  15. Stein L:创建一个生物信息国家。自然。2002, 417: 119-120. 10.1038/417119a。

    第条 公共医学 中国科学院 谷歌学者 

  16. 消息传递接口(MPI)。[http://www.mpi-forum.org]

  17. 并行虚拟机(PVM)。[http://www.csm.ornl.gov/pvm/pvm_home.html]

  18. Mascagni M,Ceperley DM,Srinivasan A:SPRNG:并行伪随机数生成的可扩展库。1998年蒙特卡罗和准蒙特卡罗方法。编辑:Niederreiter H,Spanier J.2000,柏林:Springer Verlag

    谷歌学者 

  19. Rossini AJ、Tierney L、Li M:《华盛顿大学生物统计技术报告193》中的简单并行统计计算。2003, [http://www.bepress.com/uwbiostat/paper193]

    谷歌学者 

  20. Li M,Rossini AJ:RPVM:R.RNews中的集群统计计算。2001, 1: 4-7.

    谷歌学者 

  21. SmartEiffel-GNU Eiffel编译器。[http://smarteiffel.loria.fr]

  22. 分布式组件对象模型(DCOM)。[http://www.microsoft.com/com/tech/dcom.asp]

  23. 图Viz。[http://www.graphviz.org]

  24. Steele GL:通用LISP:语言。1990年,伦敦:巴特沃斯·海涅曼

    谷歌学者 

  25. 沙利特A、星巴克O、月亮D:迪伦参考手册。1996年,马萨诸塞州波士顿:Addison-Wesley

    谷歌学者 

  26. Leisch F:Sweave:使用识字数据分析动态生成统计报告。2002年Compstat——计算统计论文集。编辑:Härdle W,Rönz B.2002,德国海德堡:Physika Verlag,575-580。

    谷歌学者 

  27. Vignette截图。[http://www.bioductor.org/Screenshots/vExplorer.jpg]

  28. Purdy GN:CVS袖珍参考。2000年,加利福尼亚州塞巴斯托波尔:O'Reilly&Associates

    谷歌学者 

  29. 并发版本系统(CVS)。[http://www.cvshome.org]

  30. R开发核心团队:编写R扩展。奥地利维也纳:R统计计算基金会。2003

    谷歌学者 

  31. Siek JG、Lee LQ、Lumsdaine A:Boost图形库:用户指南和参考手册。2001年,马萨诸塞州波士顿:Addison-Wesley

    谷歌学者 

  32. 促进。[http://www.boost.org]

  33. Mei H、Tarczy-Hornoch P、Mork P、Rossini AJ、Shaker R、Donelson L:使用BioMediator生物数据集成系统和Bioconductor分析平台进行表达式数组注释。AMIA 2003年会议记录。2003年,贝塞斯达,医学博士:美国医学信息学会

    谷歌学者 

  34. Raymond ES:软件发布实践HOWTO。[http://tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html]

  35. Buckheit J,Donoho DL:波实验室和可再生研究。在小波和统计学中。编辑:Antoniadis A.1995,纽约:Springer-Verlag

    谷歌学者 

  36. R先生,Temple Lang D:统计分析和可再生研究。生物导体项目工作文件#2。2002, [http://www.bepress.com/bioconductor/paper2]

    谷歌学者 

  37. Rossini AJ,Leisch F:文献统计实践。华盛顿大学生物统计技术报告第194号。2003, [http://www.bepress.com/uwbiostat/paper194]

    谷歌学者 

  38. 施瓦布·M、卡伦巴赫·M、克莱尔伯特·J:使科学计算重现。斯坦福大学技术报告。斯坦福:斯坦福探索项目。1996

    谷歌学者 

  39. Perl目录。[http://www.perl.org]

  40. Python编程语言。[http://www.python.org(英文)]

  41. Zhang J,Carey V,Gentleman R:基因组数据注释汇编的可扩展应用程序。生物信息学。2003, 19: 155-56. 10.1093/生物信息学/19.1.155。

    第条 公共医学 谷歌学者 

  42. BioPerl公司。[http://BioPerl.org]

  43. 生物Python。[http://BioPython.org]

  44. 生物爪哇。[http://BioJava.org]

  45. Stajich J、Block D、Boulez K、Brenner S、Chervitz S、Dagdigian C、Fuelen C、Gilbert J、Korf I、Lapp H等:BioPerl工具包:生命科学的Perl模块。《基因组研究》,2002年,12:1611-1618。10.1101/gr.361602。

    第条 公共医学 中国科学院 公共医学中心 谷歌学者 

  46. 用于统计计算的Omega项目。[网址:http://www.omegahat.org]

  47. BioMOBY公司。[http://BioMOBY.org]

  48. Chiaretti S、Li X、Gentleman R、Vitale A、Vignetti M、Mandelli F、Ritz J、Foa R:成人T细胞急性淋巴细胞白血病的基因表达谱确定了对治疗和生存有不同反应的不同患者亚群。鲜血。2004, 103: 2771-2778. 10.1182/血液-2003-09-3243。

    第条 公共医学 中国科学院 谷歌学者 

下载参考资料

作者信息

作者和附属机构

作者

通讯作者

与的通信罗伯特·C绅士.

作者提交的原始图像文件

下面是作者提交的原始图像文件的链接。

图1的作者原始文件

图2的作者原始文件

图3的作者原始文件

权利和权限

转载和许可

关于本文

引用这篇文章

R.C.,Carey,V.J.,Bates,D.M.先生。等。生物导体:用于计算生物学和生物信息学的开放软件开发。基因组生物学 5,R80(2004年)。https://doi.org/10.1186/gb-2004-5-10-r80

下载引文

  • 收到:

  • 修订过的:

  • 认可的:

  • 已发布:

  • 内政部:https://doi.org/10.1186/gb-2004-5-10-r80

关键词