第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的影响串起来了。你可以把它当作一个快速检查卡。

同源性分类树与MSA影响 同源性 直系同源 旁系同源 异源同源 物种形成 功能保守 → 严格gap penalty 基因复制 功能分化 → 先聚类再比对 水平基因转移 功能不确定 → 谨慎加入 直接影响MSA策略与结果 关键提示 直系同源MSA最「顺利」,旁系需警惕亚家族混杂 异源同源是「野孩子」,做MSA前最好先排除

2.5 同源性判定的实操要点

光有概念不够,得能上手判定。我一般走三步:

  1. BLAST双向最佳匹配:直系同源通常互为最佳Hit。如果A vs B的最佳Hit不是对方,那就得留神了——可能是旁系或异源。
  2. 构建物种树和基因树:拓扑一致 → 强证据直系;不一致 → 疑似旁系或HGT。
  3. 检查基因共线性:同一条染色体上相邻基因的保守性也能辅助判断。我曾在酵母基因组里用该方法纠正了三次误判。
# 一个简易的判断伪代码(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节省至少半小时的重复劳动。这是我从无数次重跑比对里学到的教训。