跳转至

系统发育树构建 — IQ-TREE 最大似然法

一句话概述:IQ-TREE 是目前最主流的最大似然法建树软件,内置 ModelFinder 自动选模型 + UFBoot 超快自展检验,一条命令完成从模型选择到建树的全流程。


核心知识点速查表

概念白话解释
最大似然法(ML)找一棵树,使得观察到当前序列的概率最大
替代模型描述碱基/氨基酸如何互相变化的数学模型(如 GTR+G)
ModelFinderIQ-TREE 内置的模型选择工具,比 jModelTest 快 10~100 倍
UFBoot超快自展检验,比 RAxML 快 10~40 倍,评估分支可信度
SH-aLRT另一种快速分支支持度检验,与 UFBoot 互补
分区模型不同基因/区域用不同进化模型(如 gene1 用 GTR,gene2 用 HKY)
gCF/sCF基因/位点一致性因子,衡量基因树与物种树的一致程度
IQ-TREE 32026 年发布的最新大版本(Wong et al., 2026),支持更复杂的进化模型

一、为什么选 IQ-TREE?(白话版)

建系统发育树有三大方法: 1. 距离法(如 Neighbor-Joining):快但粗糙,像用尺子量远近 2. 最大简约法(如 PAUP):找变化最少的树,但假设太简单 3. 最大似然法(如 IQ-TREE、RAxML):用概率模型算最合理的树,目前最主流*

IQ-TREE 的优势:一条命令搞定模型选择 + 建树 + 支持度评估,速度快、精度高、使用简单。


二、分析流程

整体流程

序列比对(MSA) → IQ-TREE(自动选模型 + 建树 + UFBoot) → 树文件 → 可视化

第 1 步:安装

# 方法1:conda安装(推荐)
conda install -c bioconda iqtree  # 安装最新版

# 方法2:下载预编译二进制
wget https://github.com/iqtree/iqtree2/releases/download/v2.3.6/iqtree-2.3.6-Linux-intel.tar.gz
tar -xzf iqtree-2.3.6-Linux-intel.tar.gz  # 解压
export PATH=$PATH:$(pwd)/iqtree-2.3.6-Linux-intel/bin  # 添加到PATH

# 验证安装
iqtree2 --version  # 查看版本

第 2 步:序列比对(前置步骤)

# IQ-TREE 需要已比对好的多序列比对(MSA)作为输入
# 常用比对工具:MAFFT、MUSCLE、ClustalW

# 用 MAFFT 做多序列比对(推荐)
mafft --auto input.fasta > aligned.fasta  # 自动选择算法比对

# 检查比对质量(用 TrimAl 修剪低质量区域)
trimal -in aligned.fasta \    # 输入比对文件
       -out trimmed.fasta \   # 输出修剪后的文件
       -automated1             # 自动选择修剪策略

第 3 步:一条命令建树(最简用法)

# 最简单的用法:自动选模型 + 建树 + 1000次UFBoot
iqtree2 -s trimmed.fasta \    # 输入比对文件(-s = sequence)
        -m MFP \               # ModelFinder Plus(自动选最佳模型)
        -bb 1000 \             # 1000次UFBoot超快自展检验
        -alrt 1000 \           # 1000次SH-aLRT检验(推荐与UFBoot一起用)
        -nt AUTO \             # 自动检测并使用最优线程数
        -pre output_tree       # 输出文件前缀

# 输出文件说明:
# output_tree.iqtree     — 主报告(包含模型参数、树评分等)
# output_tree.treefile   — 最佳树(Newick格式,可直接可视化)
# output_tree.contree    — 带支持度的一致树
# output_tree.log        — 运行日志
# output_tree.model.gz   — 模型选择结果
# output_tree.splits.nex — Nexus格式的分支信息

第 4 步:理解输出结果

# 查看选中的模型
grep "Best-fit model" output_tree.iqtree
# 例如:Best-fit model: GTR+F+I+G4 chosen according to BIC
# GTR = General Time Reversible(最通用的DNA替代模型)
# +F = 使用经验碱基频率
# +I = 包含不变位点比例
# +G4 = Gamma分布(4个类别)模拟位点间速率变异

