
简介FastTree 可以基于核酸或者蛋白多序列比对结果构建近似最大似然Approximately-Maximum-Likelihood系统发育树。 它可以处理多达百万条序列的比对文件内存和耗时可控。对于大数据集比 PhyML、RAxML 快 100–1000 倍。 开源地址官网FastTree 2.2: Approximately-Maximum-Likelihood Trees for Large AlignmentsGithubGitHub - morgannprice/fasttree: FastTree 2: Approximately-Maximum-Likelihood Trees for Large Alignments · GitHub精度说明 默认参数下FastTree 精度优于 PhyML 3远优于传统距离矩阵类建树方法。 替换模型核酸Jukes-Cantor、GTR蛋白JTT、WAG、LG 位点异质性默认采用 CAT 近似模型给每个位点分配独立进化速率。 分支可靠性输出 SH-like 局部支持值和 PhyML3 的 SH-like support 算法一致。更多文档入口HowFastTree 2.2: Approximately-Maximum-Likelihood Trees for Large AlignmentsInstallFastTree 2.2: Approximately-Maximum-Likelihood Trees for Large AlignmentsUsageFastTree 2.2: Approximately-Maximum-Likelihood Trees for Large AlignmentsPerformance / AccuracyFastTree 2.2: Approximately-Maximum-Likelihood Trees for Large Alignments、FastTree 2.2: Approximately-Maximum-Likelihood Trees for Large Alignments特色功能Gamma20OpenMP 多线程自定义替换矩阵FAQ原理五大建树阶段启发式邻接树Heuristic Neighbor-Joining最小进化Minimum EvolutionNNI SPR 重排距离校正最大似然拓扑优化与分支长度优化ML局部支持值计算SH test1. 启发式邻接树FastTree 使用改良版邻接算法生成初始拓扑不存储距离矩阵而是存储节点 profile大幅降低内存。 三层启发加速记录每个节点最优配对爬山搜索寻找更优配对top-hits 策略避免计算全部两两距离局限邻接阶段距离没有多重替换校正会受到长枝吸引LBA影响后续最小进化阶段修正这个问题。2. 最小进化 ME 阶段通过 NNI、SPR 重排不断降低总树长和 FastME 思路接近但基于 profile 而非距离矩阵速度更快。 默认4*log2(N)轮 NNI2 轮 SPR。 SPR 代价高FastTree 将 SPR 拆解成一串 NNI只延伸最优分支链。 在噪声不大的距离矩阵下NNISPR 足以收敛到较优拓扑。距离计算规则蛋白BLOSUM45 矩阵校正公式-1.3 * log(1-d)核酸JC 距离-0.75*log(1 - 4/3 d)两条序列比对gap 位点直接忽略两个 profile 比对按非 gap 比例加权3. 最大似然 ML 优化在 ME 树基础上同时优化拓扑 枝长。 模型JC / GTR核酸JTT / WAG / LG蛋白。 CAT 模型默认 20 个速率分类速率几何分布 0.05~20贝叶斯先验分配每个位点到最可能速率组避免小比对过拟合。ML 搜索提速策略也是和 RAxML 核心区别只做 NNI不做 SPR同一时间只维护一棵拓扑位点速率、模型参数只优化一次不每轮 NNI 都重算NNI 之间不单独迭代优化枝长枝长收敛阈值0.0001 或者 枝长的 0.1%取较大值四元组似然优化最多 2 轮第一轮后似然差 5 则直接抛弃该拓扑连续两轮似然提升不足 0.1 的子树直接跳过分支稳定、显著优于星型树时不再尝试替代拓扑限制 NNI 轮次上限2*log2(N)保证运行时间可控一般提前收敛4. 局部支持值 SH-like support对每个分支拆分评估 3 种四元组拓扑(A,B),(C,D)/(A,C),(B,D)/(A,D),(B,C)使用 SH 检验对比。说明使用 CAT 近似、不完整重优化枝长结果和 PhyML3 的 SH-like 支持几乎一致两者默认 1000 次重采样重采样比对不重新优化枝长。 传统 bootstrap 怎么做FastTree 不内置seqbootphylip生成重采样比对FastTree-n批量分析所有重采样比对CompareToBootstrap.pl 对比原始树和 bootstrap 树 超大比对推荐-intree1全局快速 bootstrap以原始比对树作为每一轮重采样的起始树速度很快相关性高r0.975。 关闭 ML 阶段-noml则会使用旧版最小进化局部 bootstrap。编译 安装 FastTree可执行文件FastTree 单线程版FastTreeMP OpenMP 多线程版FastTree.exe Windows 版FastTree.c 源码单线程编译gcc -O3 -fopenmp-simd -funsafe-math-optimizations -marchnative -o FastTree FastTree.c -lmMac 注意需要安装 Xcode 命令行工具-finline-functions可能报错可删掉。多线程 FastTreeMPgcc -DOPENMP -O3 -fopenmp -fopenmp-simd -funsafe-math-optimizations -marchnative -o FastTree FastTree.c -lmMac 原生 clang 对 OpenMP 支持差建议换 gcc。开源协议自由修改分发改进建议发邮件 fasttreemicrobesonline.org。 历史版本ChangeLog.txt/github old 分支。运行命令重点你跑 TE 树高频用✅ 蛋白比对默认 JTTCATFastTree alignment_file tree_file # 或者 FastTree alignment.file tree_file✅ 蛋白换成 WAG / LG你 Gypsy RT 蛋白树常用 LGFastTree -lg pep.aln tree.newick FastTree -wag pep.aln tree.newick✅ 核酸比对 GTRCATFastTree -gtr -nt alignment.file tree_file不加-gtr则默认 JCCAT。✅-gammaCAT 跑完之后重新缩放枝长输出 Gamma20 似然值速度仅慢约 5%Gamma 似然跨样本可比适合拓扑 SH/AU 检验搭配-log。FastTree -gamma -lg pep.aln tree.newickWindowscmd 运行Linux/Mac./FastTree查看参数直接敲 FastTree 或者FastTree -help⚠️ 没有-h输入格式支持 FASTA、交错 PHYLIP。序列 ID 必须唯一序列名不要包含: , ( )否则 newick 树无法解析FASTA 后第一个空格后的内容默认丢弃-quote开启保留空格单引号除外输出树加引号后续 FastTree 无法再读取这棵树PHYLIP支持长 ID块之间名字对齐单文件可放多个比对搭配-n输出格式标准 Newick树根位置无生物学意义。 内部节点携带 SH 支持值范围0~1不是 0~100。 完全相同序列会产生多歧分支冗余序列的父节点无支持值。 可视化工具MEGA、iTOL。速度、复杂度、实测数据单线程基准测试数据集序列数比对长度模型耗时内存RAxML/PhyML 耗时外排通透酶 COG28148362394 aaJTTCAT0.25 h0.35 GB1200hABC 转运蛋白 PF0000539092214 aaJTTCAT1 h0.96 GB——16S rRNA150111287 ntGTRCAT0.66 h0.56 GB99h16S rRNA150111287 ntJCCAT0.49 h0.36 GB——16S rRNA2378821287 ntJCCAT -fastest21.8 h5.8 GB——复杂度默认空间 O (N L a N^1.5)时间 O (N^1.5 log (N) L a)-fastest空间 O (N L a N^1.25)时间 O (N^1.25 L a)N 序列数L 比对长度a 字母表大小核酸 4蛋白 20237k 16S 案例时间拆分-fastest邻接阶段最耗时ML NNI 是每轮最慢的步骤。 FastTreeMP 3 线程一般提速 1.5~1.7 倍邻接阶段可多线程ML NNI、ME 阶段不并行。精度对比小结对比 PhyML3仅 NNIFastTree 略准得益于 ME-SPR 初始树对比 RAxML/PhyML带 SPR 全搜索FastTree 精度略低但速度快几百倍两者不一致的分支大多支持度很低模拟数据几千几万条序列拓扑正确率很高大数据集非常划算似然对比500 条 16S 子集 RAxML GTRΓ4 FastTree GTRCAT PhyML3 GTRΓ4 PhyML3 HKYΓ4 FastTree JCCAT500 条 COG 蛋白家族也有相同趋势。OpenMP 多线程 FastTreeMP并行模块top-hits、NJ 节点距离比对、ML NNI 的 3 个拓扑似然、SH 支持计算。 ⚠️ 重要FastTreeMP非确定性多线程调度顺序会影响 NJ 启发搜索树拓扑可能轻微变化但质量基本一致。 控制线程数export OMP_NUM_THREADS3 ./FastTreeMP -lg pep.aln tree.newick运行FastTreeMP -help会打印当前线程设置。CAT / Gamma20 模型详解-gamma先用 CAT 模型优化树再缩放枝长计算 Gamma20 离散伽马似然。 Gamma20 优势跨运行可比大数据下甚至优于很多工具 Gamma4。 局限核酸 GTRGamma20速率参数没有完全优化精度略降少于 50 条序列的小比对不推荐位点速率估计误差大Gamma20 似然和别的软件 Gamma4 不能直接等价对比原理预先计算 20 个固定速率0.05~20的位点似然Brent 法优化 Gamma 形状参数 α。 常规 Gamma 是等概率离散区间FastTree Gamma20 是按连续 Gamma 积分分配每个速率的权重。自定义氨基酸替换矩阵-trans仅蛋白、仅 ML 阶段生效ME 阶段用-matrix/-nomatrix。 矩阵是制表符分隔顺序A R N D C Q E G H I L K M F P S T W Y V *最后一列是稳态频率 π。 校验条件π 全部 0π 总和 1Q 对角元为负非对角元≥0Q・π 0稳态∑Qᵢᵢπᵢ -1平均突变速率 1时间可逆 Qᵢⱼ / Qⱼᵢ πᵢ / πⱼ单精度版本容易数值不稳定自定义矩阵优先用默认双精度版。FAQ高频踩坑你跑 TE 树经常遇到Q1必须要比对好的序列吗✅ 是。蛋白家族muscle /hmmalignhmmalign 小写是未匹配结构域建议删掉RNAinfernal修剪Gblocks /trimal 去除低质量 gap 列Q2报未识别字符只识别 核酸A C G TU 兼容 蛋白20 标准氨基酸gap-其他字符N、R、X、Z、U 硒代半胱氨酸都会告警当成缺失。Q3大量 0.0001/0.0005 甚至负枝长-noml最小进化阶段负枝长是噪声代表该分支极短、不确定旧单精度版本枝长下限 0.0001新版单精度 0.0005需要精确短枝用默认双精度版本Q4怎么加速-fastest5 万序列首选NJ 阶段大幅提速FastTreeMP 多线程-mlnni 4减少 ML NNI 轮次-noml直接关掉 ML不推荐正式文章过滤大量 gap 列、提前聚类去冗余序列usearchQ5怎么提高精度-pseudo大量碎片化序列很多 gap推荐-spr 4增加 ME 阶段 SPR 轮次-mlacc 2 -slownniML 搜索更彻底≈4 倍慢-fastest -no2nd超大数据集NJ 阶段更保守小幅提升精度Q6不同拓扑做 SH/AU 检验搭配-gamma -log输出位点似然用 CONSEL 包做拓扑检验。 固定拓扑只优化枝长FastTree -gamma -nt -gtr -nome -mllen -intree top1.newick -log top1.log aln.fasta top1.ftlen FastTree -gamma -nt -gtr -nome -mllen -intree top2.newick -log top2.log aln.fasta top2.ftlen perl GammaLogToPaup.pl top1.log top2.log top12.txt makermt --paup top12.txt consel top12 catpv top12.pv⚠️ 坑不要漏写 log 文件名否则会覆盖比对文件Q7树根有生物学意义吗❌ FastTree 输出无根树根位置是程序随便放的。 校正外类群重根 / 中点根超大树可以用自带 reroot.pl。Q8是否可复现单线程确定可复现跨平台浮点误差很小似然几乎一致FastTreeMP非确定性线程调度影响 NJ 启发树会轻微变化质量不变SH 支持值有随机种子每次运行会浮动Q9-intree -nome -mllen拓扑变了如果比对里有完全相同序列输入树里这些相同序列放在不同位置FastTree 内部会合并输出树会统一放到同一个位置拓扑改变无告警。Q10全基因组超宽比对内存爆炸FastTree 擅长序列多、比对短不擅长比对长度极大。支持值计算内存8 * 1000 * L bytes百万位点就要 8GB方案 1-nosupport关闭支持值方案 2-boot 100减少重采样次数方案 3JC 模型、-noml降低内存宽比对支持值本身参考意义有限重组会破坏系统发育假设。适合你的常用命令汇总Gypsy/Copia RT 蛋白树# LG模型推荐和IQ-TREE一致 FastTree -lg -gamma -log tree.log Gypsy_rt.aln Gypsy_rt.newick # 关闭支持值极速跑海量TE FastTree -lg -nosupport Gypsy_rt.aln Gypsy_rt.newick # 五万条以上超大TE数据集 FastTree -lg -fastest Gypsy_rt.aln Gypsy_rt.newick参考文献Price, M.N., Dehal, P.S., and Arkin, A.P. (2009) FastTree: Computing Large Minimum-Evolution Trees with Profiles instead of a Distance Matrix.Molecular Biology and Evolution26:1641-1650, doi:10.1093/molbev/msp077.Price, M.N., Dehal, P.S., and Arkin, A.P. (2010) FastTree 2 -- Approximately Maximum-Likelihood Trees for Large Alignments.PLoS ONE, 5(3):e9490. doi:10.1371/journal.pone.0009490.