RNA-seq生物信息转录组分析

RNAseq 完整操作流程

2018-09-04  本文已影响157人  我最有才

2.软件以及流程以及代码: 本实验使用常规的Tophat2 比对

(1)样本制备、建库:总RNA ---> polyA富集mRNA ---> 打断 ---> 随机引物反转录成cDNA ---> 末端修复、加A、加接头

RNA提取:方法-使用trizol-based方法或者试剂盒方法;

富集mRNA,除去rRNA等RNA:依据为-在测mRNA过程中,首先要去除rRNA。以人为例,在抽提的总RNA中,95%的RNA是rRNA,2%的RNA是mRNA,剩下的则是lncRNA、microRNA、siRNA等。rRNA整个人类当中是非常保守的,在各个组织器官中也是非常稳定的,因此这些测序结果对我们的研究是没有用处的。mRNA则是RNA中比较重要的部分。

具体:以人的为例:总RNA跟带有Poly(T)探针的磁珠结合-洗脱结合的mRNA-用Mg离子溶液打碎mRNA-随机引物反转第一条链的cDNA,之后再合成第二条cDNA,获得双链cDNA-对双链cDNA末端修复,加A加接头-片段选择,PCR扩增、纯化(如果样本中存在污染物,则需要结合试剂盒进一步纯化)。

###一般在会测序前对总RNA进行一次质检,根据电泳质检结果中的18S和28S(rRNA)两个峰的高度以及峰的尖度来判断RNA的质量,峰越高越尖(RIN > 8.0)表示RNA的完整度越好。当然,浓度以及A260/A280比值也是需要的。

 1、真核生物种常规的去除rRNA的方法是通过oligo(dT)富集带有polyA尾的mRNA来实现的,2、不含有polyA尾的转录本序列以及存在部分降解的总RNA样本,所以这种方法针对福尔马林(Formalin-Fixed)样本和FFPE(Paraffin-Embedded)石蜡包埋样本是不适用的,否则对获得样本中最全面的转录本信息会产生显著影响,一般采用需结合RiboZero、RiboMinus等是结合来开展去除。针对FFPE样本还有结合双链特异性核酸酶构建文库来降低后续测序数据中的rRNA序列比例的。

建库:去除rRNA之后获得的mRNA进行构建文库,先对mRNA打断再进行反转录的文库构建方法。之后反转的cDNA再末端修复到平末端,加上ployA和接头。

###当然,里面涉及的蛋白相关知识,例如蛋白变性失活、键的破坏、复性和盐析等涉及的蛋白四级结构、各种化学键和相互作用的内容。

(2)测序:SE测序-单端测序;PE测序-双端测序;一般现在用的是PE测序。

##里面有测序的方法、测序原理、不同品牌的区别

 .sra-> .fastq  代码:fastq-dump –gzip –split-3 –o ../fastq/ -A ../xx.sra

(3)质量控制:当然用IGV也可以做一些质控。

Fastqc  自己命名.fastq.gz   -o保存文件夹/

(4)数据与处理:

比对质量过滤、修剪:trimmomatic  PE输入文件.1.fastq.gz 输入文件.2.fastq.gz  paired1.fq.gz unpaired.1.fq.gz  paired2.fq.gz unpaired.2.fq.gz AVGQUAL:20 MINLEN:50  (删去质量小于20,且删除读段小于50的片段)

除去那些测不出来或者说未被识别的序列 标记为N,很多的话配对时需要删除这样的序列:prinseq-lite.pl –fastq read1.fastq

–fastq2 read2.fastq –ns_max_n 2 –out_god nfiltered –out_bad null –no_qual_header

– log –verbose (删除每条序列上含有2个N的序列)

去接头:trimmomatic  PE输入文件.1.fastq.gz 输入文件.2.fastq.gz  paired1.fq.gz unpaired.1.fq.gz  paired2.fq.gz unpaired.2.fq.gzILLUMINACLIP:TruSeq2 –PE .fa:2:30:10:1:true (删除TruSeq2接头,允许有2个不匹配,回文剪接阈值是30,简单剪接阈值10,回文模式检测到的最低接头长度是1,反向读段被保留-默认它被删除)

