十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MEGA建树全流程:序列比对、模型选择与Bootstrap验证

MEGA建树全流程:序列比对、模型选择与Bootstrap验证 简介这份《怎样使用MEGA建立进化树》PDF教程面向生物信息学初学者、分子进化研究相关学生与科研人员针对使用MEGA 4.0进行系统发育分析的实际需求完整梳理了从启动软件、选择DNA或蛋白质序列类型、逐条输入并保存序列到以邻接法、最大似然法等构建并导出进化树的全流程。教程中每一步配有界面操作说明与截图指引尤其细化了蛋白质序列的粘贴、序列文件命名以及重复输入多条序列时的注意事项能有效减少入门者常见的操作困惑。资源为单个PDF文件体积仅212KB既便于快速下载也适合在本地随时查阅。已有540人学习下载内容短小精悍适合作为构建进化树时的速查手册或课堂辅助材料。1. 没有序列比对就没有进化树MEGA建树前必须想清楚的事情拿到一条线粒体COI片段拖进MEGA点Build Tree导出图片这套流程看起来比跑AlphaFold简单太多可当审稿人问起替代模型、Bootstrap次数、外类群依据时很多人会发现自己对中间过程一无所知。MEGAMolecular Evolutionary Genetics Analysis的优势在于把建树的完整链路显式化序列比对、位点过滤、替代模型拟合、树搜索、支持率评估每一步都有对话框让你确认在用什么参数。所以这篇不按“点哪里出图”的顺序写而是按真实工作流把参数边界讲清楚。第一次建树的实验研究者可以照着跑常年做系统发育推断的工程师也能用它复盘自己的参数逻辑。先把一个结论放在前面MEGA建树的质量上限取决于比对质量不是最后那一下Construct Tree。2. 从FASTA到比对结果MEGA里的数据准备与多重序列比对进化树比较的不是序列本身而是同源位点上的替换模式。“同源位点”靠的是多重序列比对把不同序列中来自同一祖先位置的碱基放到同一列。没有这一步后面的距离计算和似然估计全部建立在一个错位矩阵上。很多人直接拿未比对的序列去跑建树得到的不是进化树而是“相似度聚类图”。MEGA把比对模块内置在Alignment菜单里支持ClustalW和MAFFT两种算法不需要命令行基础。但了解两种算法在MEGA里暴露了哪些参数、哪些参数没有被暴露仍然能帮你避免一批低级错误。2.1 在MEGA里导入序列支持哪些格式我一般怎么整理成FASTAMEGA支持MEGA格式.meg、FASTA、GenBank、Clustal、PHYLIP等多种格式。我习惯统一用FASTA作为上游格式因为几乎所有测序平台、序列下载工具和脚本都能读写FASTA排查问题时不至于在格式转换上浪费时间。序列ID里不要有空格、括号、逗号或竖线否则MEGA会把ID截断。我一般写成属名_种名_样本号_序列ID例如Galgal_c_COI_Seq01 ATGACTTACCAATTCAACTAAGCACACCTCTGATAC Homsap_mtCOI_Seq02 ATGACTCACCAATTCAACTAAACACACCACTGATA批量数据我会用Biopython做一次轻量清洗再进MEGA。下面这个脚本会合并多行序列、过滤长度过短或N比例过高的记录顺便把ID里的非法字符替换掉from Bio import SeqIO from Bio.SeqRecord import SeqRecord records [] for rec in SeqIO.parse(raw.fasta, fasta): seq str(rec.seq).replace(-, ).upper().strip() if len(seq) 300: print(fdrop too short: {rec.id} len{len(seq)}) continue n_ratio seq.count(N) / len(seq) if n_ratio 0.2: print(fdrop too many Ns: {rec.id} N{n_ratio:.2%}) continue clean_id rec.id.replace( , _).replace(|, _) records.append(SeqRecord(seq, idclean_id, description)) SeqIO.write(records, clean_sequences.fasta, fasta)过滤阈值要按研究目的调整如果片段本身只有300 bp且位于高变区len 300会误删如果做全长CDS500 bp以下的信息量往往不足。N比例0.2允许序列两端带一点噪声进入比对建树前还会再修剪所以不用太保守。导入操作菜单Data → Open a File选择clean_sequences.fasta双击打开Alignment Explorer。如果弹窗提示格式无法识别大概率是序列ID里有非法字符回到清洗脚本里加一层白名单过滤。2.2 用ClustalW还是MAFFTMEGA的参数选择与执行步骤MEGA的Alignment菜单里有Align by ClustalW和Align by MAFFT两个入口。ClustalW是经典渐近比对算法先算两两距离再按向导树把序列逐条加进去缺点是结果受输入顺序影响对远端同源片段容易开出过长的gap。MAFFT基于快速傅里叶变换和迭代精炼速度与准确率在核酸和蛋白序列上都更均衡。算法适合场景关键参数我通常的设置ClustalW序列条数40、长度接近、低gap区域Gap Opening Penalty / Gap Extension Penalty默认15 / 6.66编码序列勾选Align CodonsMAFFT条数多、长度差异大、含内含子或高变区Gap Open Penalty / Offset默认即可超过100条序列建议本地用mafft --auto执行路径Alignment → Align by ClustalW弹窗里选Nucleotide或Protein。如果序列是编码蛋白的CDS从ATG开始、长度为3的倍数务必勾选Align Codons让MEGA按密码子整体对齐。不勾选时gap可能插到密码子内部产生移码假象后续建树会把这些位置当缺失处理白白丢信息。MEGA内置的MAFFT只开放了Gap Open Penalty和Offset两个参数外部MAFFT的--maxiterate、--ep 0等策略没法在这里完全复现。所以超过100条序列时我一般本地跑mafft --auto in.fasta aligned.fasta再把结果导入MEGA做后续操作。MEGA内置比对适合教学和中小数据集验证不适合做重型计算。2.3 比对结果如何修剪和查看哪一类位点要删除比对完成后Alignment Explorer里会用颜色标出保守程度红色代表高度保守黄色代表中等绿色代表低保守。如果两端出现大片绿色或深浅条纹说明端部没有可比性应当选中删除。我按列gap比例做客观修剪某列超过一半的序列是gap或缺失该列对建树贡献很小删掉能减少长分支对树形的干扰。这个脚本可以直接处理比对好的FASTAfrom Bio import AlignIO aln AlignIO.read(aligned_raw.fasta, fasta) length aln.get_alignment_length() keep [] for i in range(length): col aln[:, i] gap_ratio col.count(-) / len(col) if gap_ratio 0.5: keep.append(i) trimmed aln[:, keep] AlignIO.write(trimmed, aligned_trimmed.fasta, fasta) print(fkept {len(keep)} / {length} columns)gap比例阈值不只是“允许位点中有gap”的意思因为MEGA建树时还有一个独立的site coverage cutoff参数会二次过滤二者作用不同。非编码区或内含子区域建议把阈值放宽到0.7否则会删掉真正含有插入缺失信号的位置CDS则可以用0.5甚至0.3因为编码区的大段indel本来就不常见。修剪后的文件保存为.meg格式或直接以FASTA留在工作目录。这一步比后面的模型选择更影响Bootstrap支持率我见过一组数据修剪前ML树支持率大面积低于50相同参数下修剪后普遍回到70以上。3. 利用MEGA选择替代模型并完成建树从BIC到Bootstrap数据干净以后才进入真正意义上“mega进化树”的操作。很多人会直接进Phylogeny → Construct Tree用默认K2P模型建树。默认K2P被无数教程使用但默认不等于正确K2P假设四种碱基频率相等、两种替换速率相同、所有位点同速进化。线粒体COI这类序列往往AT含量偏高GC含量明显偏离0.25K2P的假设从一开始就不成立。3.1 为什么需要Find Best DNA Model不做模型选择等于让默认模型替你做判断MEGA专门提供了模型选择入口Models → Find Best DNA Model。它会一次性拟合多套替代模型输出每个模型的BIC、AICc和lnL并给出推荐模型。模型选择解决的本质问题是解释同一组序列变异时用多少参数、哪些参数更划算。参数太少欠拟合参数太多过拟合BIC就是两者之间最常用的裁判。BIC和AIC的差异经常被忽略AIC在样本量增大时倾向保留更多参数容易选出GTRGI这类复杂模型BIC对参数数量惩罚更重选择更保守。现代分子系统发育论文里普遍建议报告BIC选出的模型避免不必要的过度参数化。如果序列只有1500 bp且亲缘关系很近BIC选出的可能就是HKY或K2P这完全正常不必为了“显得专业”手动改成GTR。提示如果BIC最小的两个模型差值小于2统计上几乎等价选参数更少的那个更稳妥。3.2 MEGA构建ML树的路径与三个关键参数模型选择完成后建ML树的入口是Phylogeny → Construct/Test Maximum Likelihood Tree。弹出的对话框里有三个参数必须确认参数位置失败后果Bootstrap次数Test of Phylogeny → Bootstrap method默认100次只够演示论文级补做1000次替代模型Model/Method → 与模型选择结果一致不一致会让分支长度和支持率失真位点速率异质性Rates among Sites → Gamma Discrete替换率异质性强的数据不选Gamma支持率普遍偏低Bootstrap次数直接决定运行时间。30条×1500 bp的数据1000次ML Bootstrap通常几分钟内完成序列数到100条以后建议先不开Bootstrap看拓扑再用1000次验证关键节点。搜索算法方面MEGA提供NNI和SPR等启发式方法默认NNI速度快SPR搜得更彻底但耗时上升。数据量不大时我一般手动切到SPR。模型选择窗口里的表全选复制后可以保存成文本做二次整理。下面这段脚本能快速捞出BIC最小的模型with open(model_selection.txt, encodingutf-8) as f: content f.read() best_model None best_bic float(inf) for line in content.splitlines(): parts line.split() if len(parts) 2 and parts[1].replace(., ).isdigit(): bic float(parts[1]) if bic best_bic: best_bic bic best_model parts[0] print(best_model, best_bic)这里假设复制出来的文本中第一列是模型名、第二列是数字实际输出结构会因MEGA版本略有差异。跑之前先head看两行确认BIC列在哪一列。脚本的价值不是省那几秒眼睛而是把“模型选择”这一步变成可复核的文本记录写方法部分时直接引用文件名。3.3 NJ树与ML树怎么配合两类树的适用节奏MEGA里同时提供Construct/Test Neighbor-Joining Tree和Construct/Test Maximum Likelihood Tree。NJ是距离法先算两两遗传距离再聚类速度极快对模型依赖小ML把整棵树的拓扑和分支长度放在同一个似然框架里优化统计上更强但计算代价高。我一般的工作节奏数据量大时先用NJ出全局拓扑看哪些分支支持率高、哪些东倒西歪再对问题分支上ML树精算。NJ在存在长分支时容易产生长枝吸引所以论文里的主树应优先用ML树NJ树作为早期探索和对拍工具。把两种方法的结果放在一起看还能快速暴露异常样本——如果在两棵树里位置分歧明显多半这条序列需要回查比对。4. 进化树的结果判读与参数再调整树出来后最常见的坑是不会看。一张进化树图片包含三层信息拓扑结构谁和谁先分开、分支长度累积替换量、支持率分叉的可信度。MEGA默认用百分比显示支持率越接近100越可靠。但支持率的含义不是“该分叉发生的概率”而是“Bootstrap重抽样数据集中复现该分叉的频率”。4.1 从Newick里批量提取支持率用脚本找出薄弱分支MEGA可以通过File → Export Current Tree (Newick)把当前树导出为.nwk文本文件。除了拓扑和分支长度内部节点上还带有Bootstrap支持率。用Biopython解析后可以批量找出所有支持率低于阈值的内部分支并看到它们连接的是哪些末端样本from Bio import Phylo import io newick_text open(result.nwk, encodingutf-8).read() tree Phylo.read(io.StringIO(newick_text), newick) low [] for clade in tree.find_clades(): if not clade.is_terminal() and clade.confidence is not None: descendants [c.name for c in clade.get_terminals()[:4]] if clade.confidence 70: low.append((clade.confidence, descendants)) low.sort() for val, tips in low: print(f{val:3d}% : {, .join(tips)})阈值70对应下方表格中的“中等支持”线。跑完你会得到一份“不稳定分支清单”后面的数据排查都可以围绕这份清单展开是某条可疑序列在干扰还是这个分支本身缺乏信号。脚本没有改变任何参数它只是把树的内部信息变成可操作的文本。4.2 Bootstrap支持率的分段解释与常见误区把Bootstrap值直接当后验概率解读是最常见的错误。Bootstrap的做法是重抽样原始位点列重新建树统计目标分支在重复树中出现的比例后验概率是贝叶斯框架下对拓扑、枝长、模型参数设置先验后算出的条件概率。ML框架下没有后验概率所以不应该写出“支持率95%即该分支真实概率95%”这类表述。支持率范围证据强度实际建议95-100强支持可作为结果重点讨论70-94中等支持结合形态、地理分布等旁证50-69弱支持不做结论主干50无支持视为未解决分支不要画实心节点Bootstrap次数上有人为了“支持率高”把重复设到5000跑一整天最后数值几乎不变。支持率偏低是数据信号或模型问题不是重复次数的问题1000次已足够收敛。4.3 外类群设置树是“无根”的方向感全靠外类群MEGA建出来的ML树默认是无根树图上所有末端到根的距离不代表演化方向。想让树“有方向”必须显式指定外类群Outgroup。选择原则是与研究类群亲缘关系最近、但明确不属于该类群的物种而不是随便抓一个远缘物种。操作上在树形窗口里右键点击外类群的末端节点选择Set as OutgroupMEGA会重新以它为根绘制有根树。外类群选得太远会把长分支集中在根部改变内部节点的相对位置甚至翻转某些短分支。提示如果外类群分支长度显著长于内部分支优先检查它是不是拼接不完整的序列混进来了。这种假长枝会拖动整个根部的形态。5. 常见“树不对”的情况与一个保底技巧5.1 Bootstrap支持率普遍偏低时先改什么支持率大面积低于50先别急着换模型。按顺序检查三处比对是否做过gap列修剪是否把内含子和外显子混在同一段里比对序列末端低质量区域是否已经清除。90%的“ML树跑不出支持率”都出在这三个环节。数据问题排除后再把均匀速率改成Gamma分布把Partial deletion的Site Coverage Cutoff调到95%以上支持率通常能回升10到20个百分点。也要接受另一种情况某些分支本身只支持一个无分辨率的多分叉polytomy。这时如实报告多分叉比强行选一个支持率40%的二叉分支更严谨。5.2 大数据集大于200条序列时MEGA还是很慢MEGA在100条序列以内运转流畅超过200条以后ML搜索会明显吃力。常见做法是用外部MAFFT做比对用列覆盖度过滤做修剪再把结果导入MEGA建NJ树看全局精细树计算交给RAxML或IQ-TREE这类并行工具。MEGA更适合教学演示、中小数据集的完整流程验证、以及快速跟合作者确认分支关系。5.3 保底技巧导出Newick让所有下游工具都能接手很多人把MEGA的树截图贴进PPT就结束了但下游的FigTree、ggtree、iTOL都无法读取图片。正确做法是File → Export Current Tree (Newick)保存一份.nwk文本。之后在FigTree里打开统一字体、颜色和分支粗细导出300 dpi的PDF。我常用的一条经验是MEGA里的树先导出Newick再在FigTree里把支持率大于等于70的分支加粗低于70的用细线或虚线段审稿人一眼就能看出证据薄弱的节点。树的元数据全部保留在文本文件里任何时候都能重新读入比截图可复现得多。配合模型选择时留下的文本记录整条MEGA建树路径就具备了完整的审计链。本文还有配套的精品资源点击获取
返回列表