小鬼的m6A图文复现06-样本相关性检验与Peak_Calling

m6A图文复现已经更新到第五期了
群里还是有非常多的小伙伴在问哪个步骤用哪个软件,在这里,我给出一张m6A分析的常规pipeline:

image

图出处:https://repicmod.uchicago.edu/repic/statistics.php

这个网站集合了非常多的目前已经发表的m6A测序数据,Peak Calling等方法结果以及比较。

1、样本相关性分析

我们前面已经完成了数据比对,在进行Peak Calling之前我们先来看看这几个样本之间的相关性,使用deepTools工具包来看看生物学重复是否聚集到了一起,分组信息为:

image

输入数据可以是bam也可以是bigwig,-bs参数默认为10000,可以适当调整这个区间,对相关性计算出来的结果影响还挺大,作者提供的代码用的10,耗时比较久出来结果也不是很好,在原有代码上我还添加了 --plotNumbers 参数在图片上显示相关性大小。

此外corMethod可以选择pearson或者spearman,-o 可以输出为heatmap_pearsonCor.pearson.pdf 的pdf格式或者heatmap_pearsonCor.pearson.png的png格式

# pearson correlation between samples
multiBamSummary bins -bs 1000 -p 10 --bamfiles *bam -o results.npz

plotCorrelation \
    -in results.npz \
    --corMethod pearson \
    --skipZeros  \
    --plotNumbers \
    --labels KO1_MeRIP KO1_NoIP KO2_MeRIP KO2_NoIP KO3_MeRIP KO3_NoIP WT1_MeRIP WT1_NoIP WT2_MeRIP WT2_NoIP WT3_MeRIP WT3_NoIP \
    --plotTitle "m6A Correlation across samples" \
    --whatToPlot heatmap --colorMap Blues \
    -o heatmap_pearsonCor.pearson.pdf --removeOutliers  \
    --outFileCorMatrix pearsonCorr.rmOut.tab

结果如下,可以看到IP样本聚集在一起,Input样本聚集在一起,WT组和KO组也能看到两个色块。结果还行。

image

2、Peak Calling

从上面那张流程图里我们可以看到Peak Calling有三个软件:MACS2,exomePeak/exomePeak2,MeTPeak,也是目前市面上m6A分析数据中最常用的三款软件。

关于其中两个软件有篇文献做了测评和比较:

目前对MeRIP-Seq数据进行m6A peak calling分析的软件有两类,一类是早先为ChIP-Seq数据分析所研发的软件,如MACS;另一类则是专门为转录组m6A位点检测而开发的如exomepeak,HEPeak及在前两者基础上发展的MeTPeak。

利用已发表的两份MeRIP-Seq数据,对MACS和MeTPeak两种方法进行了对比,发现尽管MACS可以获得更多的Peak数,但使用MeTPeak所获得m6A Peaks更具有m6A主要发生的位点RRACH(R=G/A; H=A/C/U)这一motif的富集的特点,在MACS 单独发现的Peaks中有超过20%的Peaks分布在TSS这一m6A修饰较少发生的区域。此外,MeTPeak的分析具有链特异性,并且能更好的在剪接的外显子(junction exons)区域发现Peaks,因而在MeRIP-Seq数据分析中,MeTPeak更为适用。

ref:[1] Zeng, Y. , et al. "Refined RIP-seq protocol for epitranscriptome analysis with low input materials." PLoS Biology 16.9(2018):e2006092.

image

本教程也不太推荐使用MACS2,更加倾向于选择exomePeak/exomePeak2,MeTPeak这些专门为m6A测序数据开发的软件来进行分析。

首先第一个问题,应该也是大多数人会遇到的:Peak Calling的时候有两种做法,分为Sample和Group两种

  • 单个样本IP与自身Input进行Peak Calling:这样每个样本就会得到一个Peak结果,对于生物学重复,后面可以合并Peak取交集部分
  • 同组的多个IP放在一起,多个Input合并在一起进行Peak Calling:这样一个组就一个Peak结果。

第一种要求每个样本都有自身的Input样本;第二种可以不要求,可以是三个IP,两个Input之类的。

exomePeak2是exomePeak的升级版本,可以参考:孟佳课题组|Peak Calling软件exomePeak以及exomePeak2使用指北,本教程此次使用exomePeak2作为Peak Calling分析。

使用exomePeak2进行Peak Calling

由于exomePeak2为R包,输入数据为bam文件,数据比较大,耗时比较久,代码就写成传参脚本然后在服务器上提交后台运行。

R传参脚本:

