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}.trim2.使用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.fa2.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?