【哈佛大學(xué):計算生物學(xué) & 生物信息學(xué)】學(xué)習(xí)記錄(三)

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

Swimt-Waterman算法本質(zhì)上是一種Dynamic Programming(動態(tài)規(guī)劃算法)蘑险,和Needleman算法有許多相同之處滴肿。其分為3個步驟:Initialization —— Matrix Filling —— Trace Back。

Swith-Waterman算法相較于Needleman-Wunsch算法最大的區(qū)別就在于佃迄,在“matrix preparation階段”泼差,其用0表示mismatch的數(shù)值和比對過程中產(chǎn)生的gap數(shù)值。

SW算法呵俏,先構(gòu)建一個(i+1)×(j+1)的矩陣堆缘。從左上角開始,以0作為其初始值普碎,計算第一行和第一列的數(shù)值(此步驟計算為gap penalty的累加)吼肥。
【標(biāo)注】此過程主要就是填充矩陣的第一行和第一列


由于SW算法將所有的負(fù)值用0進(jìn)行替換,在進(jìn)行上述計算步驟過后麻车,其結(jié)果如下:

下一步進(jìn)行的操作缀皱,稱為“matrix filling”。將原始矩陣劃分為4個一組2×2矩陣绪氛,每一個矩陣內(nèi)右下角可以有3種相對位置唆鸡,分別為left、diagonal枣察、upper争占。

每一種相對位置的移動,代表著不同的序列比對方式序目,如下:

1臂痕、垂直方向上的移動 & 水平方向上的移動,其含義為Indel & gap

2猿涨、對角線移動握童,其含義為“substitution”,其可能為match 或 mismatch

之前給出的位置為A-A叛赚,因此為“match”的情況澡绩,且又因垂直和水平方向上的移動,其對應(yīng)的數(shù)值為0俺附,因此在該2×2矩陣內(nèi)右下角位置對應(yīng)的數(shù)值為1肥卡。

最終就可以將矩陣填充為如下結(jié)果:

SW比對的最后一步為“Trace Back”。整體過程可以描述為事镣,從矩陣中的最大值開始步鉴,依次往回推,得到序列比對的結(jié)果。

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

作者提了一嘴氛琢,為什么需要做序列比對

  • Functionnal Relationship
  • Structural Relationship
  • Evolutionary Relationship

2種算法(ND & SW)之間的區(qū)別:

ND算法喊递,并不會像SW算法一樣,將比對過程中得到的gap penalty和mismatch負(fù)值轉(zhuǎn)化為0阳似,而是保留了對應(yīng)負(fù)值骚勘,最終得到的矩陣結(jié)果為:


在Trace Back過程中,如果矩陣對應(yīng)位置的堿基是匹配關(guān)系(相同)障般,則下一步繼續(xù)走對角線调鲸,如果矩陣對應(yīng)位置的堿基不是相同的,則下一步需要走到的位置是2×2矩陣中最大值的方向挽荡。


可能出現(xiàn)的情況如下:


Needleman-Wunsch算法的Python實現(xiàn)藐石,可以通過這個視頻來學(xué)習(xí)學(xué)習(xí):
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)于微,同時在最后得到的結(jié)果中,我們只想保留“statistically significant HSPs”青自,此步驟的篩選株依,參考序列比對的得分。

Based on the scores of aligning 2 random seqs

在2條序列比對過程中延窜,可能會出現(xiàn)多個HSP恋腕,如下:


參考文獻(xiàn):

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

(4)Suffix Array

【標(biāo)注】該方法用于構(gòu)建基因組的索引(e.g. STAR)

1、Suffix Tree

軟件:MUMmer
給定一條序列逆瑞,并基于該序列荠藤,生成其對應(yīng)的子序列。
e.g. BANANA


2获高、Suffix Array

軟件:STAR

(5)Borrows-Wheeler transformation & LF mapping

軟件:bwa哈肖,bowtie


1、Burrows-Wheeler Transform

BW算法概述:

  • 給定一條序列T(acaacg$)念秧;
  • 將序列尾部的字符轉(zhuǎn)移至序列頭部淤井,循環(huán)該過程直到得到原序列;
  • 將序列進(jìn)行排序($最小摊趾,其他按字母表排序)
  • 記錄最后一列序列币狠,舍棄其余信息

為什么使用BW算法?

將上述給定序列轉(zhuǎn)化之后砾层,可以達(dá)到對字符進(jìn)行壓縮(text compression)的目的(acaacg—— gc3ac)

2总寻、LF mapping

LF mapping算法可以將BW算法記錄的算法還原。


3梢为、使用BW算法進(jìn)行序列比對

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

給出的序列第一位是a,第兩位是ac。需要注意的是铸董,這邊的查找是倒序的祟印,即caa。

首先粟害,基于最后一列數(shù)據(jù)找到第一列序列c的坐標(biāo)范圍(5 & 6)蕴忆,且由于c前2個字符為兩個a,以此作為條件進(jìn)行縮小搜索范圍的前提悲幅。


以字符c作為開頭的序列套鹅,對應(yīng)字符a在第一列的坐標(biāo)范圍為(3 & 4)。此步驟找到了query序列中第二個a的范圍汰具,下一步基于此過程的比對結(jié)果卓鹿,確定最后一個a的位置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末留荔,一起剝皮案震驚了整個濱河市吟孙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聚蝶,老刑警劉巖杰妓,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碘勉,居然都是意外死亡巷挥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門验靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倍宾,“玉大人,你說我怎么就攤上這事晴叨≡浔觯” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵兼蕊,是天一觀的道長初厚。 經(jīng)常有香客問我,道長孙技,這世上最難降的妖魔是什么产禾? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮牵啦,結(jié)果婚禮上亚情,老公的妹妹穿的比我還像新娘。我一直安慰自己哈雏,他們只是感情好楞件,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布衫生。 她就那樣靜靜地躺著,像睡著了一般土浸。 火紅的嫁衣襯著肌膚如雪罪针。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天黄伊,我揣著相機(jī)與錄音泪酱,去河邊找鬼。 笑死还最,一個胖子當(dāng)著我的面吹牛墓阀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拓轻,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼斯撮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悦即?” 一聲冷哼從身側(cè)響起吮成,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辜梳,沒想到半個月后粱甫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡作瞄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年茶宵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宗挥。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡乌庶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出契耿,到底是詐尸還是另有隱情瞒大,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布搪桂,位于F島的核電站透敌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏踢械。R本人自食惡果不足惜酗电,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望内列。 院中可真熱鬧撵术,春花似錦、人聲如沸话瞧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至划滋,卻和暖如春会油,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背古毛。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留都许,地道東北人稻薇。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像胶征,于是被迫代替她去往敵國和親塞椎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容