DNA甲基化分析流程

1.对原始数据进行过滤

java -jar trimmomatic-0.32.jar PE -threads 18 -phred33 R1.fastq R2.fastq -baseout 输出文件目录/文件前缀 ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 LEADING:10 TRAILING:10 SLIDINGWINDOW:4:20 MINLEN:50 >log.${ID}.trim 2>err.${ID}.trim

2.使用Bismark进行甲基化的检测

参考文档 https://github.com/FelixKrueger/Bismark/tree/master/Docs

2.1 准备基因组索引文件

  • 程序会对基因组序列进行C->T and G->A 的转化

  • 之后使用hisat2-build进行索引的构建

#指定基因组文件所在文件夹
./bismark_genome_preparation --hisat2 travis_files/
#之后会生成两个转化后的基因组文件,及对应的索引
├── Bisulfite_Genome
   ├── CT_conversion
      ├── BS_CT.1.ht2
      ├── BS_CT.2.ht2
      ├── BS_CT.3.ht2
      ├── BS_CT.4.ht2
      ├── BS_CT.5.ht2
      ├── BS_CT.6.ht2
      ├── BS_CT.7.ht2
      ├── BS_CT.8.ht2
      └── genome_mfa.CT_conversion.fa
   └── GA_conversion
       ├── BS_GA.1.ht2
       ├── BS_GA.2.ht2
       ├── BS_GA.3.ht2
       ├── BS_GA.4.ht2
       ├── BS_GA.5.ht2
       ├── BS_GA.6.ht2
       ├── BS_GA.7.ht2
       ├── BS_GA.8.ht2
       └── genome_mfa.GA_conversion.fa

2.2 进行比对

  • geneme_folder 指定基因组文件夹

  • --hisat2 使用hisat2进行比对

  • non_direction 跟建库方式有关 默认是direction

  • -L 设置种子序列长度

  • -N 设置允许错配数 只在bowtie2模式下有用后面要考虑 --score-min L,0,-0.2

  • --parallel 指定核心数

  • -p 指定线程数

  • --known-splicesite-infile 提供剪切位点文件,只在hisat2比对模式下可用

  • -o 输出文件前缀

产生可变剪切位点文件

进行hisat2模式的比对,lsf脚本

2.3 过滤比对得到的bam文件

当使用全基因组进行亚硫酸氢盐处理得到的文库时,建议进行这一步操作,去除 Bismark 比对的重复reads, 因为PCR跑的循环数多了的话,会导致另外一条链上比对到的read数增加。

  • excessive PCR amplification

  • Sequences which align to the same genomic position but on different strands are scored individually.

  • -p 指定为双端测序

  • -o 输出文件前缀

  • --output_dir 输出文件目录

  • --bam 最终去重后为BAM格式

2.4 提取对应的甲基化位点

将比对的bam文件经过过滤之后,使用Bismark methylation extractor 提取程序,在默认参数下使用

  • -p 指定双端测序数据

  • --parallel 指定核数

  • --bedGraph 输出bed文件

  • --gzip 输出文件使用gzip压缩

因为甲基化的数据量非常大,程序根据甲基化的类型结合比对时,链的关系可以得到12个文件

当然对链特异性甲基化数据不感兴趣时,也可以使用--comprehensive参数,只生成3中甲基化的报告文件,文件的数据是由四种链进行合成的

2.5基于统计上的显著性提取对应的位点

在进行建库的时候,使用了λ噬菌体的基因组来获得Bisufite处理的转化效率,大概是99.4%,接下来使用二项分布对每个位点甲基化的显著性进行检验

  • 每个甲基化的C被转化的概率为99.4%;不被转化的概率为0.6%,所以总体服从(n,0.006)的二项分布

  • 进行假设检验,使用p-value=0.05作为阈值,当某个甲基化位点达到阈值,才被认为是真实的

  • 同时至少有3条read支持这个甲基化位点

自己写了一个python脚本进行统计,每个甲基化位点的甲基化概率

输出结果

  • 前两列,甲基化的位置

  • 支持该位点的read数目

  • 不支持该位点的read数目

进行二项分布检验

运行脚本Rscript bunomTest.R test.txt

  • 对每个位点,假定的甲基化位点reads超过3条的进行二项分布检验

    没有超过3个read的位点会被抛弃掉,在之后的分析中会带来偏差

  • 在每个没有被甲基化位点仍旧保持C的概率为0.006,H0假设,该位点是由于试剂的原因导致原本没有甲基化的C仍旧保持为C,因此当p-value小于阀值时,拒绝原假设,认为这个C位点并不是由于试剂的原因,而是真实存在的甲基化位点

得到的结果文件

前面的R脚本太慢了,数据量大的话要跑很久很久,使用我另外写的一个python多进程脚本 https://zpliu.gitbook.io/booknote/script/binomtest

进行多重比较检验,使用FDR方法

FDR:错误拒接率,意思就是错误的拒绝了H0假设,是假阳性,通过FDR校验保证数据总体假阳性不超过阈值,并且进行多重校验的数据集是需要满足二项分布的数据集的p-value和read数目超过3的。

fdr_correction.R

在提交任务的时候,文件路径不能有.不然有错误

CHH文件太大了分开跑

对每个文件分别提取支持的read与不支持的read

合并多个文件的内容

直接使用awk将多个文件的内容进行合并

merge.sh

统计没有甲基化的位点与发生了甲基化的位点

  • 由于测序深度的原因,在计算DNA甲基化的时候,有点胞嘧啶可能没有被测到可能会导致结果偏低,因此仅仅考虑被测到的胞嘧啶。

  • 区域内所有甲基化C位点总的reads数/区域内总的覆盖度

    FDR值达到显著性的支持read数/FDR达到显著性支持read数+FDR达到显著性不支持数+FDR没有达到显著性值的read数

在python中进行多重测验

参考

https://github.com/FelixKrueger/Bismark/tree/master/Docs

FDR矫正 https://blog.csdn.net/zhu_si_tao/article/details/71077703

Last updated

Was this helpful?