618_系统发育分析IQ-TREE¶
一句话概述: IQ-TREE是当前最流行的最大似然法(ML)系统发育建树软件,集成了模型选择(ModelFinder)、超快速自展值(UFBoot)和丰富的进化模型,一条命令就能完成"选模型+建树+评估"的全流程。
核心知识点速查表¶
| 概念 | 白话解释 |
|---|---|
| Maximum Likelihood (ML) | 最大似然法——找一棵最可能产生观测数据的树 |
| ModelFinder | 自动选择最佳核苷酸/氨基酸替换模型 |
| UFBoot | 超快速自展检验——评估分支可靠性(比标准Bootstrap快100倍) |
| SH-aLRT | 另一种分支支持度检验(与UFBoot互补) |
| Partition model | 分区模型——不同基因/区域用不同进化模型 |
| gCF/sCF | 基因一致性因子/位点一致性因子——衡量基因树和物种树一致性 |
| AIC/BIC | 模型选择标准(信息准则),越小越好 |
一、安装¶
# === conda安装(推荐)===
conda install -c bioconda iqtree # 安装IQ-TREE 2
iqtree2 --version # 查看版本
# === 直接下载二进制 ===
# 从 https://github.com/iqtree/iqtree2/releases 下载
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
二、基本用法¶
2.1 一条命令完成全部分析¶
# === 最简单用法:自动选模型+建树+评估 ===
iqtree2 \
-s alignment.fasta \ # 输入多序列比对文件
-m MFP \ # ModelFinder Plus(自动选最佳模型)
-bb 1000 \ # 1000次UFBoot自展
-alrt 1000 \ # 1000次SH-aLRT检验
-nt AUTO \ # 自动选择线程数
-pre output_prefix # 输出文件前缀
# 输出文件:
# .treefile — 最终树文件(Newick格式)
# .iqtree — 详细分析报告
# .log — 日志文件
# .model.gz — 模型选择结果
# .bionj — 初始NJ树
# .contree — 一致性树(带bootstrap值)
# .ckp.gz — 检查点文件(可恢复中断的分析)
2.2 分步运行¶
# === 第1步:只做模型选择 ===
iqtree2 -s alignment.fasta -m TESTNEW -nt AUTO
# TESTNEW: 测试所有模型(比MFP更全面但更慢)
# 查看结果
grep "Best-fit model" output_prefix.iqtree
# === 第2步:用选好的模型建树 ===
iqtree2 \
-s alignment.fasta \
-m GTR+F+I+R4 \ # 使用选好的模型
-bb 1000 \ # UFBoot
-alrt 1000 \ # SH-aLRT
-nt 16 # 16线程
2.3 DNA vs 蛋白质序列¶
# === DNA序列 ===
iqtree2 -s dna_alignment.fasta -m MFP -bb 1000 -alrt 1000 -nt AUTO
# 常见DNA模型:GTR+F+I+G4, HKY+F+G4, TN+F+R3
# === 蛋白质序列 ===
iqtree2 -s protein_alignment.fasta -m MFP -bb 1000 -alrt 1000 -nt AUTO
# 常见蛋白模型:LG+F+I+G4, WAG+G4, JTT+R4
# === 密码子模型 ===
iqtree2 -s codon_alignment.fasta -st CODON -m MFP -bb 1000 -nt AUTO
三、高级用法¶
3.1 分区模型(多基因分析)¶
# 当多个基因拼接在一起分析时,不同基因可以用不同模型
# === 准备分区文件 partition.nex ===
cat > partition.nex << 'EOF'
#nexus
begin sets;
charset gene1 = 1-500; /* 第1-500位是gene1 */
charset gene2 = 501-1200; /* 第501-1200位是gene2 */
charset gene3 = 1201-1800; /* 第1201-1800位是gene3 */
end;
EOF
# === 边缘链接模型(不同基因共享分支长度)===
iqtree2 \
-s concat_alignment.fasta \ # 拼接后的比对
-p partition.nex \ # 分区文件(-p = edge-linked)
-m MFP \ # 每个分区自动选模型
-bb 1000 \
-alrt 1000 \
-nt AUTO
# === 边缘独立模型(每个基因独立的分支长度)===
iqtree2 \
-s concat_alignment.fasta \
-Q partition.nex \ # -Q = edge-unlinked(更自由)
-m MFP \
-bb 1000 \
-nt AUTO
3.2 一致性因子(Concordance Factor)¶
# === 基因一致性因子(gCF)和位点一致性因子(sCF)===
# 先对每个基因独立建树
iqtree2 -S gene_alignment_dir/ \ # -S: 对目录中每个比对独立建树
--prefix loci \ # 输出前缀
-nt AUTO
# 然后计算gCF和sCF
iqtree2 \
-t species_tree.treefile \ # 物种树
--gcf loci.treefile \ # 所有基因树
-s concat_alignment.fasta \ # 拼接比对(计算sCF用)
--scf 100 \ # 位点一致性因子的抽样次数
--prefix concord # 输出前缀
# gCF: 支持该分支的基因树比例
# sCF: 支持该分支的位点比例
# 高Bootstrap但低gCF说明可能存在不完全谱系分选
3.3 多次独立搜索¶
# 对困难数据集做多次独立搜索,报告最优树
iqtree2 \
-s alignment.fasta \
-m MFP \
--runs 10 \ # 10次独立搜索
-bb 1000 \
-nt AUTO
# 程序会报告最高似然值的树
四、结果解读¶
4.1 查看详细报告¶
# 查看IQ-TREE报告中的关键信息
grep "Best-fit model" output_prefix.iqtree # 最佳模型
grep "Log-likelihood" output_prefix.iqtree # 对数似然值
grep "Tree length" output_prefix.iqtree # 树长
grep "TOTAL" output_prefix.iqtree # 总CPU时间
4.2 解读分支支持值¶
# .treefile 中的支持值格式:
# (A:0.1,(B:0.2,C:0.3)95/100:0.4)
# 95 = SH-aLRT支持度
# 100 = UFBoot支持度
# 判断标准:
# UFBoot >= 95%: 强支持
# UFBoot 80-95%: 中等支持
# UFBoot < 80%: 弱支持
# SH-aLRT >= 80%: 可靠
4.3 R语言可视化¶
library(ggtree) # 加载ggtree画树
library(treeio) # 读取树文件
# 读取IQ-TREE的树
tree <- read.iqtree("output_prefix.treefile") # 读取带支持值的树
# 画树并显示支持值
ggtree(tree) +
geom_tiplab(size = 3) + # 显示叶节点标签
geom_nodelab( # 显示节点支持值
aes(label = paste0(SHaLRT, "/", UFboot)),
size = 2, hjust = -0.1
) +
geom_treescale() + # 添加比例尺
theme_tree2() # 树主题
ggsave("phylogenetic_tree.pdf", width = 10, height = 8)
五、实战:16S rRNA系统发育分析¶
#!/bin/bash
# 16S rRNA系统发育分析完整流程
# === 第1步:多序列比对 ===
mafft --auto 16s_sequences.fasta > 16s_aligned.fasta # MAFFT比对
# === 第2步:修剪比对(去除gap多的位置)===
trimal -in 16s_aligned.fasta \
-out 16s_trimmed.fasta \
-automated1 # 自动选择修剪策略
# === 第3步:IQ-TREE建树 ===
iqtree2 \
-s 16s_trimmed.fasta \ # 修剪后的比对
-m MFP \ # 自动选模型
-bb 1000 \ # 1000次UFBoot
-alrt 1000 \ # SH-aLRT
-nt AUTO \ # 自动线程
-pre 16s_tree # 输出前缀
# === 第4步:查看结果 ===
echo "最佳模型:"
grep "Best-fit model" 16s_tree.iqtree
echo "树文件: 16s_tree.treefile"
echo "用FigTree或iTOL打开可视化"
六、常用参数速查¶
| 参数 | 说明 |
|---|---|
-s file | 输入比对文件 |
-m MFP | ModelFinder Plus自动选模型 |
-m TEST | 测试模型但不建树 |
-bb N | N次UFBoot |
-alrt N | N次SH-aLRT |
-nt AUTO | 自动选线程数 |
-p file | 分区文件(edge-linked) |
-Q file | 分区文件(edge-unlinked) |
-S dir | 对目录中每个文件独立建树 |
--runs N | N次独立搜索 |
-st DNA/AA/CODON | 序列类型 |
--prefix name | 输出前缀 |
-redo | 覆盖已有结果重新运行 |
七、常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
Alignment has X sequences < 4 | 序列太少 | 至少需要4条序列 |
ERROR: Sequences are not aligned | 输入未比对 | 先用MAFFT比对 |
Checkpoint file found | 之前运行中断 | 加-redo重新运行 |
WARNING: Bootstrap not converged | 1000次不够 | 增加到5000次 |
Memory allocation failed | 内存不足 | 减少线程或用-mem限制 |
Model not supported | 模型名写错 | 用-m MFP自动选择 |
八、面试高频题¶
Q1:最大似然法建树的原理是什么?¶
答: ML法的核心思想:给定一个进化模型和序列比对,计算每种可能的树拓扑产生当前数据的概率(似然值),选择似然值最高的树作为最优树。实际操作中不可能穷举所有树(数量随物种数指数增长),所以用启发式搜索(如NNI、SPR)在树空间中寻找最优解。IQ-TREE的算法在同等计算时间内找到的树比RAxML和PhyML更好(87%的测试数据集中)。
Q2:UFBoot和传统Bootstrap有什么区别?¶
答: 传统非参数Bootstrap对比对数据重抽样100-1000次,每次都要重新建树,非常耗时。UFBoot是IQ-TREE的超快速自展方法,速度快100倍以上。区别在于:传统Bootstrap倾向于高估支持度,而UFBoot更保守、更接近真实支持度。因此UFBoot>=95%就算强支持(传统Bootstrap要>=70%才算)。建议同时报告UFBoot和SH-aLRT两个值。
Q3:ModelFinder是做什么的?¶
答: ModelFinder自动测试不同的核苷酸/氨基酸替换模型,用AIC/BIC信息准则选择最佳模型。比如对于DNA序列,它会测试JC、HKY、GTR等替换模型,加上是否考虑不变位点(+I)、速率异质性(+G4/+R4)等。ModelFinder比jModelTest快10-100倍。选对模型很重要——用错模型可能导致建出错误的树。
Q4:什么是分区模型,什么时候用?¶
答: 当分析多个基因(或密码子不同位置)的拼接数据时,不同区域的进化速率和模式可能不同。分区模型允许每个基因/区域用不同的替换模型。比如gene1用GTR+G4,gene2用HKY+I。用-p参数指定分区,ModelFinder会自动为每个分区选最佳模型。不用分区模型可能导致参数估计偏差。
参考资料:IQ-TREE 2: Minh et al., MBE 2020 | ModelFinder: Kalyaanamoorthy et al., Nat Methods 2017 | UFBoot2: Hoang et al., MBE 2018 | 官网: iqtree.github.io