# 查看树的对数似然值
grep "Log-likelihood" output_tree.iqtree
# 值越大(越不负)说明树越好

# 查看UFBoot支持度解读
# UFBoot >= 95% → 强支持(相当于传统bootstrap的95%)
# SH-aLRT >= 80% → 分支可信
# 建议标准:UFBoot >= 95% AND SH-aLRT >= 80%

第 5 步:蛋白质序列建树

# 蛋白质序列的用法类似,IQ-TREE 自动检测序列类型
iqtree2 -s protein_aligned.fasta \  # 蛋白质比对文件
        -m MFP \                     # 自动选蛋白质模型(如 LG+G4, WAG+I+G4)
        -bb 1000 \
        -alrt 1000 \
        -nt AUTO

# 也可以指定蛋白质序列类型
iqtree2 -s protein.fasta -st AA -m MFP -bb 1000 -alrt 1000
# -st AA 表示氨基酸序列(默认自动检测)

第 6 步:分区模型(多基因联合建树)

# 当有多个基因/区域时,每个区域可能有不同的进化速率和模型
# 需要准备分区文件

# 分区文件格式(partition.nex):
cat << 'EOF' > partition.nex
#nexus
begin sets;
    charset gene1 = 1-500;         /* 第1到500位是gene1 */
    charset gene2 = 501-1200;      /* 第501到1200位是gene2 */
    charset gene3 = 1201-1800;     /* 第1201到1800位是gene3 */
    charpartition mymodel = 
        gene1: gene1, 
        gene2: gene2, 
        gene3: gene3;
end;
EOF

# 运行分区模型建树
iqtree2 -s concatenated.fasta \   # 拼接后的序列文件
        -p partition.nex \         # 分区文件(-p = partition)
        -m MFP \                   # 每个分区自动选模型
        -bb 1000 \
        -alrt 1000 \
        -nt AUTO

# 高级:按密码子位置分区(对编码序列很有用)
cat << 'EOF' > codon_partition.nex
#nexus
begin sets;
    charset codon1 = 1-1500\3;     /* 密码子第1位:1,4,7,...1498 */
    charset codon2 = 2-1500\3;     /* 密码子第2位:2,5,8,...1499 */
    charset codon3 = 3-1500\3;     /* 密码子第3位:3,6,9,...1500 */
end;
EOF

第 7 步:可视化

# 方法1:FigTree(GUI工具)
# 下载 FigTree,直接打开 .treefile 文件

# 方法2:用 R 的 ggtree 包
cat << 'EOF' > plot_tree.R
library(ggtree)                                # 加载ggtree包
library(treeio)                                # 加载treeio包

# 读取带支持度的树
tree <- read.tree("output_tree.contree")       # 读取一致树

# 基本树形图
p <- ggtree(tree) +                            # 画树
     geom_tiplab(size=2) +                      # 添加末端标签
     geom_nodelab(aes(label=label),             # 添加节点支持度
                  size=2, hjust=-0.2) +
     theme_tree2() +                            # 添加刻度
     ggtitle("ML Phylogenetic Tree (IQ-TREE)")  # 标题

ggsave("phylogenetic_tree.pdf", p,             # 保存为PDF
       width=10, height=15)
EOF
Rscript plot_tree.R
# 方法3:iTOL在线可视化
# 1. 访问 https://itol.embl.de/
# 2. 上传 .treefile 文件
# 3. 在线编辑颜色、标注、分支样式等
# 4. 导出为PDF/SVG

三、高级功能

3.1 一致性因子(Concordance Factors)

# 先建单基因树
iqtree2 -S partition.nex \        # -S 表示每个分区独立建树
        --prefix loci_trees       # 输出前缀

# 计算 gCF(基因一致性因子)和 sCF(位点一致性因子)
iqtree2 -t output_tree.treefile \ # 物种树
        --gcf loci_trees.treefile \ # 单基因树集合
        -s concatenated.fasta \    # 序列文件
        --scf 100 \                # 采样100个四分组计算sCF
        --prefix concord           # 输出前缀