重复:prinseq-lite.pl–fastq read1.fastq –fastq2 read2.fastq –derep_min 101

–out_god nfiltered –out_bad

null –no_qual_header – log –verbose

(5)比对or 的de novo:

tophat2 –o 保存文件夹/ --transcriptome-index  转录本索引bt2/ -p 8 基因组索引bt2/  输入文件

(6)比对结果注释,量化RSeQc

     1.比对统计项:bam_stat.py –i 比对文件

     2.比对到基因组各个原件上的情况:

        Read_distribution.py –r 基因组的gtf对应的bed文件–I 比对后的文件bam

 3.转录本覆盖度是不是有偏差

     geneBody-coverage.py –r 基因组的gtf对应的bed文件–I 比对后的文件bam

 4.测序深度上表达丰度检测

  RPKM_saturation.py  –r 基因组的gtf对应的bed文件–I 比对后的文件bam

5. 剪接点

Junction_annotation.py–r 基因组的gtf对应的bed文件–I 比对后的文件bam

6.剪接点饱和状态检测

Junction_saturation.py –r 基因组的gtf对应的bed文件–I 比对后的文件bam

量化:

1.   基因水平上-reads落在那些基因上  HTSeq软件

比对结果按照名字排序:samtools sort –n 比对文件 排序后的文件

量化:htseq-count –f bam –stranded=no 排过序的文件bam基因组索引文件gtf > counts.txt 

2.   转录水平量化:cufflinks –G 基因组文件gtf  -b基因组–u –p 8 比对后为排序的文件bam  -o保存文件夹

3.   外显子水平  DEXSeq软件

扁平化

Python2 dexseq_prepare_annotation.py 基因组索引文件gtf  扁平化文件.gtf

量化  python2 dexseq_count.py –p yes–s no –r name扁平化的文件.gtf 按照名字排序后的sam文件 输出文件.txt

(7)组装:

     Cufflinks -P 8 –O保存文件夹/ 比对后的文件bam/

De novo:

         Trinity.pl –seqType fq –JM 10G –left 1.fq–-right 2.fq –CPU 4

(8)差异表达分析:R语言作图     

参照:http://www.360doc.com/content/18/0309/18/33459258_735717104.shtml        http://www.360doc.com/content/17/0911/22/46164085_686360709.shtml   http://www.biotrainee.com/thread-1084-1-1.html

setwd("c:/Users/du/Desktop/R/trails/")

##建立数据框  转录组数据比对量化结果

condition1<-read.table("59counts.txt",sep = "\t",col.names=c("gene_id","condition1"))

condition2<-read.table("61counts.txt",sep = "\t",col.names = c("gene_id","condition2"))

rep1<-read.table("60counts.txt",sep = "\t",col.names = c("gene_id","x1"))

rep2<-read.table("62counts.txt",sep = "\t",col.names = c("gene_id","x2"))

raw_count<-merge(merge(condition1,condition2,by="gene_id"),merge(rep1,rep2,by="gene_id"))

Now if you have some more new interesting idea you will jump it > for example you can use join 1.txt 2.txt >1_2.txt  Then you will get a mature txt and can be used in frame.OK let try it latter.

raw_count_filter<-raw_count[-1:-5,]

ENSEMBL <- gsub('\\.\\d*', '', raw_count_filter$gene_id)

row.names(raw_count_filter) <- ENSEMBL

raw_count_filter <- raw_count_filter[ ,-1]

##设计矩阵

group<-as.data.frame(c(rep("condition",2),rep("x",2)))

rownames(group)<-names(raw_count_filter)

names(group)<-"m"

#标准化矩阵

dds<-DESeqDataSetFromMatrix(countData = raw_count_filter,colData = group,design = ~m)

dds<-DESeq(dds)

summary(results(dds))

res<-results(dds,contrast<-c("m","condition","x"))

ressult<-res[order(res$padj),]

write.table(ressult,file="gene1_RNAseq2.xls",sep = "\t",quote=F,row.names = T,col.names = NA)

###提取差异分析结果

