DNA甲基化是表觀遺傳學研究中的一個重要一個分支,符合表觀遺傳學DNA的序列信息沒有改變的特地點,而是DNA的堿基發生了化學修飾。最常見的一種修飾如5-甲基胞嘧啶(5-methylcytosine, 5mC)。相關研究有關注于甲基化與基因表達調控、基因印記、X染色體失活、胚胎發育、腫瘤發生等。
甲基化的研究技術
總體上來說可以分為兩類:一種是測序,一種是芯片。
-
測序
如全基因組DNA甲基化測序(Whole Genome Bisulfite Sequencing,WGBS)和簡化甲基化測序 (Reduced representation bisulfite sequencing, RRBS),前者是利用 Bisulfite(重亞硫酸鹽)將未甲基化的C堿基轉換為U,而甲基化的C堿基不變的原理,從而對甲基化信號檢測。后者是根據酶切 (Msp I) 富集啟動子及CpG島區域,并進行Bisulfite測序,同時實現DNA甲基化狀態檢測的高分辨率和測序數據的高利用率。
BS-seq原理
-
甲基化芯片
Illumina的Infinium BeadChip芯片,包括HumanMethyation450(450K)和MethylationEPIC(850K)
甲基化分析流程
上游分析的主要目的提取甲基化位點,得到差異甲基化位點和甲基化區域(DML/DMR, DNA methylation loci/region),下游分析比較靈活,甲基化分析通常與其他組學聯合分析,如:
- 聯合轉錄組,對DML/DMR區域內的基因進行功能富集分析(可用的軟件有TopGO ,GSEABase , Enrichr),以及與非編碼RNA的整合分析等
- 聯合組蛋白修飾,一是借助組蛋白修飾可以注釋DML/DMR基因組分布,是否在啟動子或增強子等區域
- 聯合基因組,分析與甲基化與突變、變異的關系
STEP1:比對,提取甲基化位點
對于BS-seq甲基化位點的提取,常用的軟件有Bismark,bismark可以將bisulfite處理的reads比對到參考基因組上,同時提取甲基化位點。輸出結果可以直接導入到基因組瀏覽器(如IGV, SeqMonk)中查看甲基化水平。主要特點可以概括為以下幾個方面:
- 一步實現Bisulfite 比對和提取甲基化位點和區域
- 支持單端和雙端測序
- 支持ungapped, gapped or spliced alignments
- 輸出區分胞嘧啶甲基化在CpG, CHG和CHH
流程代碼參考:https://github.com/FelixKrueger/Bismark/tree/master/Docs
使用方法
主要分為3步:
- 1 . 準備參考基因組,需要將參考基因組進行bisulfite 轉換和建索引, 建索引是基于bowtie2和hisat2
bowtie2-build or hisat2-build
USAGE: bismark_genome_preparation [options] <path_to_genome_folder>
bismark_genome_preparation --path_to_aligner /usr/bin/bowtie2/ --verbose /data/genomes/homo_sapiens/GRCh38/
- 2 . 比對
比對前需要先進行質控,默認比對模式是bowtie2,輸出文件格式默認是bam文件,標準的比對方式設置multi-seed 的長度為20bp,即-L 20
,0 錯配:-N 0
。
USAGE:bismark [options] --genome <genome_folder> {-1 <mates1> -2 <mates2> | <singles>}
單端測序:
bismark --bowtie2 -N 0 -L 20 -o mapping-out ref data.fastq
# ref:是參考基因組的文件夾
# -o: mapping-out輸出文件夾
# --bowtie2:默認模式,可選參數
- 3 .提取甲基化位點
甲基化輸出文件中的符號的含義:點.
和小寫的z,x,h,u
都表示無甲基化,代表的類型分別是CpG,CHG,CHH,CN or CHN
,大寫的z,x,h,u
都表示有甲基化。
在提取甲基化位點前需要先去重, 不過對RRBS, amplicon以及靶向測序不建議去重。
USAGE: ./deduplicate_bismark [options] filename(s)
deduplicate_bismark -s mapping-out/test_data_bismark_bt2.bam
call DML/DMR
mkdir CpGout
bismark_methylation_extractor -s --gzip --bedGraph --buffer_size 1G \
--cytosine_report --genome_folder ref/ test_data_bismark_bt2.deduplicated.bam
輸出結果:
- 第一列測序信息
- 第二列甲基化狀態,+代表甲基化,- 代表未甲基化
- 第三列代表chromosome
- 第四列代表location
- 第五列代表methylation call
STEP2:差異甲基化區域分析
差異甲基化位點和區域(DML/DMR)的區別
差異甲基化區域的分析工具很多,這里介紹兩個R包,一個是
edmr
, 一個是DSS
。
edmr
edmr是基于雙峰正態分布模型和區域甲基化分析的成本函數優化DMR分析https://github.com/ShengLi/edmr](https://github.com/ShengLi/edmr。
# Step 1. Load add-on packages and example data
library(edmr)
library(GenomicRanges)
library(IRanges)
library(mixtools)
library(data.table)
data(edmr)
# Step 2. myDiff evalution and plotting
# fitting the bimodal normal distribution to CpGs distribution
myMixmdl=myDiff.to.mixmdl(myDiff, plot=T, main="example")
# plot cost function and the determined distance cutoff
plotCost(myMixmdl, main="cost function")
# Step 3. Calculate DMRs
# calculate all DMRs candidate
mydmr=edmr(myDiff, mode=1, ACF=TRUE)
# further filtering the DMRs
mysigdmr=filter.dmr(mydmr)
## annotation
# get genebody annotation GRangesList object
#genebody=genebody.anno(file="http://edmr.googlecode.com/files/hg19_refseq_all_types.bed")
genebody.file=system.file("extdata", "chr22.hg19_refseq_all_types.bed.gz", package = "edmr")
genebody=genebody.anno(file=genebody.file)
# plot the eDMR genebody annotation
plotdmrdistr(mysigdmr, genebody)
# get CpG islands and shores annotation
#cpgi=cpgi.anno(file="http://edmr.googlecode.com/files/hg19_cpgisland_all.bed")
cpgi.file=system.file("extdata", "chr22.hg19_cpgisland_all.bed.gz", package = "edmr")
cpgi=cpgi.anno(file=cpgi.file)
# plot the eDMR CpG islands and shores annotation
plotdmrdistr(mysigdmr, cpgi)
# prepare genes for pathway analysis with significant DMRs at its promoter regions
dmr.genes=get.dmr.genes(myDMR=mysigdmr, subject=genebody$promoter, id.type="gene.symbol")
dmr.genes
DSS
DSS是基于貝塔二項分布,可以用于分析DML/DMRs), 包括三個模塊: -兩組比較(有重復) ,兩組比較(無重復) ,多組比較,參考https://www.bioconductor.org/packages/release/bioc/html/DSS.html。
DSS的輸入格式如下:
- 第一列是染色體號
- 第二列是位置
- 第三列總的read counts
-
第四列是甲基化的read counts
第三列的數字要大于或等于第四列,要保證第三列和第四列數據類型是數字格式
library(DSS)
# 創建BSseq對象
if(T){
sn[c(1,11,2,12)]
BSobj <- makeBSseqData(allDat[c(1,11,2,12)],sn[c(1,11,2,12)])[1:5000,]
BSobj
save(BSobj,file = 'group-BSobj.Rdata')
dmlTest <- DMLtest(BSobj, group1=c("A0R_d0_rep1","A0R_d0_rep2"),
group2=c("A3R_d0_rep1","A3R_d0_rep2"),smoothing=F)
head(dmlTest)
}
## call DML/DMR
# using callDML function to call DML
# call DML
dmls = callDML(dmlTest, p.threshold=0.001)
head(dmls)
# call DMR
dmrs = callDMR(dmlTest, p.threshold=0.01)
head(dmrs)
# visulization
showOneDMR(dmrs[1,], BSobj)
甲基化芯片的分析可以參考:http://www.lxweimin.com/p/6411e8acfab3