跳转至

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 MFPModelFinder Plus自动选模型
-m TEST测试模型但不建树
-bb NN次UFBoot
-alrt NN次SH-aLRT
-nt AUTO自动选线程数
-p file分区文件(edge-linked)
-Q file分区文件(edge-unlinked)
-S dir对目录中每个文件独立建树
--runs NN次独立搜索
-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 converged1000次不够增加到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