当前位置: 首页 > news >正文

CHIP-seq 分析笔记

本周学习一下CHIP-seq。 并根据网上的教程,自己实践一下, 一方面是要为了弄清楚什么是chip-seq, 这个技术有什么用,另一个方面是想学习一下这个技术如何来实践, 本文参考的文章主要来自生信技能树,以及简书上的其他作者写的教程,由于每个人在做分析时,使用的操作系统不一样,所以网上的代码在自己的电脑上进行运行的时候经常出现问题,这需要每个人针对自己的情况进行分析和总结。 本次分析采用的系统是MACos 10.12.6。

先不谈CHIP-seq 的原理, 因为我正在学习中,后期将这部分内容补上。先根据文献提供的数据和网上的代码进行实际操作。

CHIP-seq能干什么?

明确每一类组蛋白或者转录因子在整个基因组上结合基因的位置
如果比较多个组蛋白在亚基,可以看这些亚基之间在基因组上结合的基因的包含关系,即用韦恩图展示这些组蛋白结合基因相互之间是否包含。
检查每一类组蛋白结合基因在TSS上的位置。
检查每一组(不同组蛋白之间结合相同的基因)在TSS上的位置。(这样可以看出缺少某一类组蛋白之后,基因是否表达,验证这个组蛋白具有的功能和意义)
不同组蛋白结合基因的功能(GO),及参与的代谢通路(KEGG)
可以研究每一个组蛋白targets 的基因的表达
第一步:从NCBI下载数据,并解压到本地电脑。 从NCBI的GEO dataset 中输入作者上传的GEO号码GSE42466,如下图所示:

在本文文章的哪里打对勾,并进入,之后看一看到文章的具体信息,包括作者的信息,以及实验方法,实验设计,实验上传的具体数据编号。如下所示:

在最后的一栏中找到本数据的SRA号码,点击进入,如下:

在上面作者提供的6个数据上打上对勾,并在右上侧的send to 这个框中选择file, 在format 中选择 runinfo. 点击生成文件,即可生成下载的文件,这个是个excel文件,包含了具体run的信息,我们需要的是run 的ID号码,打开EXCEL文件,并在download 那一列获取SRA号SRR620204。 这个号码用于下载。代码如下:

prefetch SRR620204
如果批量下载,则将上面的文件编号存放到一个文本文章中,如 sradata.txt ,下载代码如下:

prefetch --option-file sradata.txt #install prefetch first before run the code
之后用fastq-dump 软件进行解压,如下:

ls *sra |while read id; do fastq-dump –split-3 $id;done # --split-3的目的是如果文件包含两个以上文件,则分别命名,如果是一个文件则直接是文件原名,而不是根据reads 来进行拆分
以上可以获得本实验的的所有数据,但是在实际操作中,SRR620207一致下载不下来,原因不知道。 我暂且不比对此文件,在后期使用作者提供的文件。

第二步: 对原始数据进行质控,采用fastqc, multiqc 两个软件, fastqc对每个文件进行质控分析, multiqc对fastqc的结果进行整合,方便读者从总体上对数据质量进行把控。

ls *.fastq |while read id; do fastqc -t 3 $id; done
multiqc *fastqc.zip --pdf # multiqc 在我的电脑山无法生成PDF,虽然我按照说明书安装了pandoc, latex. 但依然不行.
根据multiqc的质控显示,本测序数据在3’端的数据质量不高,fastqc 也显示警告,原因是平均的碱基质量有点低,如下图所示:

因此在接下来比对的时候,我们要去掉3‘端质量不好的碱基,用bowtie2自动去掉。

第三步: 利用bowtie2(本次分析采用的是bowtie2-2.3.5)对数据进行mapping, 数据索引下载如下:

wget -4 -q ftp://ftp.ccb.jhu.edu/pub/data/bowtie2_indexes/mm10.zip
unzip mm10.zip
比对程序如下:

ls *.fastq|while read id;
do bowtie2 -p 3 -3 5 --local -x ~/src/GSE42466/data/chip-se/reference/mm10 -U $id | /opt/biosoft/samtools-1.3.1/samtools sort -O bam -o $id.bam;
done
比对后的总体结果如下:

