【哈佛大学:计算生物学 & 生物信息学】学习记录(三)

局部比对算法 —— Smith-Waterman Algorithm

Swimt-Waterman算法本质上是一种Dynamic Programming(动态规划算法),和Needleman算法有许多相同之处。其分为3个步骤:Initialization —— Matrix Filling —— Trace Back。

Swith-Waterman算法相较于Needleman-Wunsch算法最大的区别就在于,在“matrix preparation阶段”,其用0表示mismatch的数值和比对过程中产生的gap数值。

SW算法,先构建一个(i+1)×(j+1)的矩阵。从左上角开始,以0作为其初始值,计算第一行和第一列的数值(此步骤计算为gap penalty的累加)。
【标注】此过程主要就是填充矩阵的第一行和第一列


由于SW算法将所有的负值用0进行替换,在进行上述计算步骤过后,其结果如下:

下一步进行的操作,称为“matrix filling”。将原始矩阵划分为4个一组2×2矩阵,每一个矩阵内右下角可以有3种相对位置,分别为left、diagonal、upper。

每一种相对位置的移动,代表着不同的序列比对方式,如下:

1、垂直方向上的移动 & 水平方向上的移动,其含义为Indel & gap

2、对角线移动,其含义为“substitution”,其可能为match 或 mismatch

之前给出的位置为A-A,因此为“match”的情况,且又因垂直和水平方向上的移动,其对应的数值为0,因此在该2×2矩阵内右下角位置对应的数值为1。

最终就可以将矩阵填充为如下结果:

SW比对的最后一步为“Trace Back”。整体过程可以描述为,从矩阵中的最大值开始,依次往回推,得到序列比对的结果。

全局比对算法 —— Needleman-Wunsch算法

作者提了一嘴,为什么需要做序列比对

  • Functionnal Relationship
  • Structural Relationship
  • Evolutionary Relationship

2种算法(ND & SW)之间的区别:

ND算法,并不会像SW算法一样,将比对过程中得到的gap penalty和mismatch负值转化为0,而是保留了对应负值,最终得到的矩阵结果为:


在Trace Back过程中,如果矩阵对应位置的碱基是匹配关系(相同),则下一步继续走对角线,如果矩阵对应位置的碱基不是相同的,则下一步需要走到的位置是2×2矩阵中最大值的方向。


可能出现的情况如下:


Needleman-Wunsch算法的Python实现,可以通过这个视频来学习学习:
https://www.youtube.com/watch?v=um8h3P216Fk

代码我也附带敲好了,如下:

#----------------Needleman-Wunsch-------------------#
# Importiing Modules
from threading import main_thread
import numpy as np
from pip import main

# Ask for sequences from the user
# sequence_1 = input("Enter or paste sequence 1:")
# sequence_2 = input("Enter or paste sequence 2:")


sequence_1 = "ATCGT"
sequence_2 = "ACGT"

# Create Matrices
main_matrix = np.zeros((len(sequence_1)+1, len(sequence_2)+1))
match_checker_matrix = np.zeros((len(sequence_1), len(sequence_2)))

# Providing the scores for match, mismatch and gap
match_reward = 1
mismatch_penalty = -1
gap_penalty = -2

# Fill the match checker matrix according to match or mismatch
for i in range(len(sequence_1)):
    for j in range(len(sequence_2)):
        if sequence_1[i] == sequence_2[j]:
            match_checker_matrix[i][j] = match_reward
        else:
            match_checker_matrix[i][j] = mismatch_penalty

# print(match_checker_matrix)

# Filling up the matrix using Needleman_Wunsch algorithm
# STEP 1: Initialization
for i in range(len(sequence_1)+1):
    main_matrix[i][0] = i*gap_penalty
for j in range(len(sequence_2)+1):
    main_matrix[0][j] = j*gap_penalty

# STEP 2: Matrix Filling
for i in range(1, len(sequence_1)+1):
    for j in range(1, len(sequence_2)+1):
        main_matrix[i][j] = max(main_matrix[i-1][j-1] + match_checker_matrix[i-1][j-1],
        main_matrix[i-1][j] + gap_penalty,
        main_matrix[i][j-1] + gap_penalty)

# print(main_matrix)

# STEP 3: TraceBack
aligned_1 = ""
aligned_2 = ""

ti = len(sequence_1)
tj = len(sequence_2)

while(ti > 0 and tj > 0):

    if (ti > 0 and tj > 0 and main_matrix[ti][tj] == main_matrix[ti-1][tj-1] + match_checker_matrix[ti-1][tj-1]):

        aligned_1 = sequence_1[ti - 1] + aligned_1
        aligned_2 = sequence_2[tj - 1] + aligned_2

        ti = ti - 1
        tj = tj - 1

    elif (ti > 0 and main_matrix[ti][tj] == main_matrix[ti-1][tj] + gap_penalty):
        aligned_1 = sequence_1[ti-1] + aligned_1
        aligned_2 = "-" + aligned_2
        
        ti = ti - 1
    else:
        aligned_1 = "-" + aligned_1
        aligned_2 = sequence_2[tj-1] + aligned_2

# test
print(aligned_1)
print(aligned_2)

序列比对算法

(1)Read Mapping

(2)Seed —— Kmer

(3)BLAST

在BLAST序列比对过程中,可以得到HSP(high-scoring segment pairs),同时在最后得到的结果中,我们只想保留“statistically significant HSPs”,此步骤的筛选,参考序列比对的得分。

Based on the scores of aligning 2 random seqs

在2条序列比对过程中,可能会出现多个HSP,如下:


参考文献:

http://www.sciencedirect.com/science/article/pii/S0022283605803602
https://academic.oup.com/nar/article/25/17/3389/1061651/

(4)Suffix Array

【标注】该方法用于构建基因组的索引(e.g. STAR)

1、Suffix Tree

软件:MUMmer
给定一条序列,并基于该序列,生成其对应的子序列。
e.g. BANANA


2、Suffix Array

软件:STAR

(5)Borrows-Wheeler transformation & LF mapping

软件:bwa,bowtie


1、Burrows-Wheeler Transform

BW算法概述:

  • 给定一条序列T(acaacg$);
  • 将序列尾部的字符转移至序列头部,循环该过程直到得到原序列;
  • 将序列进行排序($最小,其他按字母表排序)
  • 记录最后一列序列,舍弃其余信息

为什么使用BW算法?

将上述给定序列转化之后,可以达到对字符进行压缩(text compression)的目的(acaacg—— gc3ac)

2、LF mapping

LF mapping算法可以将BW算法记录的算法还原。


3、使用BW算法进行序列比对

e.g. Query Q = aac, DB = T acaacg, BWT(T) = gc3ac

给出的序列第一位是a,第两位是ac。需要注意的是,这边的查找是倒序的,即caa。

首先,基于最后一列数据找到第一列序列c的坐标范围(5 & 6),且由于c前2个字符为两个a,以此作为条件进行缩小搜索范围的前提。


以字符c作为开头的序列,对应字符a在第一列的坐标范围为(3 & 4)。此步骤找到了query序列中第二个a的范围,下一步基于此过程的比对结果,确定最后一个a的位置。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容