RNA-Seq数据分析:cutadapt+hisat2+samtools+stringtie+deseq2

参考教程:

数据:线虫转录组测序PF data(双端测序);

流程:

  1. cutadapt去接头;
  2. hisat2建立索引(indexing);
  3. hisat2+samtools序列比对(alignment);

通过index进行比对可加快比对速度。

  1. FastQC对当前测序数据的质量进行评估;
  2. Stringtie对数据进行拼接、定量(expression);

一个基因可能由几段不相邻的序列组成。

  1. prepDE.py脚本提取基因表达矩阵;
  2. DESeq2差异分析;
  3. Metascape路径分析差异基因富集(Pathway and Process Enrichment Analysis)。

cutadapt去接头(adapter trimming)

已知接头序列read1_adapt、read2_adapt,需要将read1_adapt 的反向互补序列read1_adapt_REV(在线转换

cutadapt -a read2_adapt -A read1_adapt_REV -m 20 --pair-filter=both -o out_fq1 -p out_fq2 fq1 fq2
#-m:表示去除接头后如果read长度小于这个m值就不要了

hisat2建立索引(indexing)

  • hisat2官网
    官网提供了一些物种的index文件,如人类、小鼠
  • 基因注释:Caenorhabditis_elegans.gtf
  • 参考基因组:Caenorhabditis_elegans.WBcel235.dna.toplevel.fa
#加入-ss, -exon,需要消耗上百G的内存,不加也可,具体区别不太清楚
hisat2_extract_splice_sites.py Caenorhabditis_elegans.gtf > Caenorhabditis_elegans.ss
hisat2_extract_exons.py Caenorhabditis_elegans.gtf > Caenorhabditis_elegans.exon
hisat2-build -p 20 Caenorhabditis_elegans.WBcel235.dna.toplevel.fa --ss Caenorhabditis_elegans.ss --exon Caenorhabditis_elegans.exon Caenorhabditis_elegans

#-p 线程数
#最后一项为输出的index文件名

hisat2+samtools序列比对(alignment)

hisat2 -x Caenorhabditis_elegans(index_name) -p 20 -1 N1_R1.fastq.gz -2 N1_R2.fastq.gz -S N1.sam

输出:

26484487 reads; of these:
  26484487 (100.00%) were paired; of these:
    2355777 (8.89%) aligned concordantly 0 times
    23433490 (88.48%) aligned concordantly exactly 1 time
    695220 (2.63%) aligned concordantly >1 times
    ----
    2355777 pairs aligned concordantly 0 times; of these:
      605991 (25.72%) aligned discordantly 1 time
    ----
    1749786 pairs aligned 0 times concordantly or discordantly; of these:
      3499572 mates make up the pairs; of these:
        2745181 (78.44%) aligned 0 times
        713028 (20.37%) aligned exactly 1 time
        41363 (1.18%) aligned >1 times
94.82% overall alignment rate

输出sam文件,将其转为bam文件(sam的二进制格式),并对bam文件进行排序。

samtools sort -@ 8 -o *.bam *.sam

FastQC

对测序数据(去接头)的质量进行评估。

fastqc N1.bam N2.bam N3.bam T1.bam T2.bam T3.bam

Stringtie对数据进行拼接、定量(expression)

stringtie -p 8 -G /……/Caenorhabditis_elegans.gtf -e -B -o N1/transcripts.gtf -A N1/gene_abundances.tsv /……/N1.bam

设置参数-B,输出的结果为ballgown所需要的格式,需要python脚本prepDE.py,才能得到基因表达矩阵。

使用prepDE.py脚本提取基因表达矩阵

进入ballgown文件夹(由stringtie生成,包含所有样本),将prepDE.py脚本拷贝至当前文件夹,

cp /……/prepDE.py ./

使用python命令直接运行脚本,注意需要使用python2

python prepDE.py

运行结果中"gene_count_matrix.csv"是基因表达矩阵(DESeq2的输入文件)。

删除gene_count_matrix.csv中全是0的行(R语言):

gene_count <- read.csv("gene_count_matrix.csv",stringsAsFactors = F,header = T)
rownames(gene_count) <- gene_count[,1]
gene_count <-gene_count[,-1]
gene_count<-gene_count[which(rowSums(gene_count) > 0),]

DESeq2差异分析

基于负二项式分布,包含标准化(基于负二项式分布)。

参考教程:

# 设置工作目录
setwd("C:/Users/DELL/Desktop/gene_count/")
# 读入基因表达值,设定行名为gene_id
gene_count <- read.csv("gene_count_matrix.csv",stringsAsFactors = F)
# 对gene_id一列进行拆分,去除重复名称
library(stringr)
# 设置空的"gene_count_1"向量,行数与上面的测序结果一致
gene_count_1<-rep(NA,nrow(gene_count))
# 利用for循环,对gene_count数据框中的重复列进行拆分提取
#将gene_id中|两侧拆分、提取
for (i in 1:nrow(gene_count)){
  gene_count_1[i] <- unlist(str_split(gene_count[i,1], pattern = "\\|"))[1]
}
# 对原数据框中的特定序列重新赋值
gene_count$gene_id <- gene_count_1
# 将第一列作为文件的行名
rownames(gene_count) <- gene_count[,1]
gene_count <-gene_count[,-1]
#保存文件至对应目录
write.csv(gene_count, file = "……/gene_count/gene_count.csv", row.names = TRUE)

#加载DESeq2包
library(DESeq2)
#DESeq2需要三种矩阵,分别为countData表达矩阵,colData样品信息矩阵及design差异表达矩阵
#countData为表达矩阵即gene_count
#colData为样品信息矩阵即coldata
#design为差异表达矩阵即批次和条件(对照、处理)等
#设置condition样品组别、重复数
condition<- factor(c(rep("N", 3), rep("T", 3)), levels = c("N","T"))
condition
#设置样品信息矩阵colData
colData <- data.frame(row.names = colnames(gene_count), condition)
colData

#在R里面用于构建公式对象,~左边为因变量,右边为自变量。
#标准流程:dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design= ~ batch + condition) 
#countData为表达矩阵即countdata
#colData为样品信息矩阵即coldata
#design为差异表达矩阵即批次和条件(对照、处理)等
#对dds进行标准流程构建
dds <- DESeqDataSetFromMatrix(gene_count, colData, design = ~condition)
#过滤低丰度数据
dds <- dds[rowSums(counts(dds)) > 1, ]
#或者在构建dds之前加上gene_count <- gene_count[apply(gene_count, 1, sum) > 1 , ] 
#对原始dds进行normalize
dds <- DESeq(dds)
#显示dds信息
dds

# 对差异分析结果进行保存 -------------------------------------------------------------

#使用DESeq2包中的results()函数,提取差异分析的结果
#Usage:results(object, contrast, name, .....)
#将提取的差异分析结果定义为变量"res" 
#contrast: 定义谁和谁比较,处理组在前,对照组在后
#提取分析结果并保存为res
res = results(dds, contrast=c("condition","T","N"))
#对结果res利用order()函数按pvalue值进行排序
#order()函数先对数值排序,然后返回排序后各数值的索引,常用用法:V[order(V)]或者df[order(df$variable),]
#对res进行排序
res = res[order(res$pvalue),]
#显示res结果前6行信息
head(res)
#对res矩阵进行总结,利用summary命令统计显示一共多少个genes上调和下调
summary(res)
#将差异分析的所有结果进行输出保存
write.csv(res, file="……/all_different_genes.csv")

#利用table函数统计显著差异基因的数目
table(res$padj<0.05&abs(res$log2FoldChange>1))
#对具有显著性差异的结果进行过滤、提取
#获取padj小于0.05,表达倍数取以2为对数后的绝对值大于1
#使用subset()函数过滤需要的结果至新的变量significant_different_genes_group中
#Usage:subset(x, ...),其中x为objects,...为筛选参数或条件
#对group中数据进行过滤、提取
significant_different_genes <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1)
#使用dim函数查看该结果的维度、规模
dim(significant_different_genes)
#显示结果的前6行信息
head(significant_different_genes)
#对显著差异基因进行输出保存
write.csv(significant_different_genes, file = "……/significant_different_genes.csv")

Metascape路径分析差异基因富集(Pathway and Process Enrichment Analysis)

上调基因(up):log2FoldChange>0

step2:选择物种;
step3:express analysis(快速分析),custom analysis(自定义分析)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容