SRR620204

19687027 reads; of these:

19687027 (100.00%) were unpaired; of these:

7960096 (40.43%) aligned 0 times

8614711 (43.76%) aligned exactly 1 time

3112220 (15.81%) aligned >1 times

59.57% overall alignment rate

SRR620205

20710168 reads; of these:

20710168 (100.00%) were unpaired; of these:

2716388 (13.12%) aligned 0 times

12169372 (58.76%) aligned exactly 1 time

5824408 (28.12%) aligned >1 times

86.88% overall alignment rate

SRR620206

21551927 reads; of these:

21551927 (100.00%) were unpaired; of these:

7316904 (33.95%) aligned 0 times

10534163 (48.88%) aligned exactly 1 time

3700860 (17.17%) aligned >1 times

66.05% overall alignment rate

SRR620208

13291429 reads; of these:

13291429 (100.00%) were unpaired; of these:

5731176 (43.12%) aligned 0 times

5235529 (39.39%) aligned exactly 1 time

2324724 (17.49%) aligned >1 times

56.88% overall alignment rate

SRR620209

31218866 reads; of these:

31218866 (100.00%) were unpaired; of these:

5699289 (18.26%) aligned 0 times

17025381 (54.54%) aligned exactly 1 time

8494196 (27.21%) aligned >1 times

81.74% overall alignment rate

#############

比对完之后,利用IGV进行可视化,先用samtools进行index, 之后在IGV中导入,导入的时候选择BAM文件即可,INDEX文件也必须在bam文件相同的文件夹。

samtools index FGENESH_C15+B10.sorted.bam FGENESH_C15+B10.sorted.bai
从IGV上确实可以发现, chip-seq 测序完在有target 的地方有峰值,没有target的地方对照和实验都没有,如下所示:

之后,我们使用macs2进行peal calling, 在使用前请先安装macs2.

macs2 callpeak -c igG_old.sorted.bam -t Suz12.sorted.bam -q 0.05 -f BAM -g mm -n suz12 2> suz12.macs2.log
macs2 callpeak -c igG_old.sorted.bam -t Ring1B.sorted.bam -q 0.05 -f BAM -g mm -n Ring1B 2> Ring1B.macs2.log
macs2 callpeak -c igG.sorted.bam -t Cbx7.sorted.bam -q 0.05 -f BAM -g mm -n cbx7 2> cbx7.macs2.log
比对之后进行数据的作图和可视化,代码

ls bam |while read id;
do file=$(basename i d ) ; s a m p l e = id ); sample= id);sample={file%%.
};
echo $sample;
bamCoverage -b $id -o $sample.bw; ##–normalizeUsing RPKM -p 5
computeMatrix reference-point --referencePoint TSS -b 10000 -a 10000 -R mm10_ensenble_ref.bed -S KaTeX parse error: Expected group after '_' at position 33: …eros -o matrix1_̲{sample}TSS.gz --outFileSortedRegions regions1KaTeX parse error: Expected 'EOF', got '#' at position 28: …es.bed -p 20; #̲计算matrix 的时候特别慢…{sample}_TSS.gz -out ${sample}.png;
done
在这个时候,在我的macos 系统上出现了一个小插曲, 使用bamCoverage 的时候报错,原因如下:

可能的原因是没有找到相应的库,于是我重新安装了libssh2. 结果显示可以运行了。

此外在运行computeMatrix 的时候也报错,错误的原因是提供的bed文件有问题,于是,我有重新用gff文件制作了一个bed文件(注意:这个地方的gff文件必须和参考基因组是一直的,必须是针对这个参考基因组的gff3文件,在R中如果要用CHIPSeeker包进行注释的时候,当上面没有注释的数据库时,需要用GFF3文件来自己制作一个注释数据库,这个时候gff3也必须是同mapping时用的的参考基因组的注释文件),首先下载bedops软件,之后采用如下代码运行:

convert2bed --input=gff [–output=bed] <ensembl.mm10.gff3> mm10_ensembl_GFF3_genes.bed
#取上述bed文件的前三行即可
cut -f 1-3 mm10_ensembl_GFF3_genes.bed > mm10_ensenble_ref.bed
至此,所有要画图的文件都准备好了,用plotHeatmap进行画图,代码如下: 在这里我只画了cbx7的,由于计算comuteMatrix 太慢了。

