作者:禅与计算机程序设计艺术
1.简介
生物信息学(Bioinformatics)、基因组学(Genomics)和蛋白质结构研究是现代生命科学的一个重要领域,通过对自然界的组织进行高精度测序和序列分析,获得了关于细胞结构、分子功能、基因调控等多方面的重大发现。由于现有的计算资源及时代要求,大量的科研人员已经涌向了这三个领域。而对于一般程序员来说,加入这一行业的门槛仍比较高,即使拥有计算机相关专业技术基础,也很难独立开发出具有实际应用意义的应用软件。因此,本文将结合编程语言基础知识和生物信息学相关理论知识,引导程序员了解并应用生物信息学和基因组学相关的算法和软件。
在阅读本文之前,请确保您对生物信息学、机器学习、Python、Linux命令行、DNA序列、RNA序列、结构预测、蛋白质结构、蛋白质相互作用等有基本的理解和掌握。
2.生物信息学的概念
生物信息学(Bioinformatics)是利用高通量测序技术对生命的各种生物学特征进行研究的一门学术研究领域。生物信息学是一种将海量生物数据转化成可用于科学分析的信息的应用数学技术和方法。生物信息学的理论基础主要是数学、统计学和计算机科学。在这个领域里,可以处理及分析非常复杂和庞大的生物数据,比如基因组、 transcriptome、metagenome 和 miRNA 等,从而可以让我们更好地理解大脑、身体和其它生命系统。
下面我们来简单了解一下生物信息学最主要的概念和术语:
序列:指的是有一定顺序的 nucleic acid (DNA或RNA) 或 amino acid 链,通常由四种类型: 5'-GATC-3' (双链 DNA) 或 5'-GUAC-3' (单链 RNA)。序列通常用来表征一个特定蛋白质或者基因的遗传信息,并能提供丰富的生物信息学研究线索。
比对:用计算机技术将各个序列匹配对齐。由于序列存在偏差,导致不一致的地方被标记为差异。
生物特征:指生物体内具有某种显著性状或行为的区域,如基因、蛋白质、染色体等。生物特征的识别通过比较和分析不同物种之间的基因表达情况,也可以通过蛋白质的功能序列来推断其所属类别。
蛋白质结构预测:依靠蛋白质结构和相互作用网络来预测其功能。
代谢网络:代谢网络是描述特定生物体的分子免疫系统,它包括各种酶、受体、激酶、复合物等的动态变化,这些动态变化反映了整个系统的功能和运行机制。通过系统工程的手段,我们可以对代谢网络进行分析和预测,并给予相应的治疗方案。
三维结构预测:基于蛋白质三维结构和三维信息来预测其结构和功能。
数据库搜索:利用已建立的数据库查询序列信息、序列特征、序列比对结果等。
生物信息学软件:包括各种工具软件和数据库系统。
生物信息学分析流程:包括序列比对、结构预测、路径规划、基因表达分析、蛋白质相互作用分析等。
3.基因组学的概念
基因组学(Genetics)是生物信息学的一部分,是研究生命中所有细胞和生物体的遗传变异、突变和调控的学术研究领域。基因组学的研究目标是探索自然界的遗传进化过程,理解人类的生理机理,同时也促进人类健康和发展。
基因组是一个包含了每个细胞的基因集合,每个基因都是一个由 DNA 编码而来的长条链,包含着基因编码的 RNA,每个RNA分子还可以含有一个或多个蛋白质修饰,这些蛋白质就像是细胞中的遗传物质一样。通过比较和分析基因组、蛋白质结构和功能序列,我们可以了解到人类个体基因和环境之间的关系,推导出疾病的原因和诊断标准,还可以预测人类的后天命运。
下面我们来看一下基因组学的一些基本概念:
遗传密码:遗传密码是一个 DNA 序列所包含的基本单位,称为一个核苷酸碱基配对。核苷酸碱基配对是由四种碱基 A、T、C、G 中的一种或两种互相补充形成的对,它共同组成了 DNA 链条的核苷酸。
起始倍刺突变(Spliceosome):起始倍刺突变是指在合成基因组时引入的一个序列,它能够捕获和利用插入在基因编码序列上的非编码序列,产生新的变异。起始倍刺突变能够让基因得以进化,并扩张适应性多样性。
插入序列(Intron):插入序列是指两个或更多的核苷酸连续排列,但没有对应编码的蛋白质。插入序列的引入增强了基因的表达量,并可能改变其功能。
合成密码(Synthetic construct):合成密码是指制备了某些遗传密码的 DNA 序列,但其功能却与宿主细胞完全无关。合成密码的构建旨在模仿已知密码或模式,为进行新型设计和功能验证提供了便利。
基因编码序列:基因编码序列是指通过 DNA 的编码获得的RNA,它们编码了许多不同的蛋白质。编码序列通常是由多个核苷酸配对而成的 DNA 链条,起始核苷酸 5' 与终止核苷酸 3' 可以连接形成完整的基因。
SNP (Single Nucleotide Polymorphism):SNP 是指单核苷酸多态性,即单个核苷酸发生变化。
染色体 (Chromosome):染色体是指细胞的 DNA 分布。它由细胞内的所有 DNA 分子连在一起组成。
宏基因组 (Metagenome):宏基因组是一组来自不同环境中的 DNA、RNA 或蛋白质的集合。宏基因组研究能够理解微生物在生境环境中扮演的角色、迁移路径和合成方式。
4.算法概述
4.1.序列比对算法——BLAST算法
BLAST(Basic Local Alignment Search Tool)是目前最常用的序列比对算法,它的工作原理如下图所示:
如上图所示,用户提交的查询序列首先会在数据库中进行全局搜索,然后找到覆盖度最高的参考序列,然后在参考序列上进行局部搜索。当局部搜索结束后,BLAST 将返回两条序列之间的最佳匹配对以及它们之间的匹配概率,并给出建议的下一步改进方向。
本文只讨论 BLAST 算法的输入输出参数和流程,不涉及具体的算法实现。
4.1.1.输入参数
- Query sequence(s): 用户提交的待比对序列。
- Database file: 数据库文件,包括用户提交的序列库和参考序列集。
- Word size: 指定序列的比较范围。
- Expectation value: 指定用户对匹配结果的期望值。
- Gap open penalty: 指定开放缺口的成本。
- Gap extend penalty: 指定延伸缺口的成本。
- Number of alignments to report: 指定需要返回的最佳匹配结果个数。
- Methionine offset: 指定Methionine在序列中的位置。
- Composition based statistics: 是否使用定量统计方法对结果排序。
- Subject sequence filtering parameters: 对数据库中序列的过滤条件。
4.1.2.输出参数
- Alignment view: 展示查询序列和对应的数据库序列之间的比对结果。
- Alignment summary table: 返回所有的查询序列与数据库序列的比对结果,并给出它们的比对概率。
- XML output: 以 XML 格式返回查询序列和数据库序列的比对结果,并且可以在其他程序中分析。
- Tabular output: 以表格形式返回查询序列和数据库序列的比对结果,可用于编写脚本。
4.2.序列分类算法——HMM模型
Hidden Markov Model (HMM) 是一种用在序列分析的概率模型,它能够对一组隐藏的状态和观察到的数据之间的关系建模。通常情况下,HMM 模型由五部分构成:初始状态分布、状态转移矩阵、输出概率分布、隐藏状态序列以及观察到的数据序列。根据状态转移矩阵和输出概率分布,HMM 模型能够推算出隐藏状态序列,以及用这些状态序列生成观察到的数据序列。
本文将介绍 HMM 模型的一些基本原理,并给出用于分类基因组数据的典型流程。
4.2.1.HMM 模型
HMM 模型由初始状态分布、状态转移矩阵、输出概率分布、隐藏状态序列以及观察到的数据序列五部分组成。其中初始状态分布表示在序列分析过程中,每一个隐藏状态出现的初始概率,状态转移矩阵表示不同隐藏状态之间的转换概率,输出概率分布表示在每个隐藏状态下,观察到的各个符号出现的概率,隐藏状态序列则是用于生成观察到的数据序列的中间产物,而观察到的数据序列则是最终要进行分析的数据对象。
HMM 模型可以分为以下几步:
- 数据准备:对要分析的数据进行预处理,如去除停用词、统一字符大小写等。
- 参数估计:通过已知训练集数据估计模型的参数,得到初始状态分布、状态转移矩阵、输出概率分布等。
- 数据生成:按照已知模型,通过隐藏状态序列生成观察到的数据序列。
- 结果评估:比较生成的观察到的数据序列和真实的数据序列,得到准确率,并进行必要的调整。
本文将以上述流程作为分类基因组数据的典型流程。
4.3.序列比较算法——Needleman–Wunsch算法
Needleman–Wunsch 算法是一种串级比对算法,其工作原理与 BLAST 算法类似,都是通过对两个序列进行局部比对的方式进行匹配。但 Needleman–Wunsch 算法与 BLAST 算法最大的不同在于,NEEDLEMAN-WUNSCH 算法不需要知道全部参考序列,而是在查询序列与某个参考序列进行比对的时候只需要计算它和数据库中的某一部分的参考序列之间的最优匹配。这样做的好处就是减少了内存消耗,加快了算法的运行速度。
本文只介绍 NEEDLEMAN-WUNSCH 算法的输入输出参数。
4.3.1.输入参数
- Query sequence: 查询序列。
- Reference subsequence: 需要进行局部比对的参考序列子序列。
- Match score: 相同字符的得分。
- Mismatch score: 不同字符的惩罚分。
- Gap penalty: 填充字符的惩罚分。