2019-01-10-DNA甲基化测序数据处理系列3

第三部分--实战篇之差异分析

Posted by DL on January 10, 2019

参考来源1:https://www.jianshu.com/p/5d7e550abc1a

参考来源2:https://www.jianshu.com/p/971ff2ee533a

参考来源3:https://www.plob.org/article/10843.html

第三部分 实战篇之差异分析

1. 前言

衔接上一部分数据比对后的结果,使用R包DSS进行处理。

2. Input文件准备

我们先来复习一下上一部分中得到的数据结果: *.bismark.cov.gz 文件

$head test_data_bismark_bt2.deduplicated.bismark.cov
Chr1   975476  975476  100 1   0
Chr1   975488  975488  100 1   0
Chr1   975490  975490  100 1   0
Chr1   2224487 2224487 100 1   0
Chr1   2224489 2224489 100 1   0
Chr1   2224514 2224514 100 1   0
Chr1   2224520 2224520 100 1   0
Chr1   2313220 2313220 0   0   1
Chr1   9313902 9313902 100 1   0
Chr1   9313914 9313914 100 1   0

.bismark.cov文件记录了每个甲基化位点的覆盖度,包含发生甲基化的reads数,未发生甲基化的reads数以及甲基化频率。

# 第一列代表chromosome
# 第二,三列代表location
# 第四列代表甲基化百分比
# 第五列代表发生甲基化的reads数
# 第六列代表未发生甲基化的reads数

3. 使用Bioconductor中的DSS包进行差异分析

3.1 DSS包介绍

这里我们使用的R包为DSS,使用Bioconductor进行安装。

这个包可以对甲基化数据做两件事:

  • 找出差异甲基化位点
  • 根据甲基化位点找出差异化甲基化区域

DSS包对差异甲基化的检测基于β负二项分布的严格沃尔德检验。

3.2 DSS包的安装

# R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"

if (!requireNamespace("BiocManager"))
    install.packages("BiocManager")
BiocManager::install("GenomicFeatures")
BiocManager::install("R.methodsS3")
BiocManager::install("R.oo")
BiocManager::install("bsseq")
BiocManager::install("DSS")
library("DSS")

3.3 DSS包的输入格式

DSS包可以对无重复数据进行处理

输入数据的格式如下:

  • 第一列为染色体

  • 第二列为位置

  • 第三列为total reads

  • 第四列为甲基化的reads

chr pos N X
chr18 3014904 26 2
chr18 3031032 33 12
chr18 3031044 33 13
chr18 3031065 48 24

# 根据这个特性,我们可以将上面的输出文件通过Linux或者R进行简单的处理得到input文件。

4. Call DML or DMR

DML是甲基化差异位点,DMR为甲基化差异区域。

使用DSS包自带的数据进行演示

4.1 载入两个包DSS和bsseq(需要该包构建obj对象)

setwd("~/GSE81436/BS-seq/DSS_data/Cr-DJ_osddm1a1b")
library(DSS)
require(bsseq)
dat1 <- read.table("Cr-DJ_DSS.txt", header=TRUE)
dat2 <- read.table("osddm1a1b_DSS.txt", header=TRUE)
BSobj <- makeBSseqData( list(dat1, dat2),c("C","N") )
BSobj
# 查看BSobj的类型
BSobj 
An object of type 'BSseq' with
  1000 methylation loci
  4 samples
has not been smoothed
All assays are in-memory、

4.2 根据甲基化水平进行loci的差异分析

利用DMLtest函数call DML,分为以下几个步骤:

  • 预测所有CpG位点的平均甲基化水平

  • 对每个CpG位点估算其甲基化水平的dispersions

  • 进行沃尔德检验

在第一步过程中,smoothing可以更好帮助估算甲基化(针对whole-genome BS-seq)。

而RRBS不需要smoothing。

根据甲基化水平进行loci的差异分析

dmls <- callDML(dmlTest.sm, p.threshold=0.001)
head(dmls)

dmls2 <- callDML(dmlTest.sm, delta=0.1, p.threshold=0.001)
head(dmls2)

4.3 根据dmlTest.sm来call DML

dmls <- callDML(dmlTest.sm, p.threshold=0.001)
head(dmls)

# 用户也可以指定差异的阈值,只有差异大于阈值的才会被call出来
dmls2 <- callDML(dmlTest.sm, delta=0.1, p.threshold=0.001)
head(dmls2)

注意:smoothing前后得到的结果差异还是很大,所以针对不同的实验类型我们需要注意是否使用smoothing。同理,也可以使用的delta参数以及调整p.threshold得到合适的结果。

4.4 根据dmlTest Call DMR

dmrs <- callDMR(dmlTest.sm, p.threshold=0.01)
head(dmrs)

# 用户也可以指定差异的阈值,只有差异大于阈值的才会被call出来
dmrs2 <- callDMR(dmlTest.sm, delta=0.1, p.threshold=0.05)
head(dmrs2)

5. 可视化

DSS包提供了一个不是很美观的可视化函数,用户其实可以使用coverage结果在R里面作图。

showOneDMR(dmrs[1,], BSobj)

F7klXF.png

6. 结果输出

write.table(dmls,file="Cr-DJ_osddm1a1b.dmls.part.txt",sep="\t")
write.table(dmls2,file="Cr-DJ_osddm1a1b.dmls.part2.txt",sep="\t")
write.table(dmrs,file="Cr-DJ_osddm1a1b.dmrs.part.txt",sep="\t")
write.table(dmrs2,file="Cr-DJ_osddm1a1b.dmrs.part2.txt",sep="\t")