plotHeatmap -m matrix.gz -out plotHeatmap.png --plotTitle “Heatmap”

也可以对多个文件整合在一起画,代码如下:

computeMatrix reference-point -p 28 --referencePoint TSS -b 2500 -a 2500 -S *bw -R mm10_ensembl_GFF3_genes.bed --skipZeros -o tmp4.mat.gz --outFileNameMatrix alBamFile
plotHeatmap -m tmp4.mat.gz -out tmp4.merge.png
plotProfile --dpi 720 -m tmp4.mat.gz -out tmp4.profile.pdf --plotFileFormat pdf --perGroup
plotHeatmap --dpi 720 -m tmp4.mat.gz -out tmp4.merge.pdf --plotFileFormat pdf
效果如下:

上面的图都是针对整个基因组上,所有基因在选定的TSS上下游画的,那可不可以对某一部分感兴趣的基因在所有的样本中进行展示,这是由于在注释的时候,发现不同类型的样本直接有相同的target基因,这些基因在TSS的上下游有什么变化,可以用deeptools展示吗? 在CHIPseeker 包中的是可以的。

用deeptools 展示相同的traget 的一部分基因可以采用以下策略结合CHIPseeker 和deeptools两种工具,首先找共有的基因,这个地方先的用CHIPseeker进行注释,对每个peak文件读取,代码如下:

library(ChIPseeker)
library(org.Mm.eg.db)
library(TxDb.Mmusculus.UCSC.mm10.knownGene)
library(VennDiagram)

cbx7 <- readPeakFile(“cbx7_peaks.narrowPeak.bed”)
ring1B <- readPeakFile(“ring1B_peaks.narrowPeak.bed”)
suz12 <- readPeakFile(“suz12_peaks.narrowPeak.bed”)

cbx7_peakAnno <- annotatePeak(cbx7, tssRegion = c(-2500, 2500), TxDb = TxDb.Mmusculus.UCSC.mm10.knownGene, annoDb=“org.Mm.eg.db”)
ring1B_peakAnno <- annotatePeak(ring1B, tssRegion = c(-2500, 2500), TxDb = TxDb.Mmusculus.UCSC.mm10.knownGene, annoDb=“org.Mm.eg.db”)
suz12_peakAnno <- annotatePeak(suz12, tssRegion = c(-2500, 2500), TxDb = TxDb.Mmusculus.UCSC.mm10.knownGene, annoDb=“org.Mm.eg.db”)

common_gene <- Reduce(intersect, list(cbx7=as.data.frame(cbx7_peakAnno) g e n e I d , r i n g 1 B = a s . d a t a . f r a m e ( r i n g 1 B p e a k A n n o ) geneId, ring1B=as.data.frame(ring1B_peakAnno) geneId,ring1B=as.data.frame(ring1BpeakAnno)geneId,
suz12=as.data.frame(suz12_peakAnno)$geneId))

cbx7_common <- cbx7_df[cbx7_df$geneId %in% common_gene, 1:12][,1:3] ## 这些common gene 在cbx7中的 peak位置,基因只有2955个,但是这些peak位置很多。
head(cbx7_common)
seqnames start end
1 chr1 3062894 3063062
2 chr1 3671191 3671347
3 chr1 3671842 3671960
4 chr1 4491542 4493590
5 chr1 4493643 4493888
6 chr1 4494395 4494544

write.table(cbx7_common,file=“cbx7_commen.bed”,row.names = F,quote = F,col.names = F,sep="\t")
将上面保存的bed文件用于计算矩阵,用deeptools,如下:
computeMatrix reference-point -p 3 --referencePoint TSS -b 2500 -a 2500 -S Cbx7.bw -R cbx7_commen.bed --skipZeros -o
commongene_cbx7.mat.gz --outFileNameMatrix commengenecbx7
plotHeatmap -m commongene_cbx7.mat.gz -out commongene.png

这样就能将cbx7上的commeon gene 做出来heatmap

