跳转至

基因家族鉴定与进化

一句话概述:基因家族是由一个祖先基因经复制和分化产生的一组序列相似、功能相关的基因,鉴定基因家族并分析其进化是比较基因组学的核心任务。

核心知识点速查表

概念说明
基因家族来源于共同祖先的一组同源基因(白话:同一个老祖宗分化出来的基因群)
直系同源(Ortholog)物种分化产生的同源基因(功能通常保守)
旁系同源(Paralog)基因复制产生的同源基因(功能可能分化)
OrthoFinder基因家族鉴定的主流工具
CAFE基因家族扩张/收缩分析工具
MCL聚类Markov Cluster Algorithm,蛋白质序列聚类算法
Ka/Ks非同义/同义替换比,判断选择压力
系统发育用进化树展示基因/物种间的亲缘关系

一、基因家族鉴定流程

1.1 OrthoFinder鉴定直系同源基因组

# === 安装OrthoFinder ===
conda install -c bioconda orthofinder    # conda安装

# === 准备输入文件 ===
# 每个物种一个蛋白质FASTA文件,放在同一目录
mkdir proteomes/                          # 创建输入目录
cp species1.pep.fa proteomes/             # 复制物种1蛋白质
cp species2.pep.fa proteomes/             # 复制物种2蛋白质
cp species3.pep.fa proteomes/             # 复制物种3蛋白质

# === 运行OrthoFinder ===
orthofinder \
    -f proteomes/ \        # 输入目录(包含所有物种的蛋白质FASTA)
    -t 16 \                # 比对用的线程数
    -a 8 \                 # 分析用的线程数
    -M msa \               # 用多序列比对建树(更准确)
    -S diamond              # 用DIAMOND加速序列搜索(比BLAST快500倍)
# === OrthoFinder 结果文件 ===
# Results_*/
# ├── Orthogroups/
# │   ├── Orthogroups.tsv            # ★每个基因家族包含的基因
# │   ├── Orthogroups_UnassignedGenes.tsv  # 未分组的孤儿基因
# │   └── Orthogroups.GeneCount.tsv  # ★每个物种每个家族的基因数
# ├── Orthologues/                    # 物种对之间的直系同源关系
# ├── Gene_Trees/                     # 每个基因家族的进化树
# ├── Species_Tree/                   # 物种树
# ├── Comparative_Genomics_Statistics/
# │   └── Statistics_Overall.tsv     # ★总体统计
# └── Phylogenetic_Hierarchical_Orthogroups/
#     └── N0.tsv                     # 层次化直系同源组

1.2 特定基因家族的HMM搜索

# === 使用HMMER搜索特定基因家族 ===
# 场景:已知某基因家族的HMM模型,想在新基因组中找该家族成员

# 第1步:下载Pfam HMM模型
wget https://www.ebi.ac.uk/interpro/wwwapi/entry/pfam/PF00069?annotation=hmm  # 激酶域
# 或从Pfam数据库下载对应家族的HMM文件

# 第2步:用hmmsearch搜索
hmmsearch \
    --tblout kinase_hits.tbl \     # 表格输出
    --domtblout kinase_domains.tbl \  # 结构域表格输出
    -E 1e-5 \                      # E-value阈值
    --cpu 8 \                       # CPU线程数
    PF00069.hmm \                   # HMM模型文件
    species.pep.fa                   # 蛋白质序列文件

# 第3步:提取候选基因
awk '$1!~/^#/ {print $1}' kinase_hits.tbl | \   # 提取基因ID
    sort -u > kinase_genes.list                   # 去重

二、基因家族扩张/收缩分析(CAFE)

# === 安装CAFE5 ===
conda install -c bioconda cafe    # conda安装

# === 准备输入文件 ===
# 1. 基因家族计数文件(从OrthoFinder结果转换)
# 格式:Family_ID\tspecies1\tspecies2\tspecies3...
# 注意:过滤掉只在1个物种中出现的家族和超大家族(>100基因)

# 从OrthoFinder结果生成CAFE输入
python3 << 'PYEOF'
import pandas as pd

# 读取OrthoFinder基因计数
df = pd.read_csv("Orthogroups.GeneCount.tsv", sep="\t")  # 读取计数文件
df = df.drop(columns=["Total"])                            # 删除Total列

# 过滤:至少2个物种有基因,且最大基因数<100
mask = (df.iloc[:, 1:] > 0).sum(axis=1) >= 2              # 至少2个物种有
mask &= df.iloc[:, 1:].max(axis=1) < 100                  # 最大数<100
df_filtered = df[mask]

# 添加CAFE格式的描述列
df_filtered.insert(0, "Desc", "(null)")                    # 添加描述列

