宝,我今天去跑代码了,跑的什么码,让你文章脱颖而出的砝码!(附代码,科研舔狗必备!)
探索生信之美,解构每段代码背后的逻辑
大家好呀,我是风间琉璃,上一期我们讲解了m6A-seq(MeRIP-Seq)分析在五分文章中的应用(“这波方案火了!下一个国自然申请方向?用这些分析当你的前期工作,拿到直接用!”)。这一期我们就开始进行代码实操环节进一步讲解怎么分析m6A-seq(MeRIP-Seq)数据。
本期我们讲解的是MeRIP-Seq数据的分析利器——exomePeak2。exomePeak2对RNA甲基化免疫沉淀测序数据(MeRIP-Seq)提供了偏差量化和峰值检测的方法。MeRIP-Seq能够应用测序手段在给定细胞系的条件下对RNA修饰位点的丰度进行测量。
但是MeRIP-Seq存在几个弊端:
1. 和其他二代测序的技术一样,对PCR放大的偏倚格外敏感;
2. 在生物学重复样本间,测序的count数据具有显著的生物学改变。
而exomePeak2内置的算法则能够解决这一系列问题。通过exomePeak2包能够进行RNA甲基化位点peak鉴定、peak定量以及差异分析。这些步骤能够通过一站式,也可以通过多步骤进行分析。为了演示具体的分析流程,我们以多步骤解析先进行讲解~
在正式开始之前我们还需要大致讲解一下MeRIP-Seq,首先我们从样本中分离纯化出RNA,接下来将RNA裂解为50-100碱基长度的片段。接下来以分为二,其中一部分通过特异性抗体将甲基化的RNA序列片段进行沉淀后进行测序,这就是我们的IP数据;而另一部分则直接进行测序作为Input contol数据。后者的作业相当于进行背景校正,从而对甲基化的peak峰值进行定量。而我们经过上游的片段基因组比对后得到bam文件就可以开始我们的下游分析了。我们通过输入bam文件,得到我们peak的bed文件。我们就开始来看看吧~
讲完大致流程我们直接开始吧~
我们进行MeRIP-seq分析时首先需要进行数据准备,这时需要将片段比对储存的bam文件,每一个样本都有bam_input和bam_ip两个文件,分别是背景测序文件和免疫沉淀测序文件。除此之外我们还需要转录本的注释文件,这里我们输入的是第7号染色体的GFF文件格式。同样我们也可以使用TxDb文件进行分析。
# 安装包 if(!requireNamespace('BiocManager', quietly = TRUE))
# install.packages('BiocManager') BiocManager::install('exomePeak2') 加载包
library(exomePeak2)
# 基因注释文件目录
GENE_ANNO_GTF = system.file("extdata", "example.gtf", package = "exomePeak2")
# 获取IP样本的bam文件目录
f1 = system.file("extdata", "IP1.bam", package = "exomePeak2")
f2 = system.file("extdata", "IP2.bam", package = "exomePeak2")
f3 = system.file("extdata", "IP3.bam", package = "exomePeak2")
f4 = system.file("extdata", "IP4.bam", package = "exomePeak2")
# 目录进行整合
IP_BAM = c(f1, f2, f3, f4)
# 获取input样本的bam文件目录
f1 = system.file("extdata", "Input1.bam", package = "exomePeak2")
f2 = system.file("extdata", "Input2.bam", package = "exomePeak2")
f3 = system.file("extdata", "Input3.bam", package = "exomePeak2")
# 目录进行整合
INPUT_BAM = c(f1, f2, f3)
# treat组的IP数据目录
f1 = system.file("extdata", "treated_IP1.bam", package = "exomePeak2")
TREATED_IP_BAM = c(f1)
# treat组的Input数据目录
f1 = system.file("extdata", "treated_Input1.bam", package = "exomePeak2")
TREATED_INPUT_BAM = c(f1)
exomPeak2的scanMeripBAM()将BAM进行整合,并且将FLAG进行筛除。
MeRIP_Seq_Alignment <- scanMeripBAM(bam_ip = IP_BAM, bam_input = INPUT_BAM, bam_treated_input = TREATED_INPUT_BAM,
bam_treated_ip = TREATED_IP_BAM, paired_end = FALSE #是否为双端测序
)
查看一下
MeRIP_Seq_Alignment
# MeripBamFileList of length 9
# names(9): IP1.bam IP2.bam IP3.bam ... treated_IP1.bam treated_Input1.bam
通过exomePeakCalling()函数首先能够根据GFF注释文件确定外显子区间,并且对read进行计数以及广义线性模型(GLM)从而检测出具有显著改变的peak。除此之外,通过提供我们的基因组数据,比如hg19,从而校正不同样本的GC含量偏倚。
SummarizedExomePeaks <- exomePeakCalling(merip_bams = MeRIP_Seq_Alignment, gff_dir = GENE_ANNO_GTF,
genome = "hg19")
查看一下格式
SummarizedExomePeaks
# class: SummarizedExomePeak
# dim: 23 9
# metadata(0):
# assays(1): counts
# rownames(23): peak_10 peak_11 ... control_5 control_6
# rowData names(2): GC_content feature_length
# colnames(9): IP1.bam IP2.bam ... treated_IP1.bam treated_Input1.bam
# colData names(2): design_IP design_Treatment
read count数据 获得
assays(SummarizedExomePeaks)
# List of length 1
# names(1): counts
查看研究设计
colData(SummarizedExomePeaks)
# DataFrame with 9 rows and 2 columns
# design_IP design_Treatment
# <logical> <logical>
# IP1.bam TRUE FALSE
# IP2.bam TRUE FALSE
# IP3.bam TRUE FALSE
# IP4.bam TRUE FALSE
# Input1.bam FALSE FALSE
# Input2.bam FALSE FALSE
# Input3.bam FALSE FALSE
# treated_IP1.bam TRUE TRUE
# treated_Input1.bam FALSE TRUE
GC含量以及feature length
elementMetadata(SummarizedExomePeaks)
# DataFrame with 23 rows and 2 columns
# GC_content feature_length
# <numeric> <integer>
# 1 0.485000 600
# 2 0.505000 200
# 3 0.592000 250
# 4 0.698462 325
# 5 0.574815 675
# ... ... ...
# 19 0.687898 157
# 20 0.593750 96
# 21 0.608939 179
# 22 0.680000 125
# 23 0.536000 125
修饰位点(Peak)的基因组起止
rowRanges(SummarizedExomePeaks)
# GRangesList object of length 23:
# $peak_10
# GRanges object with 1 range and 1 metadata column:
# seqnames ranges strand | gene_id
# <Rle> <IRanges> <Rle> | <character>
# 10 chr7 150910205-150910654 - | ABCF2
# -------
# seqinfo: 1 sequence from an unspecified genome; no seqlengths
#
# $peak_11
# GRanges object with 1 range and 1 metadata column:
# seqnames ranges strand | gene_id
# <Rle> <IRanges> <Rle> | <character>
# 11 chr7 150909780-150909829 - | ABCF2
# -------
# seqinfo: 1 sequence from an unspecified genome; no seqlengths
#
# $peak_12
# GRanges object with 2 ranges and 1 metadata column:
# seqnames ranges strand | gene_id
# <Rle> <IRanges> <Rle> | <character>
# 12 chr7 150817227-150817232 + | AGAP3
# 12 chr7 150819812-150819905 + | AGAP3
# -------
# seqinfo: 1 sequence from an unspecified genome; no seqlengths
#
# ...
# <20 more elements>
或者获得单碱基RNA修饰注释文件
f2 = system.file("extdata", "mod_annot.rds", package = "exomePeak2")
MOD_ANNO_GRANGE <- readRDS(f2)
SummarizedExomePeaks <- exomePeakCalling(merip_bams = MeRIP_Seq_Alignment, gff_dir = GENE_ANNO_GTF,
genome = "hg19", mod_annot = MOD_ANNO_GRANGE)
在进行peak定量或者差异分析之前,我们还需要进行标准化从而校正不同样本因为测序深度而导致的差异。这里有estimateSeqDepth()和normalizeGC()两种功能。
# 绘制GC和log2FC之间的散点图
plotLfcGC(SummarizedExomePeaks)
# 进行测序深度预测以及GC校正
SummarizedExomePeaks<- estimateSeqDepth(SummarizedExomePeaks)
SummarizedExomePeaks<- normalizeGC(SummarizedExomePeaks)
# 再次绘制绘制GC和log2FC之间的散点图
plotLfcGC(SummarizedExomePeaks)
# 有/无统计学意义的差异修饰位点用不同颜色进行标记
# 接下来展示Background、ALL、Modification三种类型的测序深度
plotSizeFactors(SummarizedExomePeaks)
最后分析的结果能够以CSV和bed文件格式进行输出。输出到exomePeak2_outpu文件夹中。
exportResults(SummarizedExomePeaks, format = "BED")
前面我们讲解了如果多个步骤进行分析,其实我们可以非常简单一步完成。我们可以直接通过一行代码进行差异分析,exomePeak2能够对外显子区域的peak鉴定定量后通过GLM方法进行差异分析
exomePeak2(bam_ip = IP_BAM, bam_input = INPUT_BAM, bam_treated_input = TREATED_INPUT_BAM,
bam_treated_ip = TREATED_IP_BAM, gff_dir = GENE_ANNO_GTF, genome = "hg19", paired_end = FALSE,
save_dir = "exomePeak_output")
# class: SummarizedExomePeak
# dim: 23 9
# metadata(0):
# assays(2): counts GCsizeFactors
# rownames(23): peak_10 peak_11 ... control_5 control_6
# rowData names(2): GC_content feature_length
# colnames(9): IP1.bam IP2.bam ... treated_IP1.bam treated_Input1.bam
# colData names(3): design_IP design_Treatment sizeFactor
保存在exomePeak_output文件夹中
我们可以看到结果输出在DiffMod文件中,有csv、rds和bed文件格式。我们可以进一步打开查看。包括每一个peak的基因组位置、不同分组的read count数、一步差异倍数和P值等等。大家可以打开详细看一下。
好啦,本次的分析到这儿就结束啦,这一期我们讲解了如何通过输入BAM文件,进行peak鉴定、peak定量以及peak差异分析,从而得到我们想要的结果。大家可以自己上手跑一下。
本期就到此结束啦,我是风间琉璃,我们下期见~
往期传送门
—
END—
撰文丨风间琉璃
排版丨四金兄
主编丨小雪球
欢迎大家关注解螺旋生信频道-挑圈联靠公号~
关键词
数据
基因组
结果
文章
步骤
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。