上边左边是2500多个共有的基因的peak, 右边的是所有基因的peak做的

chipseek 注释peak

library(ChIPseeker)
library(GenomicFeatures)
library(GenomicRanges)
library(rtracklayer)
gffRangdata<-import.gff("~/src/GSE42466/data/chip-se/reference/ensembl.mm10.gff3") #获取本地下载的参考基因组的gff3文件,自己生成txdb
myRanges<-as(gffRangdata,“GRanges”) ##获得GRanges对象
txdb<-makeTxDbFromGRanges(myRanges)
cbx7<-readPeakFile("~/ncbi/public/sra/igv_check/cbx7_peaks.narrowPeak.bed")#这个地方是macs2产生的peak文件,但最好是改名加bed后缀,不然在R中转化为数据框的时候,第一列的抬头有错位,目前还不知道是什么原因。
peak_cbx7<-annotatePeak(cbx7,tssRegion = c(-2500,2500),TxDb = txdb,addFlankGeneInfo = T,flankDistance = 5000)
Long coding RNA 注释

##载入lincRNA注释文件
library(ChIPseeker)
#source(“https://bioconductor.org/biocLite.R”)
#biocLite(“TxDb.Hsapiens.UCSC.hg19.lincRNAsTranscripts”)
library(“TxDb.Hsapiens.UCSC.hg19.lincRNAsTranscripts”)
lincRNA_txdb=TxDb.Hsapiens.UCSC.hg19.lincRNAsTranscripts

##读入bed文件
HSC <- readPeakFile(“hsc478_summits.bed”)
HSC_lincRNA <- annotatePeak(HSC, TxDb=lincRNA_txdb)

visualazition

plotAnnoBar(HSC_lincRNA)

Visualize Genomic Annotation

upsetplot(HSC_lincRNA, vennpie=TRUE)
参考文章

https://www.jianshu.com/p/af3e492a84a9

https://mp.weixin.qq.com/s/_A0rHldzEgVk7bgwt457qQ

https://www.jianshu.com/p/a7b6ce208f98

http://www.bioinfo-scrounger.com/archives/365

https://mp.weixin.qq.com/s/vWTf59KDs1lp_sQXjEhI_g
————————————————
版权声明:本文为CSDN博主「samhuairen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/samhuairen/article/details/88718431

相关文章:

  • Java默认bigdecimal初始值_BigDecimal精度问题 and double基础类型默认小数位置问题
  • rna-seq分析流程 全套
  • java boxed_Java中的DoubleStream boxed()方法
  • FastQC原始安装
  • java getscheme_外部开启Activity新姿势(scheme)
  • 序列比对 hisat2
  • java 多线程 安全 源码_Java多线程理解:线程安全的集合对象
  • dir file list.file list.dirs
  • 后缀是php,怎么修改php后缀
  • inurl faq.php,使用 PHP
  • r语言中六种方法查看R函数源代码—— 鼠标放在函数上,按下F2
  • php mysqli_affected_rows(),Mysqli_num_rows与PHP中mysqli_affected_rows的区别
  • R语言字符串替换:gsub()
  • matlab实现数据压缩,【Matlab】Huffman编码如何实现数据压缩
  • getcurrenttime java,getcurrenttime
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【刷算法】求1+2+3+...+n
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker容器管理
  • Flannel解读
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript实现分页效果
  • js 实现textarea输入字数提示
  • Making An Indicator With Pure CSS
  • mockjs让前端开发独立于后端
  • oldjun 检测网站的经验
  • uva 10370 Above Average
  • vue脚手架vue-cli
  • 关于Flux,Vuex,Redux的思考
  • 简单易用的leetcode开发测试工具(npm)
  • 力扣(LeetCode)56
  • 突破自己的技术思维
  • 微信支付JSAPI,实测!终极方案
  • 用Canvas画一棵二叉树
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Maven错误Error executing Maven
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #在 README.md 中生成项目目录结构
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (七)理解angular中的module和injector,即依赖注入
  • (三)docker:Dockerfile构建容器运行jar包
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • . NET自动找可写目录
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core引入性能分析引导优化
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net Stream篇(六)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值