尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ChIP-seq下游分析:用MEME-ChIP从peak中挖掘转录因子motif完整教程

ChIP-seq下游分析:用MEME-ChIP从peak中挖掘转录因子motif完整教程 搞ChIP-seq数据分析的人基本都会在某一天走到motif发现这一步。实验拿到了几百上千个peak注释了基因画了富集图但别人一问“这个转录因子到底结合什么序列”你就得打开MEME-CHIP从peak序列里把DNA结合基序挖出来。这可以说是ChIP-seq下游分析里最“经典”也最容易上手出结果的一步同时也是最容易因输入数据没处理干净而白跑一趟的一步。这篇文章就写我自己的完整实操流程怎么从narrowPeak文件变成干净的FASTA怎么跑MEME-ChIP怎么读懂它输出的那一堆HTML报告以及最后怎么把motif做成可以放进论文的sequence logo。全文按5个步骤来拆解每个步骤都给出可直接抄的命令和参数还会把我踩过的坑一并交代清楚。适合刚做完peak calling、正准备做motif发现的人参考。1. 为什么MEME-ChIP是motif发现的首选工具1.1 ChIP-seq结束后你的peak列表还缺什么ChIP-seq的本质是抓蛋白和DNA的结合区域。比对、call peak之后你拿到的是几百到几万个区间每个区间通常是150bp到500bp。但这里有个核心矛盾转录因子真正结合的那一段序列往往只有6到20bp。也就是说peak是一大片“案发现场”而motif才是那个关键的“指纹”。从peak里找指纹就是motif发现要干的事。它会扫描所有peak序列找到那些显著富集、且在不同peak之间重复出现的短序列特征然后与JASPAR这类已知转录因子结合谱数据库比对告诉你这个motif最可能是哪个蛋白的结合位点。MEME-ChIP正是这个环节里最常用的一体化工具。1.2 主流的motif发现工具对比与MEME-ChIP的定位motif发现工具不少常见的有HOMER、DREME、MEME、Weeder、RSAT等。HOMER的findMotifsGenome.pl在RNA-seq和ChIP-seq里出现频率很高它胜在快而且能直接基于基因组做背景。DREME则是专门面向短motif的高效发现工具速度快、结果干净。但如果你需要一套完整流程从发现到注释再到可视化一次搞定MEME-ChIP是最顺手的。MEME-ChIP本身不是一个算法而是一个pipeline。它把多个工具串起来用DREME找短且富集的motif用MEME找更长、更复杂的motif再用CentriMo做中心富集分析最后还用Tomtom和已知motif数据库比对注释。输出是一份带交互图形的HTML报告不需要你再额外拼装结果。相比之下HOMER的结果偏命令行文本可视化弱一些单独跑MEME又缺少DREME那种对短motif的敏感度。所以我的习惯是做常规TF的ChIP-seq优先上MEME-ChIP。1.3 MEME-ChIP内部究竟干了什么理解内部逻辑有助于你调参数而不是把它当黑盒。当你提交一份FASTA格式的peak序列后MEME-ChIP大概会做四件事用DREME找出富含AT或GC、长度为5到15bp的短motif用MEME并行寻找更长的、符合位置权重矩阵的motif最大可以到30bp用CentriMo检查每个motif是不是集中在peak的“中心区域”通常指summit附近这一步是判断直接结合的重要依据用Tomtom把找到的motif和JASPAR、UniPROBE等数据库比对给出最可能的转录因子注释。有了这个流程输出报告里每一种结果都有对应的独立HTML文件。理解这一点之后后面你看到dreme.html、meme.html、centrimo.html就不会慌了。2. 环境准备软件安装和peak序列提取2.1 在线服务器还是本地命令行怎么选MEME-ChIP有在线版也有本地命令行版。在线版在MEME-Suite官网就能提交上传FASTA文件填几个参数留个邮箱等结果出来通知你。它的优势是零安装适合偶尔跑一次、序列量不大的人。但我在实际项目里只要peak数量超过5000个或者要批量跑多个样本就倾向本地版。原因很简单在线版对输入序列数量有限制跑大数据量时排队时间不可控而且输出文件下载再整理也比较烦。本地版的好处是命令固定、参数可复现、输出目录清晰跑完直接进下游分析。本地安装目前最省事的路径是condaconda create -n meme -c bioconda meme conda activate meme meme-chip -v装完之后顺手验证一下版本。MEME Suite目前5.x版本的命令基本都是meme-chip输出格式也稳定。如果你是Ubuntu用户也可以去官网下载预编译包但依赖库容易出问题我建议还是conda省心。2.2 从narrowPeak到FASTA提取序列的完整命令这一步是整个流程里最影响结果的一步。很多人直接把peak calling输出的narrowPeak文件丢给工具去提取整段序列结果peak区间太长真正的结合位点信号被稀释后面CentriMo中心富集分析很容易不显著。正确的做法是从每个peak里取summit附近的序列一般取summit左右各100bp或者75bp。narrowPeak文件的第10列就是summit相对peak起始位置的偏移量所以可以用一行awk算出来awk -v OFS\t {summit$2$10; print $1, summit-100, summit100, $4, $5, $6} \ your_peaks.narrowPeak | sort -k1,1 -k2,2n peaks_summit_100.bed注意边界如果summit-100小于0最好做个保护坐落在染色体开头附近的peak很容易被这一行命令算成负数坐标。稳妥一点加个判断awk -v OFS\t {summit$2$10; startsummit-100; if(start0) start0; print $1, start, summit100, $4, $5, $6} ...有了BED文件之后用bedtools从参考基因组里取序列bedtools getfasta -fi hg38.fa -bed peaks_summit_100.bed -fo peaks_summit_100.fa我一般不加-s参数。虽然理论上按照链方向提取更严谨但narrowPeak里的链信息很多情况下是不可靠的占位符而且MEME-ChIP搜索motif时默认会同时考虑正反链所以保留两条链的序列信息反而更安全。2.3 输入序列的清洗和格式规范提取出来的FASTA并不一定直接能用。常见的问题包括序列里有非ACGT字符比如N、peak之间有重叠、重复序列太多。N过多会影响motif搜索的可靠性建议先检查一下。一个快速检查方法是grep统计grep -v ^ peaks_summit_100.fa | grep -c N如果含N的序列占比很高比如超过5%最好回到上游检查比对和peak calling是否存在问题。对于重复序列干扰常见做法是用RepeatMasker注释结果过滤掉落在重复区域的peak这一步不是必须但如果你做的是某个广泛表达的转录因子motif结果里可能出现大量Alu或LINE家族的重复序列motif这时候就要考虑过滤。最后把FASTA里的序列统一转成大写awk /^/{print;next}{print toupper($0)} peaks_summit_100.fa peaks_clean.fa这样MEME-ChIP的输入文件就准备好了。整个过程看起来简单但很多人最后结果差问题就出在这里没有取summit、没有去N、没有去重复。3. MEME-ChIP实战5个步骤从序列到可视化报告3.1 步骤1准备一个高质量的FASTA严格来说准备FASTA是从前一步延续下来的但这里我要强调一个容易被忽略的点样本内序列数量别太多也别太少。peak数量非常少比如几十个时motif统计功效不足peak数量好几万时DREME和MEME运行时间会拉得很长。我通常在过滤后取top peak比如按q-value排序取前5000个peak的summit序列作为输入。这一步在生物信息学里属于“有效子采样”。你不需要把所有peak都跑进去因为motif分析看的是富集信号peak数量到一定程度后增加样本量对结果影响很小反而拖慢运行时间。实际项目中我常这样做sort -k9,9n your_peaks.narrowPeak | head -n 5000 top5000.narrowPeak然后对这个文件执行之前的awk和bedtools流程。跑出来的motif和全量peak的结果差别很小但运行时间能快几倍。3.2 步骤2配置并运行MEME-ChIP本地命令行运行的基本命令如下meme-chip -oc meme_chip_out \ -db JASPAR2022_CORE_vertebrates_non-redundant.meme \ -minw 6 -maxw 20 \ -nmotifs 10 \ -evalue 0.05 \ peaks_clean.fa解释一下几个关键参数-oc输出目录程序会自动创建-db已知motif数据库文件用于Tomtom注释如果没有准备可以不加但输出里就少了注释部分-minw和-maxw搜索motif的宽度范围。大部分TF的识别位点是6到20bp但如果你做的是某些锌指蛋白可能短到5bp如果是复合元件可能要放宽到24bp-nmotifsMEME最多输出多少个motif默认10就够用-evalueDREME和MEME的显著性阈值0.05是常规选择。如果你是第一次跑担心“搜得不够多”就把-maxw调到24-nmotifs调到20。代价是运行时间上升但结果会更全面。在线版提交的时候填的参数逻辑和命令行一致。要注意在线版表单里有一项“Motif discovery mode”通常选“DREME and MEME”就是完整模式。提交后系统会给一个结果页链接一般十几分钟到几小时不等取决于队列和序列量。3.3 步骤3读懂输出目录和combined报告跑完之后无论在线版还是本地版你都会得到一组HTML文件。本地版输出目录结构大致是这样的meme_chip_out/ ├── combined.html ├── dreme_out/ ├── meme_out/ ├── centrimo_out/ └── tomtom_out/第一个要打开的是combined.html它是总览页。页面上会列出所有显著motif每个motif都带有sequence logo图、E-value、中心富集p值、以及Tomtom注释的最佳匹配转录因子。这里面最影响你判断的三个指标是E-valuemotif在随机背景下出现的期望次数越小越显著CentriMo p值motif是否集中在peak中心区域的显著性检验Tomtom E-value与你数据库里已知motif的相似度显著性。看报告时我有个习惯先看E值小于0.05且有中心富集的motif那些才是“有生物学信号”的候选再看Tomtom注释看看它是否匹配到你做ChIP-seq的那个转录因子家族。如果一个motif显著富集但没有中心富集说明它可能是cofactor或者间接结合产生的信号需要谨慎对待。3.4 步骤4用Tomtom把motif注释为已知转录因子MEME-ChIP如果给了-db参数Tomtom会被自动执行你不需要手动操作。但如果你当时没有提供数据库后续又想补做注释可以单独跑一遍。先准备一个motif数据库文件。JASPAR数据库可以下载一般下载非冗余的脊椎动物核心库格式是MEME或transfac。得到数据库文件后执行tomtom -oc tomtom_out \ -evalue -thresh 10 \ meme_out/meme.xml \ JASPAR2022_CORE_vertebrates_non-redundant.meme注意-thresh这里可以设成10表示E值阈值放宽到10因为Tomtom的E值相比MEME的E值通常数值更小放宽松一些能捕获更多相似motif。输出目录里的tomtom.html会展示motif之间的比对图以及最优匹配转录因子的名称和位点。3.5 步骤5从logo到基因组浏览器可视化怎么补强combined.html已经自带sequence logo但如果你想单独出一张出版级图片可以用MEME Suite自带的ceqlogoceqlogo -i meme_out/meme_out.xml -o motif1.png -n 1其中-n 1表示输出第1个motif。这个命令生成的PNG就是标准的IUPAC碱基字母logo可以直接用在论文里。如果你想画得更自由一些比如自定义配色、和图例排在一起那可以用R的ggseqlogo包。先从MEME输出里提取motif矩阵再画图是常见做法但很多人在格式转换上会卡一下。我这里给出一个偏实用的R代码示例library(universalmotif) library(ggseqlogo) motif_list - read_meme(meme_out/meme_out.xml) m1 - motif_list[[1]] # universalmotif对象里的字母概率矩阵在m1motif需要转置成ggseqlogo需要的格式 logo_mat - t(as.matrix(m1motif)) ggseqlogo(logo_mat, method prob) ggtitle(Motif 1: candidate TF motif)我在这里补一句不同版本的universalmotif对象结构可能略有差别如果你发现motif取出来是空值先执行str(m1)看一下槽位名字。实际上你甚至不需要一定用MEME的输出去画图如果你已经从结果里知道motif的一致序列比如RGAGGAARY也可以用ggseqlogo的字符向量模式直接画ggseqlogo(c(AACTGGCA, AACTGCCA, AACTGGCG), method prob)对于peak可视化如果你想把motif放回基因组上下文可以导出motif在每条peak中的位置然后在IGV里查看。更“大数据”的做法是用pyGenomeTracks绘制多个peak区域的信号和motif位置分布。这个工具需要自己配置一个track.ini文件稍有些复杂但效果很专业。如果你只是快速预览IGV就够了。4. 结果解读统计显著性与中心富集的生物学意义4.1 从E-value和motif排名判断可信度很多新手打开combined报告眼睛只盯着排名第一的motif。但排名第一并不代表它就是你做实验想要的那个转录因子。MEME结果里的E-value衡量的是这个motif在你输入序列中出现的富集程度相对于随机背景是否显著。E值越小越好但E值显著只说明“这个序列特征确实有信号”不代表“它对应了你预期的蛋白”。你还需要看DREME和MEME输出里Top motif的一致序列比如如果做的是CTCF你希望看到CCCTCTGG这种经典基序做的是GABPA你期待ACCGGAA相关的序列。这时候你的生物学背景知识其实比任何p值都重要。我自己的判读顺序是先看E值小于0.05的motif列表再看中心富集p值最后看Tomtom注释。三者都OK的motif优先级最高。4.2 centrimo如何帮你判断是真的TF结合还是背景噪音CentriMo的核心逻辑很简单如果是真正的转录因子结合位点motif应该大量出现在peak的summit附近如果只是背景富集的重复序列那么motif在peak上的位置分布会均匀甚至偏向两侧。CentriMo输出一个位置分布图横轴是相对summit的距离纵轴是motif出现的比例。显著的结合模式会呈现一个以0为中心的峰。如果CentriMo p值大于0.05即便MEME那边motif富集显著也要怀疑这个motif不是这个TF直接结合的指纹而是间接招募、共结合或染色质结构造成的干扰。这里分享一个实操技巧如果你是做某个先锋因子或辅助因子比如FOXA1或者AR你会发现motif并不一定严格居中。先锋因子常常结合在核小体边缘CentriMo的峰可能偏移几十bp这时候不要急着下结论说结果不对而是结合你能拿到的其他信息去交叉验证。4.3 怎么把结果写进论文和项目汇报写论文时结果部分一般需要给出三个信息motif的一致序列或sequence logo、富集E值、中心富集p值。如果做了Tomtom注释还要写清楚匹配到哪个转录因子并注明数据库版本。段落写法可以参考这个结构我们使用MEME-ChIP对显著peaks的summit区域进行motif发现结果表明排名靠前的motif富集了预期的GABPA结合基序E-value 1.2e-5并且该motif在peak中心显著富集CentriMo p 1.8e-7与JASPAR数据库中GABPA的已知结合谱高度一致Tomtom E-value 1.1e-3。项目汇报时不要直接甩HTML文件最好截取两个图一个是排名前三的motif logo图一个是CentriMo的位置分布图。这两张图能让合作者一眼看懂你的motif质量。5. 避坑实录我踩过的常见问题与排查方法5.1 运行太久或内存不足这是被问得最多的一个问题。输入序列量太大或者-maxw设得过大都会导致运行时间指数级上升。优先保底方案是减少输入peak数量到5000左右并限制motif宽度不超过20bp。如果还有问题用nohup放后台跑nohup meme-chip -oc meme_chip_out ... meme_chip.log 21 跑完后查看meme_chip.log末尾是否有ERROR信息。DREME部分如果中途失败很可能是因为输入序列里存在大量重复序列可以先对输入的FASTA做去冗余处理。5.2 结果里没有找到你预期的转录因子这种情况非常常见。可能原因有三个一是你的peak质量本身不高混入了大量间接结合或噪音区域二是你提取序列时用了整个peak而不是summit区域导致信号被稀释三是你的peak数量太少统计功效不够。这时候先别急着调MEME参数回家检查上游peak calling的q值阈值是否太宽松是否有重复样本是否已经过滤了blacklist区域我之前调试过一个项目motif结果总是一个不相关的CTCF基序排第一最后发现是peak没有过滤blacklist区域大量gap区域序列把信号带偏了。5.3 中心富集不显著怎么办如果MEME富集通过但CentriMo不显著第一步尝试把提取序列的窗口从100bp缩到50bp或者检查peak的summit是否都集中。有时候某个样本的peak summit不好CentriMo自然做不出来。另一种做法是单独跑一次CentriMo调低--score阈值。MEME-ChIP默认的score阈值是5如果怀疑太严格可以手动跑centrimo --oc centrimo_new --score 3 peaks_clean.fa meme_out/meme.xmlscore越低纳入的位点越多中心富集检验会更容易显著但相应地噪音也会增加。调整前后最好对比一下结果再做决定。5.4 在线版和本地版结果不一致在线版和本地版的结果差异通常是两个原因默认参数不同或者motif数据库版本不同。在线版会实时更新本地版则固定在你安装时的版本。为了可重复性和项目交接我建议在本地版跑完以后在方法部分写明“MEME Suite 5.5.4JASPAR 2022核心数据库”这类信息。5.5 常见问题速查表现象可能原因处理方法运行时间过长输入序列量太大按q值排序取top 5000个peak内存溢出并行数设置过高限制--threads或换大内存机器结果多是非特定重复motif未过滤重复序列过滤RepeatMasker区域找不到预期TFpeak质量差检查上游peak calling过滤blacklistCentriMo不显著序列窗口太宽改用summit±50bp在线版和本地版结果不同数据库版本不一致统一数据库文件并在方法里注明版本最后分享一个我个人的习惯MEME-ChIP跑完之后我一般不会只依赖它给的排名第一的motif而是把前3到5个结果都拉出来看它们有没有共同特征。有时候排名第三的motif才是真正的关键辅助因子比如很多转录因子会和AP-1家族协同结合你如果在结果里看到AP-1相关的motif反而说明实验体系是正常的。另外motif发现终究是统计推断它告诉你的是“这个序列特征在peaks里显著富集了”至于它是否真的是这个转录因子的功能性结合位点还是要回到实验去验证。我常和别人说第一次跑出漂亮的motif logo确实很兴奋但真正稳的时候是你能用这个motif去解释上下游基因表达变化的时候。
返回列表