biostar handbook(六)| 序列联配

序列联配

序列联配是生物信息学最基础的概念,因为大多数数据分析分析策略都需要使用联配得到的信息。

举个简单的例子,假设你手头上有一些片段'THIS','LI','NE','ISALIGNED', 已知他们来自于一个词,那么原来这个词应该是什么样子。

--ISALIGNED
THIS-------
-----LI----
--------NE-

组成原来单词的过程就是序列联配的所做的事情,就是让碎片化的信息根据相似的部分进行排列,从而推测出原来的数据。这个工作看起来简单,但是涉及到上万条碎片的时候,人脑估计就崩溃了,而且还容易出错,所有就开发相应算法进行实现。

联配的表示方法

序列联配结果的展示结果有两种,一种是比较可视化适合人类阅读,一种适合机器处理。默认BLAST得到的结果就是第一种展示方式,如下

ATGCAAATGACAAATAC
||||   |||.||.|
ATGC---TGATAACT--
  • '-': 表示gap,可以认为是候选的InDel.
  • '|': 表示匹配,一摸一样的那种
  • '.': 表示错配,可能有碱基发生了突变。

一般而言,在阅读BLAST结果信息时,都是把上面的序列当作参考序列,下面的序列是自己提供的序列。既然序列比对都是相对而言,那么其实存放形式还可以以更加紧缩的形式存放,这就是CIGAR(compact idiosyncratic gapped alignment report,紧凑的异质间隙排列报告),处于SAM格式的第六列。

所以第二列的信息,用 CIGAR 可以表示为: 4M3D3M1X2M1X1M2D ,解释一下:

  • 4 M(matches)
  • 3 D(deletions),
  • 3 M(matches),
  • 1 X(mismatch),
  • 2 M(matches),
  • 1 X(mismatch),
  • 1 M(match),
  • 2 D(deletions)

根据这个CIGAR值和参考序列就能重构出我们自己提供的序列

如何计算联配得分

假设你的序列是ATGAA,和4个目标序列进行了比较,那么哪个目标序列和自己的序列最相近呢?

  1      2    3     4
ATGAA ATGAA ATGAA AT-GAA
|.|.| |||.| |||.| || |||
ACGCA ATGCA ATGTA ATCGAA

为了挑选出最好的"联配",就需要按照一定规则对联配结果进行打分,比如说匹配得5分,错配扣4分,出现一个gap后扣10分,并且在已有gap上延伸会多口0.5分。按照这个规则,计算上面联配的得分分别是"7,16,16,15".因此你或许认为第二个和第三个可能才是你的目标序列,毕竟看起来也是这样。但是这只是生信分析得到的一个猜测而已。其实没有最好的联配结果,也没有最好联配相对SCORING选择。改变计分规则,最好的联配结果也会改变。

但是根据一些基本信息,还是能够推理出最优选择。因此在联配的时候,请注意挑选合适的得分矩阵:

另外你还可以去ftp://ftp.ncbi.nlm.nih.gov/blast/matrices查看目前的得分矩阵类型.

拓展阅读:

序列联配的算法

在后续的操作需要预先安装一些软件和工具

