ARTICLE DETAIL

资讯详情

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

TBtools共线性分析全解析:从MCScanX原理到基因家族实践

TBtools共线性分析全解析:从MCScanX原理到基因家族实践 做基因家族分析的时候我几乎每次都会被问到同一个问题“你的基因在别的物种里是什么样它还在染色体的哪个位置旁边还跟着哪些基因”这个问题落到实操层面就是物种间共线性分析collinearity analysis。我这几年的习惯是直接用TBtools完成从比对到出图的整套流程点按钮的过程看起来并不复杂但真正决定结果质量的是背后的数据预处理、参数理解和结果解读。这篇文章把这一整套流程拆开来讲主要围绕One Step MCScanX和Dual Synteny Plot展开适合准备做基因家族分析、比较基因组研究或者单纯想看看两个物种染色体上同源区块的朋友。1. 共线性分析的底层逻辑与TBtools的定位1.1 什么是共线性为什么要做共线性先说概念。两个物种从共同祖先分化之后基因组并不是保持原样不变的会发生基因丢失、染色体片段重排、局部复制等等。但是自然选择会保留很多“不能乱动”的区域尤其是那些功能耦合的基因它们往往还带着原来的邻居一起在染色体上待着。于是我们今天观察两个物种的基因组会发现某些染色体区段上的基因顺序高度一致这种区段就叫共线性区块collinear block。共线性和另一个词“同线性synteny”经常被混着说但严格讲有差别。同线性通常只强调同源基因落在同一条染色体片段上而共线性进一步要求基因顺序一致。MCScanX这类软件输出的就是共线性区块而不是单纯的一对一同源关系。正因为要求顺序一致它的假阳性控制得比普通BLAST要好得多。共线性分析在基因家族研究里的地位尤其高。你鉴定出一个家族的几十个成员之后光看进化树只能知道谁跟谁亲但无法判断这些成员是物种分化之前就存在的还是这个物种自己复制出来的。这时候把家族成员放到共线性背景里问题就清楚了如果某个成员落在两个物种高度保守的共线性区段上并且跟另一个物种的某个基因构成共线性锚点对那它们大概率是直系同源如果只是BLAST结果里有相似序列但周围基因已经面目全非那很可能是旁系同源或者假阳性。这个判断逻辑是做基因家族分析的人每天都要面对的。1.2 TBtools为什么适合做这件事TBtools是陈程杰老师开发的生物信息学工具包我觉得它在比较基因组领域就像一个“瑞士军刀”。以前跑MCScanX你得自己在Linux环境里配置BLAST、编译MCScanX、写脚本处理输入输出还要把结果整理成能看的图。这一套流程对新手来说门槛不低对做批量项目的老手来说也烦琐。TBtools把整个过程封装成了一个图形界面操作你只需要准备两个文件点几次按钮就能得到共线性结果和可视化图。我做比较基因组项目时TBtools和原版MCScanX都会用。如果只是想快速看一个基因家族在两个物种里的共线性情况我几乎不会犹豫直接开TBtools。它的One Step MCScanX封装了从BLAST比对到共线性扫描的全部过程后续还有Dual Synteny Plot、Advanced Circos这些可视化模块体验相当完整。下面简单列一下几种常见方案的适用场景。工具适合场景特点TBtools One Step MCScanX交互式分析、小批量比较、新手入门图形界面操作简单可视化方便原版MCScanX命令行大规模批量跑、有服务器权限依赖命令行参数灵活适合管道化JCVIPython库编程习惯强、需要高自由度定制可做共线性、点图、微共线性但需要写代码我个人最推荐的路线是日常交互探索用TBtools等确定了参数和分析逻辑再上服务器跑批量的原版MCScanX或者JCVI。毕竟TBtools的图形界面天然适合人肉质检中间有任何一步不对可以立刻看到结果并调整。2. 数据准备比跑分析更耗时的环节2.1 物种数据从哪来格式怎么选很多人做共线性分析一上来就卡在数据准备上。这里先说清楚你需要什么。One Step MCScanX的核心输入是两个文件一个是蛋白序列FASTA或者CDS序列另一个是基因结构注释文件GFF3/GTF。为什么是蛋白序列因为MCScanX默认做的是BLASTP比对蛋白序列在跨物种比较时比DNA序列更保守能跨越较远的进化距离找到同源关系。数据来源方面我一般优先去这几个地方下载Ensembl Plants模式植物和常见作物很全文件命名规范GFF和蛋白序列版本容易对应。NCBI没有Ensembl的物种可以去这里搜Assembly页面通常可以直接下载基因组和注释文件。Phytozome做植物比较基因组经常用的数据库下载需要注册账号但注释质量普遍不错。下载的时候有一个死规矩蛋白序列文件的版本必须和GFF注释文件的版本一致。比如你用的是Ensembl Plants的“Athaliana_TAIR10.pep.all.fa”那GFF也要是TAIR10对应的那个版本绝不能拿TAIR10的蛋白去配Araport11的注释。版本错位是共线性分析里最隐蔽、也最磨人的一个问题因为软件不会明确告诉你错在哪只会报各种奇怪的错。2.2 预处理三板斧ID统一、顺序对齐、冗余清理拿到原始数据之后强烈建议不要直接丢给TBtools。先把数据过一遍预处理后面能少折腾两个小时。我总结了三个重点。第一ID统一。下载的蛋白序列FASTA头部往往很长类似“AT1G01010.1 | ...”而GFF文件里的基因ID是“AT1G01010”。如果直接拿原始文件去跑TBtools在匹配蛋白ID和GFF位置信息时会大量失败。我的习惯是先把FASTA头清洗成纯净的“基因ID”格式awk /^/{print $1; next}{print} species.pep.all.fa species.clean.pep.fa注意$1取决于原始文件的头部格式有的文件第一个字段是“AT1G01010.1”这种带版本号的你需要进一步把“.”后面的转录本版本号去掉。不同数据库规则不一样动手之前先head几行看一眼。第二GFF格式整理成简单BED。TBtools的One Step MCScanX能识别GFF3但我发现很多GFF里嵌套了gene/mRNA/CDS多级结构稍有异常就会影响基因位置提取。最稳妥的做法是直接从GFF里抽出一张四列或五列的简单位置表列顺序一般写成“染色体ID、基因ID、起始位置、终止位置、链方向”awk -F\t $3gene{split($9,a,;); gsub(/ID/,,a[1]); print $1\ta[1]\t$4\t$5\t$7} species.gff3 species.gene.bed不同来源的GFF第9列格式差异很大有的是“IDgene:AT1G01010”有的是“Name...;ID...”所以这个脚本只能算模板实际用的时候要针对你的文件微调。做这一步的目的就是让TBtools少在解析上出错把位置信息准备好。第三转录本去冗余。一个基因经常有多个转录本共线性分析是基因级别的分析不需要转录本级别的信息。如果蛋白文件里同一个基因出现多次我通常会保留最长转录本或者干脆挑一个主转录本。这一步可以用TBtools的Sequence Toolkit完成也可以自己写脚本。不做的话后面跑出来的共线性对里可能出现同一个基因反复出现的冗余情况虽然不影响大方向但看着很乱。预处理做完之后建议把整理好的文件统一放到一个目录下面命名规则清晰一些比如“sp1.pep.fa”“sp1.gene.bed”。共线性分析常常要对比好几对物种命名混乱的话后面处理结果时会非常痛苦。3. 实操从One Step MCScanX到双折线图3.1 One Step MCScanX的参数怎么设打开TBtools之后在菜单栏的“Comparative Genomics”分组下能找到“One Step MCScanX”。点击后会弹出一个面板需要你分别选择两个物种的蛋白序列文件和GFF/BED文件。我建议把输出目录也单独设置一下别随便选个桌面或者下载目录因为你马上会发现输出文件非常多。参数方面面板里最常动的就是E-value和Minimum Number of Genes。这两个参数的含义要搞清楚。E-value是BLAST比对时的期望值阈值默认为1e-05。数值越小筛选越严格得到的同源对越少但越可信。我的习惯是亲缘关系近的物种比如同一个属用1e-10亲缘关系远、基因组差异大的物种用1e-05甚至可以放宽一点不然很多真实的同源关系会被过滤掉。Minimum Number of Genes意思是一个共线性区块里至少要包含多少个基因对MCScanX原版默认是5。这个值设得越小找到的共线区块越多但里面可能混入一些仅有零星基因位置重合的假阳性块设得越大区块越完整但小规模的保守片段会直接被忽略。如果你只想看大片的保守区用5或者10都没问题如果关心某个小基因家族附近的小保守片段可以降到3甚至2试试但要人工多审一审结果。输入文件准备完成之后点一下StartTBtools会调用内部的BLASTP、MCScanX程序整个过程会跑一段时间。运行时间取决于两个物种的基因组大小和测序组装质量快的几分钟慢的可能要半小时以上。这里提醒一句如果数据量特别大最好在服务器上跑不然笔记本风扇会转得让人心慌。3.2 输出文件解读collinearity文件是核心等程序跑完打开输出目录你会看到一个后缀为“.collinearity”的文件这是整个分析最核心的结果后面所有可视化、下游提取都靠它。文件里面按区块组织每个区块以类似“## Alignment”的注释行开头后面跟着一堆基因对。每一行就是一对跨越两个物种的同源基因表示这两个基因不仅序列相似而且处在两个物种的保守共线性区段中。我第一次拿到这个文件时有种被密密麻麻的基因对淹没的感觉。但理解起来不难整份文件相当于一张“跨物种同源基因对应表”只是它比单纯BLAST结果多了一个空间顺序约束。你在后续做基因家族分析时如果想找某个家族在另一个物种里的直系同源基因就是从这份文件里筛选出来的。TBtools的One Step MCScanX还会额外输出预览图和一些中间文件比如BLAST结果、每个基因的位置信息等。这些中间文件在排查问题的时候很有用比如你想确认某个基因是否参与了比对直接去BLAST结果文件里搜它就行。3.3 Dual Synteny Plot双折线图实操得到collinearity文件后可视化最常用的是TBtools的“Dual Synteny Plot for MCScanX”。这个图的呈现方式是上下两条横向染色体中间用连线串起共线的锚点基因对一眼就能看出两个物种哪些区域是保守的。操作很简单在Comparative Genomics菜单里打开Dual Synteny Plot加载两个物种的GFF/BED位置文件和刚才生成的.collinearity文件然后设置输出图片的格式、颜色、线条粗细点一下Start就能出图。这个步骤里我踩过的坑是加载GFF文件时一定要用和你跑One Step MCScanX时相同的那份位置文件别换了一个重新生成的BED否则染色体ID对不上画出来的图会全是空的。图上颜色可以自己调。我一般会把不同染色体的色块用对比明显的颜色区分线条颜色用半透明的浅色不然基因对太多时图面会糊成一片。导出图片时建议选择SVG或PDF这类矢量格式别只导出PNG。因为后续你几乎肯定要在AI或Inkscape里调整基因标签、字号、染色体名称的位置矢量图改起来非常方便。如果比较的物种超过两个TBtools里还有“Advanced Circos”模块可以用圆形图展示多物种间的共线性网络。圆形图适合展示整体格局但信息密度太高不适合精读具体基因。我通常的做法是先用Circos做宏观展示再用Dual Synteny Plot深入看具体的目标区段。4. 结果解读与基因家族分析扩展4.1 从共线性片段看物种亲缘关系拿到共线性图后第一件事不是急着提取基因而是先感受一下两个物种的宏观保守程度。如果两个物种亲缘关系近比如拟南芥和琴叶拟南芥你会看到大段大段的染色体区段一一对应连线整齐如果亲缘关系比较远比如拟南芥和水稻中间会弥散着大量短小的、零散的共线片段。这些片段是古老祖先留下的遗迹经过上亿年的染色体重排已经碎得差不多了。这种“宏观感受”能帮你判断后面的分析尺度。亲缘远的物种共线性区块短如果还用Minimum Number of Genes10去筛很可能什么都筛不到这时候把阈值降到5或者3往往还能捞到一些有价值的保守小片段。反过来亲缘近的物种如果跑出来大片断裂那大概率是你的数据预处理出了问题而不是进化真的把基因组打碎得那么彻底。另外共线性还有一个重要用途是辅助验证基因组组装质量。如果某个物种的基因组在共线性图里出现大量自身内部的破碎交叉线说明该物种可能经历过全基因组复制WGD或者组装上存在contig拼接错误。做比较基因组时这个信息能帮你避免在错误的坐标上去解释结果。4.2 提取特定基因家族在目标物种中的同源基因对做基因家族分析的人来说共线性分析最有价值的产出是从collinearity文件中提取目标家族在另一个物种里的候选直系同源基因。具体做法不难。假设你在物种A里鉴定出一个基因家族成员ID都放在family_A.txt里。现在想知道这些成员在物种B基因组中对应的共线性同源基因只需要做一次筛选grep -Ff family_A.txt speciesA.speciesB.collinearity | awk {print $1, $2} | sort -u实际执行时collinearity文件里每行的前两个字段分别代表物种A和物种B的基因IDgrep会把包含家族成员的行全部挑出来awk再输出成对的ID。拿到的结果里可能会出现一个A物种基因同时对应多个B物种基因的情况这就是旁系同源候选需要在进化树上进一步确认。这种做法的核心优势在于你拿到的不只是“序列相似”的基因而是“位置和顺序都保守”的基因。后续再把这些候选基因的序列提取出来建树、分析结构可信度会高很多。我自己做基因家族文章时共线性筛选通常是先于系统进化树分析的因为这套逻辑给出的直系同源证据非常符合审稿人期待。4.3 要不要顺便算Ka/Ks如果你的数据里有CDS序列我建议顺手做一个Ka/Ks分析通常能给你的共线性结果增加很多信息量。Ka/Ks是非同义替换率Ka与同义替换率Ks的比值。Ka/Ks 1说明受到正选择 1说明受到纯化选择约等于1则接近中性进化。TBtools里有一个“Simple Ka/Ks Calculator (NG)”工具操作思路是先根据共线性结果提取同源基因对对应的CDS序列然后做密码子比对再计算每个基因对的Ka/Ks值。这里要注意CDS序列必须保证是完整的、按正确读码框提取的不然计算的比值会失真。提取CDS可以用TBtools的“GXF Sequences Extract”模块选择你的GFF和基因组序列指定提取CDS并合并外显子就能得到每个基因的CDS序列。对照共线性文件里的基因对按名字抓取序列组织成两两比对或者多序列比对再丢进Ka/Ks工具。整个过程在TBtools里都能完成不需要额外装太多东西。做Ka/Ks分析的意义在于如果你发现某对共线基因的Ka/Ks显著大于1说明这个基因可能在两个物种中经历过分化选择这往往是后续功能研究的线索。很多基因家族文章里都会附一张Ka/Ks散点图用来展示家族成员之间的进化压力来源就是这么来的。5. 常见问题与排查技巧实录5.1 问题速查表共线性分析流程不长但每一步都有各自的坑。我把这几年遇到比较多的几个问题整理成一张速查表大家遇到类似报错可以先对号入座。问题现象可能原因解决方向提示找不到蛋白序列或GFF里基因ID缺失蛋白ID和GFF基因ID不一致检查FASTA头与GFF的ID格式统一后再跑报错GFF和FASTA顺序不匹配基因顺序未被正确读取用整理好的BED文件代替原始GFF确保按染色体坐标排序BLAST阶段特别慢或内存爆炸基因组过大参数过松先跑小染色体测试或到服务器上运行出图后两块染色体之间没有连线阈值过高或位置文件不一致降低E-value/最少基因数核对可视化加载的位置文件亲缘关系较远的物种共线性区块极少进化距离太远共线性信号弱适当放宽参数或接受“碎片化保守”的结论结果文件中同一基因反复出现转录本未去冗余清理蛋白序列保留每基因一条代表序列除了表格里的方向还有一个特别容易让人困惑的地方One Step MCScanX跑完之后如果中途报错但没弹出明确的错误提示优先去输出目录看BLAST结果文件是否生成完整。BLAST结果文件是MCScanX的输入只要它不完整后面几乎所有环节都会出问题。这个判断思路比盲目改参数要有效得多。5.2 个人实操中最重要的几个经验最后聊几个我在大量共线性分析项目中沉淀下来的习惯供参考。第一严格做好数据版本管理。每个项目的目录下我都固定建立data/raw、data/formatted、output/mcscanx、output/figure这几个子目录再写一个README记录每个文件的来源、版本和下载日期。共线性分析中间文件动辄几个GB隔两周回来看如果没记录很容易分不清哪个蛋白版本是TAIR10、哪个是Araport11。这个小习惯救过我太多次。第二先跑小样本验证再跑全基因组。如果你想比较多个物种组不要一开始就把所有数据一股脑丢给TBtools。先用两个物种的一两条染色体测试流程和参数确认ID匹配、位置文件、可视化都正常了再放开跑全基因组。否则一旦中间某一步出错你排错的时间远比测试时间多。第三出图之前想清楚用途。如果只是自己看看PNG就行如果要放进文章一定用SVG/PDF矢量格式并且把颜色统一、字体调大。TBtools默认的配色和字号其实偏演示风格正式投稿前我一般拉进Inkscape重新润色把染色体名和序列范围标注清楚。最后再分享一个小技巧做多个物种两两共线性比较时画出来的图往往非常庞大想在文章里展示建议优先展示包含目标基因家族的染色体区段而不是整条染色体。做法是在Dual Synteny Plot里只对相关染色体出图或者后期在矢量图里裁剪。一个清晰的局部共线性图信息量远大于一张全基因组乱线图。希望这篇实操笔记能帮你在做物种间共线性分析时少走点弯路。
返回列表