# gCF = 支持该分支的基因树比例
# sCF = 支持该分支的信息位点比例
# gCF/sCF 低 + UFBoot 高 → 可能存在不完全谱系分选(ILS)

3.2 拓扑检验

# AU test(约似乎无偏检验)比较不同树拓扑
iqtree2 -s trimmed.fasta \
        -z candidate_trees.txt \   # 候选树集合(每行一棵树,Newick格式)
        -m GTR+G4 \                # 指定模型
        -n 0 \                     # 不搜索新树
        -zb 10000 \                # 10000次RELL重抽样
        -au                         # 执行AU test

# 结果在 .iqtree 文件中查看
# p-AU > 0.05 的树不能被拒绝

四、常见报错与解决

报错信息原因解决方法
Alignment has X sequences but 0 sites比对文件格式错误检查文件格式(FASTA/PHYLIP/NEXUS)
ERROR: No parsimony-informative sites序列太保守,没有变异位点检查序列质量和比对结果
WARNING: Number of threads seems too big线程数超过位点数减少线程数或用 -nt AUTO
checkpoint file exists之前的运行有残留删除 .ckp.gz 文件或换前缀
Estimated memory: XXX GB内存需求大减少序列数或使用 -mem 限制
UFBoot 值全是 100%序列太长或太相似正常现象,但要注意过拟合
树的拓扑与已知关系矛盾长枝吸引或模型选择不当尝试不同模型,检查长枝效应

五、面试高频问题

Q1:IQ-TREE 和 RAxML 的区别?

两者都是 ML 建树软件。IQ-TREE 内置 ModelFinder(自动选模型),UFBoot 更快更准确。RAxML 在超大数据集上可能更快(RAxML-NG),但需要预先指定模型。近年论文中 IQ-TREE 使用率已超过 RAxML。

Q2:UFBoot 和传统 bootstrap 的区别?

传统 bootstrap 对每次重抽样都重新搜索最优树(很慢),UFBoot 用 RELL 近似(快 10~40 倍),且 UFBoot 的偏差更小。UFBoot 95% 的含义约等于传统 bootstrap 的 95%。

Q3:什么是 BIC,为什么用 BIC 选模型?

BIC(贝叶斯信息准则)= -2ln(L) + k·ln(n),同时考虑似然值和模型复杂度。相比 AIC,BIC 更惩罚复杂模型,倾向于选择更简单的模型,减少过拟合风险。

Q4:gCF 低但 UFBoot 高说明什么?

说明该分支在联合数据中有强支持,但单个基因间存在冲突。可能原因是不完全谱系分选(ILS)、基因流、或基因树估计误差。这是一个重要的进化信号,不是建树的错误。


六、速查表

# === IQ-TREE 速查 ===

# 标准建树(最常用)
iqtree2 -s aligned.fasta -m MFP -bb 1000 -alrt 1000 -nt AUTO

# 蛋白质建树
iqtree2 -s protein.fasta -st AA -m MFP -bb 1000 -alrt 1000

# 分区模型建树
iqtree2 -s concat.fasta -p partition.nex -m MFP -bb 1000

# 密码子模型建树
iqtree2 -s coding.fasta -st CODON -m MFP -bb 1000

# 一致性因子
iqtree2 -S partition.nex --prefix loci
iqtree2 -t species.tree --gcf loci.treefile -s concat.fasta --scf 100

# 拓扑检验
iqtree2 -s aligned.fasta -z trees.txt -n 0 -zb 10000 -au

# 常用参数速记:
# -s    序列文件
# -m    模型(MFP=自动选择)
# -bb   UFBoot次数
# -alrt SH-aLRT次数
# -nt   线程数(AUTO自动)
# -p    分区文件
# -st   序列类型(DNA/AA/CODON)
# -pre  输出前缀

参考资料:IQ-TREE 2 (Minh et al. 2020, MBE)、IQ-TREE 3 Manual (2025)、ggtree R包、iTOL在线工具