第2章:序列同源性的定义与类型
说实话,刚入行做MSA那会儿,我总把「同源性」和「相似性」混着用。直到在一次跨物种功能预测项目里,把两个假基因当真直系同源去对齐,结果功能注释全错了……从那以后,我才真正把这两个概念刻在脑子里。
这一章咱们就把同源性的底裤扒清楚。你想想看,如果连手里的序列是兄弟还是表亲都分不清,MSA做得再漂亮,结论也可能翻车。
2.1 同源性 ≠ 相似性
这是最基础也最容易踩的坑。同源性(homology)是个二元概念——两条序列要么同源(来自共同祖先),要么不同源。没有「50%同源」这种说法。相似性(similarity)才是一个连续值,可以用百分比衡量。
核心区别一句话:
同源性是进化关系,相似性是序列一致性。同源的一定相似,但相似的不一定同源——可能只是趋同进化。
我在项目中见过有人把两条趋同的蛋白酶直接当同源处理,结果MSA里插了好多假阳性空位。后来我养成了习惯:在做任何MSA之前,先跑一轮BLAST的E-value和保守位点分布,心里先有个底。
2.2 同源性的三种类型
同源序列按进化事件分成三大类。我建议你把这张表记熟,每次拿到新序列就从这里开始判断。
| 类型 | 起源事件 | 功能关系 | 典型场景 |
|---|---|---|---|
| 直系同源(Orthologs) | 物种形成 | 通常功能相同/非常相似 | 跨物种基因注释、功能转移 |
| 旁系同源(Paralogs) | 基因复制 | 可能功能分化(旁系异源或旁系同功) | 基因家族分析、功能演化研究 |
| 异源同源(Xenologs) | 水平基因转移 | 功能不可预测 | 原核生物、寄生虫基因组、抗生素抗性 |
小技巧:快速区分直系和旁系,可以看物种树和基因树是否拓扑一致。一致则大概率是直系——我常用这种方法初步过滤,再手动确认。
2.2.1 直系同源(Orthologs)
直系同源是MSA最喜闻乐见的类型。两条序列分别来自两个物种,因物种分化事件分开,理论上保留了祖先的原始功能。我个人习惯在构建直系同源MSA时使用高严格度的gap penalty,因为这类序列的保守区域通常很清晰。
举个例子:人类α-珠蛋白和小鼠α-珠蛋白就是直系同源。它们的序列一致性通常在70%以上,MSA几乎不需要手动调整。
2.2.2 旁系同源(Paralogs)
旁系同源由基因复制产生。复制后其中一份可能保持原功能,另一份则可能获得新功能(neofunctionalization),或者俩都退化(subfunctionalization)。我处理过一个案例:植物中的MADS-box基因家族,同一物种内有十几个旁系同源,功能从花发育到果实成熟各不相同。如果把它们一股脑丢进MSA而不做亚家族分类,比对结果基本没法用。
所以——对于旁系同源,我建议先做聚类,分亚家族后再分别比对。每次这样处理,AIC/BIC评分都能高不少。
2.2.3 异源同源(Xenologs)
异源同源通过水平基因转移获得。说实话,常规的分子进化工具对这种类型处理起来很棘手,因为物种树和基因树会严重冲突。我在分析原核泛基因组时遇到过多次:两个菌株里同一个基因簇看上去很像,但实际一个是垂直遗传,一个是水平获取。如果不加区分混入MSA,空隙分布会异常,进化模型也会被带偏。
避坑提醒:曾经我在分析一个耐药基因对比时说“这两个菌株的耐药基因高度同源”,结果审稿人指出那是水平转移的异源同源,不能直接用作系统发育标记。自此之后,对于疑似HGT的序列,我都会先用GC含量和密码子偏性做初步筛查,再决定是否纳入MSA。
2.3 同源性范围对MSA的影响
不同类型的同源序列,对MSA的参数选择和后续分析策略影响很大。我梳理了一个快速决策表,你可以直接当作备查清单。
| 同源类型 | 推荐比对策略 | 常见陷阱 | 我的经验值(0-5星) |
|---|---|---|---|
| 直系同源 | 全局+严格gap | 错判为旁系,低估保守性 | ★★★★☆ |
| 旁系同源(亚家族内) | 全局+适度gap | 忽视亚家族差异,过度对齐 | ★★★★★ |
| 旁系同源(跨亚家族) | 局部或一致性序列引导 | 强制对齐产生虚假保守位点 | ★★★☆☆ |
| 异源同源 | 谨慎参与;或排除后单独分析 | 污染系统发育信号 | ★★☆☆☆ |
一个顺手实践:我现在拿到新序列集后,会先用OrthoFinder或InParanoid跑一轮直系同源分组。分完组后,每个组的序列再分别做MSA,效率和准确率都明显提升。
2.4 本章知识结构一览
下面这张图把同源性的定义、类型、以及每类对MSA的影响串起来了。你可以把它当作一个快速检查卡。
2.5 同源性判定的实操要点
光有概念不够,得能上手判定。我一般走三步:
- BLAST双向最佳匹配:直系同源通常互为最佳Hit。如果A vs B的最佳Hit不是对方,那就得留神了——可能是旁系或异源。
- 构建物种树和基因树:拓扑一致 → 强证据直系;不一致 → 疑似旁系或HGT。
- 检查基因共线性:同一条染色体上相邻基因的保守性也能辅助判断。我曾在酵母基因组里用该方法纠正了三次误判。
# 一个简易的判断伪代码(Python风格)
def classify_homology(seqA, seqB, speciesA, speciesB):
score = blast_bidirectional(seqA, seqB)
if score < 1e-5:
return "非同源"
if speciesA == speciesB:
return "疑似旁系同源(同物种内)"
else:
# 跨物种
tree = build_quick_tree(seqA, seqB, outgroup)
if tree.topology_match:
return "直系同源(强证据)"
else:
gc_diff = gc_content(seqA) - gc_content(seqB)
if abs(gc_diff) > 0.08:
return "可能异源同源,建议排除"
else:
return "直系同源(弱证据,需手动确认)"
嗯,这段代码我一直在本地脚本里用着。虽然不是百分百准确,但能筛掉80%以上的麻烦。
最后说一句:别嫌麻烦。每次多花5分钟检查同源类型,能让后续MSA节省至少半小时的重复劳动。这是我从无数次重跑比对里学到的教训。