系统发育分析与进化树构建
1. 一句话说明
系统发育分析就是通过比较 DNA/蛋白质序列的相似性和差异,推断物种或基因之间的"亲缘关系族谱",最终画出进化树(phylogenetic tree)——谁和谁是近亲、谁先分家、什么时候分的。
2. 什么是系统发育(白话版)
2.1 核心思想
白话类比:
想象你有 100 个人的 DNA,想知道谁和谁是亲戚。
做法是:比对每个人 DNA 的差异位点,差异越少 = 关系越近。
最后画一张"家族树",把所有人的亲缘关系展示出来。
系统发育做的是同样的事,只不过对象换成了:
- 不同物种(比如人、猩猩、猴子是怎么进化来的)
- 不同细菌(T2D 患者肠道里的菌谁和谁是近亲)
- 不同基因家族(同一个基因在不同物种里怎么演变的)
2.2 关键概念
| 概念 | 白话解释 | 英文 |
|---|
| 系统发育树 | 物种/序列的"家族关系图" | Phylogenetic tree |
| 分支(branch) | 树上的线段,长度代表进化距离 | Branch |
| 节点(node) | 树上的分叉点,代表共同祖先 | Node |
| 叶节点(tip/leaf) | 树的末端,代表当前物种/序列 | Tip/Leaf |
| 根(root) | 树的最底部,代表所有物种的共同祖先 | Root |
| 有根树 vs 无根树 | 有根树有方向(知道谁是祖先),无根树只看相对关系 | Rooted vs Unrooted |
| Bootstrap 值 | 分支的"可信度评分",>=70 较可信,>=95 很可信 | Bootstrap support |
| 外群(outgroup) | 故意加入一个远亲,帮助确定树的根在哪里 | Outgroup |
2.3 进化树的读法
┌── 物种A
┌────┤ ← 这个分叉点 = A和B的共同祖先
│ └── 物种B
────┤ ← 这个分叉点 = (A,B)和(C,D)的共同祖先
│ ┌── 物种C
└────┤
└── 物种D
读法规则:
1. 分支越短 = 进化差异越小 = 关系越近
2. A和B 共享一个最近共同祖先(比 C、D 近)
3. 分支上的数字 = Bootstrap 支持值(越高越可信)
3. 三大建树方法
3.1 距离法(Distance-based)—— 代表:Neighbor-Joining(NJ)
白话:
先算出所有序列两两之间的"距离分数"(差异有多大),
填成一张距离矩阵表,然后按"最近的先合并"的策略把树拼出来。
就像聚类分析——先把最像的两个聚一起,再往外扩。
原理:计算序列间的遗传距离 → 构建距离矩阵 → 逐步合并最近邻
| 维度 | 说明 |
|---|
| 优点 | 速度极快(几百条序列秒出结果);直观好理解 |
| 缺点 | 丢失了原始序列信息(压缩成一个距离数字);不考虑进化模型;大数据集精度不够 |
| 适用 | 快速预览、数据探索、序列数量巨大(>10000条)时的初步分析 |
| 工具 | MEGA、PHYLIP、FastME |
3.2 最大似然法(Maximum Likelihood, ML)
白话:
给定一个进化模型(比如"A突变成T的概率是多少"),
尝试所有可能的树形结构,算每棵树"生成当前序列数据的概率",
挑概率最高的那棵树作为最终结果。
类比:你看到一组考试分数,想猜班级的平均分和标准差。
ML 的做法是:试不同的平均分/标准差组合,
哪个组合最可能产生你看到的这组分数,就选哪个。
原理:在给定替换模型下,搜索使数据出现概率(似然值)最大的树
| 维度 | 说明 |
|---|
| 优点 | 统计学严谨;利用了完整序列信息;可以进行模型选择和假设检验 |
| 缺点 | 计算量大(几百条序列可能需要几小时);依赖模型选择正确性 |
| 适用 | 发表论文的首选方法;序列数 <5000 条的正式分析 |
| 工具 | IQ-TREE 2(v2.4.0,当前主流)、RAxML-NG(v2.0.1)、PhyML |
3.3 贝叶斯法(Bayesian Inference, BI)
白话:
和 ML 类似,但加入了"先验信念"。
比如你觉得"哺乳动物大概 6500 万年前分化",
贝叶斯法会把这个先验知识和序列数据结合起来,
用 MCMC 采样跑很多轮,最后给出一个"后验概率分布"。
类比:你猜明天下雨的概率。
ML 纯看天气数据,贝叶斯还会考虑"这个季节一般多雨"这个先验。
原理:先验概率 × 似然 = 后验概率,用 MCMC 采样逼近后验分布
| 维度 | 说明 |
|---|
| 优点 | 可以融合先验信息;后验概率比 Bootstrap 更直观好解释;适合分子钟/分化时间估算 |
| 缺点 | 计算量最大(可能跑几天到几周);MCMC 链可能不收敛;先验选择有主观性 |
| 适用 | 分子钟分析、分化时间估算、需要后验概率的正式研究 |
| 工具 | MrBayes、BEAST2、RevBayes |
3.4 三种方法对比速查
| 对比维度 | NJ(距离法) | ML(最大似然) | BI(贝叶斯) |
|---|
| 速度 | 极快(秒级) | 中等(分钟~小时) | 最慢(小时~天) |
| 精度 | 一般 | 高 | 高 |
| 需要进化模型 | 不需要 | 需要 | 需要 |
| 分支支持度 | Bootstrap | Bootstrap/SH-aLRT | 后验概率(PP) |
| 发论文推荐度 | 辅助用 | 首选 | 进化研究首选 |
| 可信度阈值 | Bootstrap ≥70 | Bootstrap ≥70, UFBoot ≥95 | PP ≥0.95 |
4. 完整建树流程(从序列到树)
原始序列 → 多序列比对 → 修剪 → 模型选择 → 建树 → 评估 → 可视化
(FASTA) (MAFFT) (trimAl) (ModelFinder) (IQ-TREE) (Bootstrap) (iTOL/ggtree)
4.1 Step 1:序列收集
# ====== 从 NCBI 下载 16S 序列 ======
# 方法一:用 Entrez Direct(NCBI 命令行工具)
# 搜索 Bacteroides 属的 16S rRNA 基因序列,下载前 50 条
esearch -db nucleotide -query "Bacteroides[Organism] AND 16S ribosomal RNA[Title]" | \
efetch -format fasta | \ # 下载 FASTA 格式
head -500 > bacteroides_16s.fasta # 保存前 ~50 条序列
# 方法二:从 SILVA 数据库下载高质量 16S 序列
# 访问 https://www.arb-silva.de/ 手动下载
# SILVA 的优势:序列经过质控,分类信息更准确
# 方法三:从自己的项目中提取(比如 T2D 项目的 Kraken2 分类结果)
# 提取特定物种的序列
seqkit grep -r -p "Bacteroides" all_contigs.fasta > target_sequences.fasta
4.2 Step 2:多序列比对(MAFFT v7.526)
# ====== 安装 MAFFT ======
conda install -c bioconda mafft # conda 安装
# ====== 运行比对 ======
# --auto:自动选择最合适的算法(根据序列数量和长度)
# --thread 4:用 4 个 CPU 核心并行计算
mafft --auto --thread 4 input_sequences.fasta > aligned.fasta
# ====== 不同精度的比对策略 ======
# L-INS-i:最精确,适合 <200 条序列(推荐发文章用)
mafft --localpair --maxiterate 1000 --thread 4 input.fasta > aligned.fasta
# FFT-NS-2:快速模式,适合 >2000 条序列
mafft --retree 2 --thread 4 input.fasta > aligned.fasta
# 查看比对结果的基本统计
# 比对后的序列应该等长(因为插入了 gap)
grep -c ">" aligned.fasta # 统计序列数量
白话:比对就是把所有序列"对齐",让相同位置的碱基排成一列,方便后续比较差异。就像把几本不同版本的书摊开,逐页对齐找不同。
4.3 Step 3:修剪比对结果(trimAl)
# ====== 安装 trimAl ======
conda install -c bioconda trimal # conda 安装
# ====== 自动修剪(推荐) ======
# -automated1:自动选择最优修剪策略(基于比对特征)
# 适合大多数系统发育分析场景
trimal -in aligned.fasta -out trimmed.fasta -automated1
# ====== 手动设置阈值 ======
# -gt 0.8:只保留 80% 以上序列都有碱基(非 gap)的列
# -cons 60:只保留保守度 >60% 的列
trimal -in aligned.fasta -out trimmed.fasta -gt 0.8 -cons 60
# ====== 用 Gblocks(另一个修剪工具) ======
# -t=d 表示 DNA 序列(-t=p 表示蛋白质)
# -b4=5 表示允许连续非保守列最多 5 个
Gblocks aligned.fasta -t=d -b4=5 -b5=h
# ====== 查看修剪前后的变化 ======
# 修剪前的列数
grep -v ">" aligned.fasta | head -1 | wc -c
# 修剪后的列数(应该变少了,去掉了噪音位点)
grep -v ">" trimmed.fasta | head -1 | wc -c
白话:比对后有些列全是 gap(空位)或者变异太多没有参考价值,修剪就是把这些"噪音列"去掉,只留下有用的信息。就像修剪照片——把模糊的边缘裁掉,留下清晰的主体。
4.4 Step 4:模型选择(ModelFinder,IQ-TREE 内置)
# ====== 什么是进化模型? ======
# 进化模型描述碱基/氨基酸替换的概率。
# 比如 GTR 模型:A→T、A→C、A→G 各有不同的替换概率。
# 选错模型 → 建出来的树不准确。
# ====== 用 IQ-TREE 的 ModelFinder 自动选模型 ======
# -s:输入比对文件
# -m MF:只做模型选择,不建树
# 结果会输出到 trimmed.fasta.iqtree 文件中
iqtree2 -s trimmed.fasta -m MF -T AUTO
# 查看结果(找 Best-fit model 那行)
grep "Best-fit model" trimmed.fasta.iqtree
# 典型输出:Best-fit model: GTR+F+I+G4 chosen according to BIC
# ====== 常见 DNA 替换模型 ======
# JC(Jukes-Cantor):最简单,所有碱基替换概率相同
# K2P(Kimura 2-parameter):区分转换和颠换
# HKY:在 K2P 基础上允许碱基频率不等
# GTR(General Time Reversible):最复杂,6 个独立替换率
# +I:允许一部分位点不变(invariant sites)
# +G4:位点间速率异质性(4 个 gamma 类别)
4.5 Step 5:建树(IQ-TREE 2 v2.4.0)
# ====== 安装 IQ-TREE 2 ======
conda install -c bioconda iqtree # conda 安装
# ====== 标准建树命令(推荐,一步完成模型选择+建树+Bootstrap) ======
# -s:输入修剪后的比对文件
# -m MFP:先用 ModelFinder 选最优模型,然后用该模型建树
# -B 1000:做 1000 次 ultrafast bootstrap 评估分支可信度
# -alrt 1000:同时做 SH-aLRT 检验(双重验证)
# -T AUTO:自动选择最优线程数
iqtree2 -s trimmed.fasta -m MFP -B 1000 -alrt 1000 -T AUTO
# ====== 指定模型建树 ======
# 如果已经知道最佳模型(比如 Step 4 选出来的)
iqtree2 -s trimmed.fasta -m GTR+F+I+G4 -B 1000 -T AUTO
# ====== 输出文件说明 ======
# trimmed.fasta.treefile → Newick 格式的树文件(用于可视化)
# trimmed.fasta.iqtree → 详细分析报告(模型参数、日志似然值等)
# trimmed.fasta.log → 运行日志
# trimmed.fasta.contree → Consensus tree(含 bootstrap 值)
# trimmed.fasta.splits.nex → Bootstrap 分裂信息
# ====== 用 RAxML-NG 建树(替代方案,v2.0.1) ======
# --all:模型选择+建树+Bootstrap 一步完成
# --model:指定替换模型
# --bs-trees 100:做 100 次标准 bootstrap
# --threads auto:自动线程
raxml-ng --all --msa trimmed.fasta --model GTR+G --bs-trees 100 --threads auto
4.6 Step 6:Bootstrap 评估
# IQ-TREE 的 ultrafast bootstrap(UFBoot)已经在 Step 5 中完成(-B 1000)
# 结果直接写在 .treefile 中的分支上
# ====== 解读 Bootstrap 值 ======
# UFBoot ≥ 95:强支持(分支可信)
# UFBoot 70-94:中等支持
# UFBoot < 70:弱支持(分支不可靠,可能需要更多数据)
#
# SH-aLRT ≥ 80:强支持
# SH-aLRT < 80:弱支持
#
# 论文中通常报告两个值:SH-aLRT/UFBoot,比如 95/99
# ====== 传统 Bootstrap(更慢但更保守) ======
# -b 100:做 100 次传统 bootstrap(比 UFBoot 慢 10-40 倍)
iqtree2 -s trimmed.fasta -m GTR+F+I+G4 -b 100 -T AUTO
4.7 Step 7:可视化
方案一:iTOL 在线可视化(v7.5.1,推荐快速出图)
# 1. 打开浏览器访问 https://itol.embl.de/
# 2. 上传 .treefile 文件
# 3. 在线编辑:
# - 切换树的布局(矩形/圆形/无根)
# - 给分支上色(按物种分类)
# - 添加 bootstrap 值显示
# - 添加热图、柱状图等注释
# 4. 导出为 PDF/SVG/PNG
# iTOL 注释文件格式示例(添加颜色标签)
# 创建 colors.txt,上传到 iTOL
# 格式:序列名称, 颜色, 标签
cat > itol_colors.txt << 'EOF'
DATASET_COLORSTRIP
SEPARATOR TAB
DATASET_LABEL Phylum
COLOR #ff0000
DATA
Bacteroides_fragilis #e41a1c Bacteroidetes
Escherichia_coli #377eb8 Proteobacteria
Lactobacillus_acidophilus #4daf4a Firmicutes
EOF
方案二:ggtree(R 包,推荐发文章)
# ====== 安装 ggtree ======
# BiocManager 安装(R 包管理器)
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ggtree") # 安装 ggtree
# ====== 基础绘图 ======
library(ggtree) # 加载 ggtree 包
library(treeio) # 加载树文件读取包
# 读取 IQ-TREE 输出的树文件
tree <- read.tree("trimmed.fasta.treefile") # 读取 Newick 格式
# 基础进化树
ggtree(tree) + # 画树的主体
geom_tiplab(size = 3) + # 添加叶节点标签(物种名)
geom_nodelab(aes(label = label), # 添加 Bootstrap 值
size = 2, hjust = -0.2) +
theme_tree2() # 添加坐标轴(显示进化距离)
# ====== 进阶:圆形树 + 分类着色 ======
# 准备分类信息
group_info <- data.frame(
label = tree$tip.label, # 物种名
phylum = c("Bacteroidetes", "Firmicutes", # 对应的门分类
"Proteobacteria", "Firmicutes") # ...根据实际数据填
)
# 画圆形树并按门着色
ggtree(tree, layout = "circular") %<+% group_info + # 圆形布局 + 合并分类信息
geom_tiplab(aes(color = phylum), size = 2) + # 标签按门着色
geom_tippoint(aes(color = phylum), size = 1.5) + # 叶节点圆点着色
scale_color_brewer(palette = "Set1") + # 使用 Set1 配色方案
theme(legend.position = "right") # 图例放右边
# 保存图片
ggsave("phylogenetic_tree.pdf", width = 10, height = 8) # 保存为 PDF
5. 16S 系统发育在微生物分类中的应用
5.1 为什么用 16S 建系统发育树
16S rRNA 基因是微生物分类的"金标准"基因:
1. 几乎所有细菌/古菌都有(通用性好)
2. 约 1500bp,包含 9 个可变区(V1-V9),提供分类信息
3. 保守区用于设计通用引物,可变区用于区分物种
4. SILVA、Greengenes、RDP 等数据库收录了几百万条 16S 序列
常见应用:
- 新物种发现:测 16S 序列,和已知物种建树,看它在树上的位置
- 菌群结构分析:把样本中所有 OTU/ASV 的代表序列建树
- 分类验证:Kraken2 分类结果不确定时,用 16S 系统发育确认
5.2 16S 建树实操流程
# ====== 从 QIIME2 的 ASV 代表序列开始 ======
# 假设你已经用 QIIME2 的 DADA2 得到了 rep-seqs.fasta
# Step 1: 加入参考序列(外群+已知物种)
# 从 SILVA 下载几条已知物种的 16S 序列作为参考
cat rep-seqs.fasta reference_16s.fasta > combined.fasta
# Step 2: 比对(16S 推荐用 MAFFT 的 L-INS-i)
mafft --localpair --maxiterate 1000 --thread 4 combined.fasta > aligned_16s.fasta
# Step 3: 修剪
trimal -in aligned_16s.fasta -out trimmed_16s.fasta -automated1
# Step 4: 建树
iqtree2 -s trimmed_16s.fasta -m MFP -B 1000 -alrt 1000 -T AUTO
# Step 5: 可视化(上传到 iTOL 或用 ggtree)
6. 和 T2D 项目的关联
6.1 该项目中哪里可以用到
该 T2D 项目用 Kraken2 做了物种分类,得到了差异菌种列表。
系统发育分析可以在以下环节"锦上添花":
1. 差异菌种的进化关系
Kraken2 告诉你 T2D 患者中 Bacteroides fragilis 富集,
你可以把所有差异菌种的 16S 序列建树,看看:
- 富集的菌是不是集中在某个进化分支?(系统发育聚类 = phylogenetic clustering)
- 这暗示"整个进化支系"与疾病相关,而不仅是单个物种
2. UniFrac 距离(系统发育多样性)
普通的 Bray-Curtis 距离只看"物种有没有、多不多"
UniFrac 还考虑了物种之间的进化关系:
- 两个样本都有 Bacteroides,但一个是 B. fragilis,一个是 B. thetaiotaomicron
- Bray-Curtis 会说它们完全不同(不同物种)
- UniFrac 会说它们比较像(同一个属,进化距离近)
3. 功能推断的辅助
进化关系近的细菌通常有相似的代谢功能(系统发育保守性)
如果你发现 T2D 富集菌在树上聚在一起,
可以推测它们可能共享某些影响血糖代谢的功能通路
6.2 面试时如何串联
面试话术模板:
"该 T2D 项目用 Kraken2 做物种分类,发现了若干差异菌种。
为了进一步理解这些差异菌的进化关系,我提取了它们的 16S
代表序列,用 MAFFT 比对、trimAl 修剪、IQ-TREE 建最大
似然树。结果发现 T2D 富集菌集中在 Bacteroidetes 的
某个分支上,提示该进化支系可能整体与疾病相关。
同时在 Beta 多样性分析中,我对比了 Bray-Curtis 和
weighted UniFrac 距离,后者考虑了物种间的系统发育关系,
分组效果更明显。"
7. 面试高频题(5 道)
Q1: 请解释 NJ、ML、贝叶斯三种建树方法的区别
参考回答:
"三种方法的核心区别在于信息利用程度和统计框架:
NJ(距离法):先把序列间的差异压缩成一个距离数字,再按最近邻
策略合并。速度最快但丢失了原始序列信息,适合快速预览。
ML(最大似然法):在给定替换模型下,搜索能让数据出现概率最大
的那棵树。利用了完整序列信息,是发文章的首选。所用的 IQ-TREE
就是 ML 方法,它还内置了 ModelFinder 自动选模型和 ultrafast
bootstrap。
贝叶斯法:在 ML 基础上加入先验分布,用 MCMC 采样得到后验
概率。适合分子钟和分化时间估算,但计算量最大。
我在实际项目中优先用 IQ-TREE 的 ML 方法,需要分化时间
估算时才考虑 BEAST2 的贝叶斯方法。"
Q2: Bootstrap 值代表什么?多少算可信?
参考回答:
"Bootstrap 是通过对比对矩阵的列进行有放回抽样,重新建树
很多次(比如 1000 次),看某个分支在多少比例的重抽样树中
出现。本质上是评估'这个分支是不是因为少数几个位点才出现的'。
IQ-TREE 的 ultrafast bootstrap(UFBoot)阈值:≥95 为强支持。
传统 bootstrap 阈值:≥70 为可接受,≥90 为强支持。
贝叶斯后验概率阈值:≥0.95 为强支持。
注意 UFBoot 的数值通常比传统 bootstrap 高,所以阈值也更严。
论文中我会同时报告 SH-aLRT 和 UFBoot 两个值做交叉验证。"
Q3: 为什么要做多序列比对和修剪?能跳过吗?
参考回答:
"不能跳过,这是建树质量的基础。
多序列比对:把不同长度的序列对齐到同一坐标系,让每一列
代表同源位点。不比对的话,你比较的位置根本不对应,建出来
的树没有生物学意义。
修剪:比对后有些列质量很差(大量 gap 或者随机变异太多),
这些噪音位点会误导建树。trimAl 的 -automated1 会根据
比对质量自动选择修剪策略。
经验法则:修剪掉 10-30% 的列是正常的,如果修剪超过 50%
说明比对质量本身有问题,需要回头检查原始序列。"
Q4: 什么是进化模型?为什么不同数据要选不同模型?
参考回答:
"进化模型描述了碱基替换的概率规则。最简单的 JC 模型假设
所有替换概率相等,GTR 模型有 6 个独立替换率参数。
选模型的原因:不同基因/物种的进化方式不同。比如线粒体基因
转换(transition)远多于颠换(transversion),用 JC 模型
就低估了这种偏向,建出来的树分支长度不准确。
实践中我用 IQ-TREE 的 ModelFinder(-m MFP),它会根据
BIC 准则自动从几百个模型中选最优的。常见结果是 GTR+F+I+G4,
即一般时间可逆模型 + 经验碱基频率 + 不变位点 + gamma
速率异质性。"
Q5: 该 T2D 项目中 UniFrac 和 Bray-Curtis 有什么区别?
参考回答:
"两者都是 Beta 多样性距离,区别在于是否考虑进化关系。
Bray-Curtis:纯粹比较物种丰度的差异,不管物种之间的关系。
如果样本 A 有 Bacteroides fragilis,样本 B 有 Bacteroides
thetaiotaomicron,它会当成完全不同的物种。
UniFrac:先建一棵系统发育树,然后比较两个样本在树上的
共享分支比例。上面的例子中,两个 Bacteroides 在树上很近,
所以 UniFrac 距离会比 Bray-Curtis 小。
weighted UniFrac 还考虑丰度权重,unweighted 只看有没有。
我在 T2D 项目中两种都做了:Bray-Curtis 看组成差异,
weighted UniFrac 看进化相关的组成差异,后者在 T2D 和
健康组之间的分离效果更显著。"
8. 常见报错与解决
| 报错/问题 | 原因 | 解决方法 |
|---|
Alignment has X sequences but Y sites | 修剪太狠,剩余位点太少 | 放宽 trimAl 参数,如 -gt 0.5 |
ERROR: No parsimony-informative sites | 序列太保守或比对有问题 | 检查比对质量,确认序列确实有变异 |
WARNING: bootstrap analysis may be unreliable | UFBoot 重复数太少 | 增加到 -B 5000 或 -B 10000 |
CHECKPOINT: Resuming analysis | IQ-TREE 发现之前的检查点 | 正常,会断点续跑;想重新跑加 -redo |
| MAFFT 比对后序列全是 gap | 输入序列不是同源序列 | 检查序列来源,确认是同一基因/区域 |
| ggtree 画图标签重叠 | 序列太多标签放不下 | 减小字号 size=1 或用圆形布局 layout="circular" |
| iTOL 上传失败 | 树文件格式不对 | 确认是 Newick 格式(以分号结尾),检查有无特殊字符 |
9. 速查表
9.1 建树流程速查
┌─────────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌──────────┐ ┌──────────┐
│ 序列收集 │ → │ 比对 │ → │ 修剪 │ → │ 模型选择 │ → │ 建树 │ → │ 可视化 │
│ NCBI/SILVA │ │ MAFFT │ │ trimAl │ │ ModelFinder│ │ IQ-TREE │ │ iTOL │
│ seqkit │ │ MUSCLE │ │ Gblocks │ │ (内置) │ │ RAxML-NG │ │ ggtree │
└─────────────┘ └──────────┘ └──────────┘ └────────────┘ └──────────┘ └──────────┘
9.2 IQ-TREE 命令速查
# 一键完成(最常用)
iqtree2 -s input.fasta -m MFP -B 1000 -alrt 1000 -T AUTO
# 只做模型选择
iqtree2 -s input.fasta -m MF -T AUTO
# 指定模型建树
iqtree2 -s input.fasta -m GTR+F+I+G4 -B 1000 -T AUTO
# 蛋白质序列建树
iqtree2 -s protein.fasta -m MFP -B 1000 -T AUTO # ModelFinder 自动选蛋白质模型
# 分区模型(不同基因/codon位置用不同模型)
iqtree2 -s concat.fasta -p partition.nex -m MFP+MERGE -B 1000 -T AUTO
# 重新运行(覆盖之前的检查点)
iqtree2 -s input.fasta -m MFP -B 1000 -T AUTO -redo
9.3 参数阈值速查
| 参数 | 推荐值 | 说明 |
|---|
| UFBoot 重复数 | -B 1000(最低),-B 5000(推荐) | 越多越稳定但越慢 |
| SH-aLRT 重复数 | -alrt 1000 | 和 UFBoot 配合使用 |
| UFBoot 可信阈值 | ≥95 | 低于 95 的分支不太可靠 |
| 传统 Bootstrap 阈值 | ≥70 | 标准比 UFBoot 更宽松 |
| 贝叶斯后验概率 | ≥0.95 | PP < 0.95 的分支不可靠 |
| trimAl gap 阈值 | -gt 0.8(严格)/ -gt 0.5(宽松) | 保留 80%/50% 非 gap 的列 |
| MAFFT 线程数 | --thread 4(一般)/ --thread 8(大数据) | 根据 CPU 核心数调整 |
10. 延伸资源
10.1 必读文献
| 文献 | 内容 | 为什么读 |
|---|
| Nguyen et al., 2015, Mol Biol Evol | IQ-TREE 原始论文 | 理解 ML 建树的算法原理 |
| Minh et al., 2020, Mol Biol Evol | IQ-TREE 2 论文 | 了解 UFBoot2、ModelFinder 等新功能 |
| Katoh & Standley, 2013, Mol Biol Evol | MAFFT v7 论文 | 理解不同比对策略的选择依据 |
| Capella-Gutiérrez et al., 2009, Bioinformatics | trimAl 论文 | 了解自动修剪算法 |
| Yu et al., 2017, Methods Ecol Evol | ggtree 论文 | 学习 R 中进化树可视化 |
10.2 在线学习资源
| 资源 | 链接 | 说明 |
|---|
| IQ-TREE 官方文档 | http://www.iqtree.org/doc/ | 最权威的 IQ-TREE 使用指南 |
| iTOL 在线工具 | https://itol.embl.de/ | 在线进化树可视化和注释 |
| MAFFT 官网 | https://mafft.cbrc.jp/alignment/software/ | 比对工具文档和示例 |
| Phylogenetic Biology(Baum & Smith) | 教材 | 系统发育学经典教材 |
| SILVA 数据库 | https://www.arb-silva.de/ | 高质量 16S/18S 参考序列数据库 |
10.3 相关知识库文章
| 编号 | 文章 | 关联点 |
|---|
| 15 | QIIME2 微生物组分析 | 16S 扩增子分析中建系统发育树 |
| 14 | 宏基因组 binning 与 MAGs | MAGs 的物种验证需要系统发育定位 |
| 18 | 多组学整合分析 | 系统发育信息可作为多组学整合的先验知识 |
最后更新:2026-05-03 | 工具版本:IQ-TREE 2 v2.4.0, MAFFT v7.526, RAxML-NG v2.0.1, iTOL v7.5.1