conda install -c emboss
mkdir -p ~/bin
curl http://data.biostarhandbook.com/align/global-align.sh > ~/bin/global-align.sh
curl http://data.biostarhandbook.com/align/local-align.sh > ~/bin/local-align.sh
chmod +x ~/bin/*-align.sh

下面的例子中使用两条神奇的蛋白序列THISLINEISALIGNED。之所以说是神奇,是因为这完全是认为按照语言习惯对蛋白缩写字母进行排序,当然这个例子最早来自于Marketa Zvelebil和Jeremy Baum的《理解生物信息学》。

这两个shell脚本实际上是封装了emboss的needle方法,修改了标准输入和标准输出。

全局联配:Global alignments

所谓全局联配,就是尽可能保证两条序列的每个碱基都能配对,因此会有比较多的错配和gap,而且不会序列两端的gap进行惩罚。

# 默认
./global-align.sh THISLINE ISALIGNED
# 自定义gap打开的罚分
./global-align.sh THISLINE ISALIGNED -gapopen 7
image

局部联配:Local alignments

局部联配不是尽可能把两条序列进行配对,而是尽可能的找到那些子区域是能最优联配。并且按照得分矩阵,产生分数在阈值之内的比对结果

./local-align.sh THISLINE ISALIGNED
a                  7 NE      8
                     ||
b                  7 NE      8

这个比对是依赖于EBLOSUM62得分矩阵,默认得分低于11都会被淘汰掉。我们可以下载其他得分矩阵进行比较。

wget -4 ftp://ftp.ncbi.nlm.nih.gov/blast/matrices/NUC.4.4 -q &
wget -4 ftp://ftp.ncbi.nlm.nih.gov/blast/matrices/BLOSUM30 -q &
wget -4 ftp://ftp.ncbi.nlm.nih.gov/blast/matrices/BLOSUM62 -q &
wget -4 ftp://ftp.ncbi.nlm.nih.gov/blast/matrices/BLOSUM90 -q &

比较之后发现,在BLOSUM90下得到的序列长度最长

./local-align.sh THISLINE ISALIGNED -data BLOSUM90
4 SLI-NE
 :|| ||
3 ALIGNE

局部联配适用于寻找两个序列最相似的区域。

如果两个序列完全相似,那么局部联配的结果和全局联配的结果将会一致。毕竟每一个地方都是最好的,总体而言也是最好的。如果只是为了实现总体最佳,而不顾及每一个碱基的感受,有一些碱基就得为了实现大局而舍弃自己了。

在全局联配和局部联配之间还有一种混合算法,叫做半全局联配(semi-global alignments), 仅仅知道这么一回事就行。

联配的窘境

由于没有上帝视角,我们只能以手头的信息去推测未知的部分。序列联配的时候得到的最优结果仅仅是根据经验设计的算法运行后的结果。给你两条序列“CCAAACCCCCCCTCCCCCGCTTC“和”CCAAACCCCCCCCTCCCCCCGCTTC”,

到底是./global-align.sh CCAAACCCCCCCTCCCCCGCTTC CCAAACCCCCCCCTCCCCCCGCTTC得到的结果接近真相

1 CCAAACCCCCCC--TCCCCCGCTTC     23
  ||||||||||||  .||||||||||
1 CCAAACCCCCCCCTCCCCCCGCTTC     25

还是./global-align.sh CCAAACCCCCCCTCCCCCGCTTC CCAAACCCCCCCCTCCCCCCGCTTC -gapopen 9得到的结果接近真相呢?

1 CCAAA-CCCCCCCT-CCCCCGCTTC     23
  ||||| |||||||| ||||||||||
1 CCAAACCCCCCCCTCCCCCCGCTTC     25

比对未必能发现真实的插入和缺失,因为算法倾向于用最简单的解释去协调不同的序列,以一句话作为总结吧:

Alignment reliability depends on the information content of the aligned sequence itself. Alignments that include low complexity regions are typically less reliable. Additional analysis is typically needed to confirm these results.

多序列联配

如果要不同物种同一个基因做进化分析,那么就需要先进行多序列联配,然后才能用特定的软件确定不同序列之前的进化关系。常用的软件为: mafft, muscle, clusta-omega, t-coffee等。算法核心思想大多数基于序列递增,但是具体实现有所不同。

以植物转录因子STAT家族的同源序列作为例子,数据来自于北京大学开发的planttfdb, 自行去http://planttfdb.cbi.pku.edu.cn/family.php?fam=STAT下载序列。我将序列存放在STAT文件夹下。

一共有214条序列

# 序列所在文件夹
$ seqkit stat STAT/seq.fas
file     format  type     num_seqs  sum_len  min_len  avg_len  max_len
seq.fas  FASTA   Protein       214  152,000      330    710.3    2,301

仅仅挑选出前10条序列

seqkit seq -n STAT/seq.fas | cut -f 1 -d ' '  | head -n 10 > STAT/ids.txt
seqkit grep --pattern-file STAT/ids.txt STAT/seq.fas > STAT/small.fa

使用mafft进行多序列联配

mafft --clustalout STAT/small.fa > STAT/alignment.maf

结果可以用less,head,tail查看,仅选取部分用作展示

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

推荐阅读更多精彩内容