x<-read.table("gene1_RNAseq2.xls",sep = "\t",header = T,row.names = 1)

x

attach(x)

x1<-subset(x,padj<0.05 &(log2FoldChange>=1 | log2FoldChange <=-1))

write.table(x1,"differ_out_gene.xls",sep = "\t",quote=F,row.names = T,col.names = NA)

##GO KEGG GSEA analysis  ***(clusterProfiles package 可以下载现成的包,再导入。)  还需要DOSE  DO.db包

##小鼠的如下:  注释数据在R包中有

library(org.Mm.eg.db)

keytypes(org.Mm.eg.db)

library(clusterProfiler)

library(DOSE)

#GO analysis

#gene_id 转换

gene<-row.names(x1)

transsid<-select(org.Mm.eg.db,keys=gene,columns=c("GENENAME","SYMBOL","ENTREZID"),keytype="ENSEMBL")

#看单个基因的话

single_Ap1m2<-select(org.Mm.eg.db,keys = "Ap1m2",columns = c("ENSEMBL","ENZYME","GENENAME", "SYMBOL","PROSITE","PMID","UNIGENE","UNIPROT","GO"),keytype = "SYMBOL")

##**正式GO分析

ego<-enrichGO(gene = row.names(x1),OrgDb = org.Mm.eg.db,keyType ="ENSEMBL",ont="MF" )

###ego1<-enrichGO(gene = row.names(x1),OrgDb = org.Mm.eg.db,keyType ="ENSEMBL",ont="ALL", qvalueCutoff = 0.01)

summary(ego)

head(summary(ego))

  #gorich 后做几个图:

##网络图

emapplot(ego)

#goplot(ego)

goplot(ego)

#Bar plot

barplot(ego, showCategory=20)

# 气泡图

dotplot(ego,font.size=5,showCategory=30)

#Gene-Concept Network

cnetplot(ego)

#UpSet Plot

upsetplot(ego)

#Heatmap-like functional classification

heatplot(ego)

###GSEA分析

#获取按照log2FC大小来排序的基因列表

genelist <- x1$log2FoldChange

names(genelist) <- rownames(x1)

genelist <- sort(genelist, decreasing = TRUE)

# GSEA分析(具体参数参考:https://mp.weixin.qq.com/s/p-n5jq5Rx2TqDBStS2nzoQ)

gsemf<-gseGO(genelist,OrgDb = org.Mm.eg.db,keyType = "ENSEMBL",ont = "MF")

head(gsemf)

gseaplot(gsemf,geneSetID = "GO:0000977")

###KEGG(pathway)分析

# 转换ID适合KEGG

m=bitr(rownames(x1),fromType = 'ENSEMBL',toType = 'ENTREZID', OrgDb = 'org.Mm.eg.db')

kegg <- m[,2]

# KEGG分析,在KEGG官网中,物种都有对应的缩写,小鼠mmu,其他的缩写看官网:http://www.genome.jp/kegg/catalog/org_list.html

kk <- enrichKEGG(kegg, keyType = 'kegg',organism = 'mmu', pvalueCutoff = 0.05, pAdjustMethod = 'BH', qvalueCutoff = 0.1)

head(summary(kk))

# 气泡图

dotplot(kk, font.size=5)

# 将GO/KEGG结果转换成CSV格式输出

write.table(as.data.frame(kk),"KEGG-enrich.xls",row.names =F)

write.csv(as.data.frame(ego),"GO-enrich.xls",row.names =F)

NOTICE:最近在学习和总结以及做一些自己的课题,因此会时常更新一部分,敬请原谅!

我看了一下:HTSeq软件与cufflinks差异区别在哪里

如下:HTSeq产生的是reads匹配到基因外显子上的序列,得到的是数据库中基因名字(需要在R中转换为俗称可认识的名字,之后获得差异表达基因)图一;cufflinks:如果直接生成的是有FPKM值跟HTSeq类似吧图二;而cufflinks先组装再合并再获得差异基因,之后提取差异基因结果就是免去了R语言中很多的操作图三与图四;如下:

看看R中省去了好多步骤:如下:
上一篇下一篇

猜你喜欢

热点阅读