rm(list=ls())
options(stringsAsFactors = F)
library(getopt)
spec <- matrix(c(               
  'help',   'h',  0, 'logical', 
  'gtf',    'g',  1, 'character', 
  'bamdir', 'b',  1, 'character',
  'ip' ,    'i',  1, 'character',
  'input' , 'I',  1, 'character',
  'paired', 'p',  2, 'logical',
  'lib',    'l',  2, 'character',
  'mode',   'm',  2, 'character',
  'cores',  'c',  2, 'numeric',
  'pvalue', 'P',  2, 'numeric',
  'od',     'o',  1, 'character'), 
  byrow = TRUE, ncol = 4)
opt <- getopt(spec)

print_usage <- function(spec=NULL){
cat(' Rscript exomePeak2.R  --gtf Mus_musculus.gtf --bamdir Hisat2 --ip ip1,ip2 --input input1,input2 --od ./
Options: 
    --help   -h      NULL
    --gtf    character    gtf file, genome annotation [forced]
    --bamdir character    mapping file, bam dir [forced]
    --ip     character    IP Sample, used for peak calling only
    --input  character    INPUT Sample, used for peak calling only

    --paired logical      logical of whether the data comes from the Paired-End Library
                          default: TRUE

    --lib    character    the protocal type of the RNA-seq library, can be 
                          one in c("unstranded", "1st_strand", "2nd_strand"); 
                          default = "1st_strand"

    --mode   character    a character specifies the scope of peak calling on genome, can be 
                          one of c("exon", "full_tx", "whole_genome"); 
                          Default = "exon"

    --cores  numeric      a numeric value specifying the number of cores used for parallel computing; 
                          default = 6.

    --pvalue numeric      the cutoff on p values in peak calling
    --od     character    outdir [forced]
      \n')
  q(status=1)
}

if ( !is.null(opt$help) | is.null(opt$gtf) | is.null(opt$bamdir) ) { print_usage(spec) }
if ( is.null(opt$ip) |is.null(opt$input)) { print_usage(spec) }
if ( is.null(opt$paired) )  { opt$paired <- TRUE }
if ( is.null(opt$lib) )     { opt$lib <- "1st_strand" }
if ( is.null(opt$mode) )    { opt$mode <- "exon" }
if ( is.null(opt$cores) )   { opt$cores <-  6 }
if ( is.null(opt$pvalue) )   { opt$pvalue <-  1e-5 }
if (!file.exists(opt$od))   { dir.create(opt$od) }

library(exomePeak2)
package.version("exomePeak2")

## peak calling for every sample or groups
ip <- unlist(strsplit(opt$ip,split=','))
input <- unlist(strsplit(opt$input,split=','))

ip_bam <- paste0(opt$bamdir,'/',ip,'/',ip,'.Hisat_aln.sorted.bam')
input_bam <- paste0(opt$bamdir,'/',input,'/',input,'.Hisat_aln.sorted.bam')

print(paste('ip_bam:',ip_bam))
print(paste('input_bam',input_bam))

txdb <- GenomicFeatures::makeTxDbFromGFF(file = opt$gtf, format="gtf", dataSource="Ensembl")

if( !is.null(opt$pvalue) ) {
  result <- exomePeak2(bam_ip = ip_bam, 
                     bam_input = input_bam,

                     # data type
                     paired_end = opt$paired,
                     library_type = opt$lib,
                     txdb = txdb,

                     # cut off
                     p_cutoff = opt$pvalue,
                     peak_calling_mode = opt$mode, 

                     # parallel running
                     parallel = opt$cores, save_dir = opt$od
                     )
}


## result write out default

服务器提交后台运行:

# 手动造一个config文件,内容为下:
cat group.txt
#MeRIP  NoIP    NAME
SRR866991   SRR866992   KO1
SRR866993   SRR866994   KO2
SRR866995   SRR866996   KO3
SRR866997   SRR866998   WT1
SRR866999   SRR867000   WT2
SRR867001   SRR867002   WT3

# 生成sh脚本
cat group.txt  |awk 'NR>1{print"nohup Rscript exomePeak2.R --gtf Mus_musculus.GRCm38.104.gtf.gz --bamdir  mapping/ --ip "$1"  --input " $2 " --paired FALSE --lib unstranded --pvalue 1e-05 --od Peak_Calling/"$3 " >Peak_Calling/$3.log &"}' >exomePeak2.sh

# sh脚本内容一行示例如下
nohup Rscript exomePeak2.R --gtf Mus_musculus.GRCm38.104.gtf.gz --bamdir  mapping/ --ip SRR866991 --input SRR866992 --paired FALSE --lib unstranded --pvalue 1e-05 --od Peak_Calling/KO1 >Peak_Calling/$3.log &

# 提交后台运行
sh exomePeak2.sh &

下一期分享运行结果以及结果可视化!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容