参考教程:
- Griffith Lab tutorial
- raw data/PF data/Q30 data/clean data的不同
数据:线虫转录组测序PF data(双端测序);
流程:
- cutadapt去接头;
- hisat2建立索引(indexing);
- hisat2+samtools序列比对(alignment);
通过index进行比对可加快比对速度。
- FastQC对当前测序数据的质量进行评估;
- Stringtie对数据进行拼接、定量(expression);
一个基因可能由几段不相邻的序列组成。
- prepDE.py脚本提取基因表达矩阵;
- DESeq2差异分析;
- 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脚本提取基因表达矩阵
- 精简代码处理RNA_seq数据
进入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差异分析
基于负二项式分布,包含标准化(基于负二项式分布)。
参考教程:
- 精简代码处理RNA_seq数据
- 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)
- Metascape
step1:输入差异基因;
上调基因(up):log2FoldChange>0
step2:选择物种;
step3:express analysis(快速分析),custom analysis(自定义分析)。