# 保存
df_filtered.to_csv("cafe_input.tsv", sep="\t", index=False)  # 输出
print(f"保留 {len(df_filtered)} 个基因家族")
PYEOF

# === 2. 超度量物种树(带分歧时间) ===
# 使用r8s或MCMCtree从物种树推断分歧时间
# 树的格式:((sp1:10,sp2:10):5,sp3:15);  (数字是百万年)
# === 运行CAFE5 ===
cafe5 \
    -i cafe_input.tsv \           # 基因家族计数文件
    -t species_tree.nwk \         # 超度量物种树(带分歧时间)
    -p \                          # 计算p-value
    -k 2 \                        # 假设2个lambda值(进化速率)
    -o cafe_output                 # 输出目录

# === 结果解读 ===
# cafe_output/
# ├── Base_asr.tre          # 祖先基因家族大小重建
# ├── Base_family_results.txt  # ★每个家族的扩张/收缩和p-value
# ├── Base_branch_probabilities.txt  # 每个分支的变化概率
# └── Base_clade_results.txt  # 每个支系的显著变化家族
# === 提取显著扩张/收缩的基因家族 ===
# 找出p-value < 0.05的家族
awk '$2 < 0.05' cafe_output/Base_family_results.txt | \
    head -20   # 查看前20个显著变化的家族

三、系统发育分析

# === 单基因家族建树流程 ===

# 第1步:多序列比对
mafft \
    --auto \                    # 自动选择最佳策略
    --thread 8 \                # 线程数
    gene_family.fa > aligned.fa  # 输入→输出

# 第2步:修剪比对(去除低质量区域)
trimal \
    -in aligned.fa \            # 输入比对结果
    -out trimmed.fa \           # 输出修剪结果
    -automated1                  # 自动选择最佳修剪策略

# 第3步:建树(最大似然法)
iqtree2 \
    -s trimmed.fa \             # 输入修剪后的比对
    -m MFP \                    # 自动选择最佳模型(ModelFinder Plus)
    -bb 1000 \                  # 1000次ultrafast bootstrap
    -alrt 1000 \                # 1000次SH-aLRT检验
    -nt AUTO                     # 自动选择线程数

# 产出:trimmed.fa.treefile(Newick格式进化树)
# === Ka/Ks分析(选择压力检测) ===
# Ka/Ks < 1: 纯化选择(功能保守)
# Ka/Ks = 1: 中性进化
# Ka/Ks > 1: 正选择(功能分化)

# 使用KaKs_Calculator
KaKs_Calculator \
    -i gene_pairs.axt \         # 成对比对文件(AXT格式)
    -o kaks_results.txt \       # 输出结果
    -m YN                        # Yang-Nielsen方法

# 使用PAML的codeml进行位点模型检验(更严格)
# 需要准备ctl配置文件,设置model=0(M0)和model=2(M2a)

四、面试高频考点

Q1: Ortholog和Paralog的区别?

  • Ortholog:物种分化事件产生,A物种的基因X和B物种的基因X'。白话:不同物种里的"对应基因"
  • Paralog:基因复制事件产生,同一物种内的基因X和基因X'。白话:同一物种里的"兄弟基因"
  • 面试关键:Ortholog通常功能保守,Paralog功能可能分化(新功能化/亚功能化)

Q2: 如何判断基因家族扩张有生物学意义?

  1. CAFE统计检验p-value < 0.05
  2. 扩张基因的表达模式(是否在特定组织/条件下高表达)
  3. 扩张基因的功能富集(GO/KEGG分析)
  4. 正选择信号(Ka/Ks > 1的位点)
  5. 与表型/适应性的关联

常见报错与解决

报错原因解决方案
OrthoFinder内存不足物种太多或蛋白太多-S diamond加速,减少物种数
CAFE报错unreliable输入树不是超度量树用r8s/MCMCtree校正分歧时间
IQ-TREE alignment too short序列太短降低bootstrap次数或换NJ方法
HMMER无结果E-value阈值太严格放宽到1e-3再手动过滤

速查表

# === 基因家族分析一键流程 ===
# 1. OrthoFinder鉴定基因家族
orthofinder -f proteomes/ -t 16 -M msa -S diamond

# 2. CAFE分析扩张/收缩
cafe5 -i cafe_input.tsv -t tree.nwk -p -o cafe_out

# 3. 特定家族建树
mafft --auto family.fa > aln.fa
trimal -in aln.fa -out trim.fa -automated1
iqtree2 -s trim.fa -m MFP -bb 1000

# 4. 选择压力分析
KaKs_Calculator -i pairs.axt -o kaks.txt -m YN