运行一个RNA-Seq流程
此流程根据《使用HISAT StringTie和Ballgown进行的转录本表达水平分析》重复文中的RNA-Seq实验
流程设计
本流程分为如下步骤:
- 生物信息服务器的搭建
- 生信环境的配置
- 在生信环境上操作RNA-seq实验
- 统计数据及结果分析
生信服务器的搭建
生物信息学分析所使用的数据量极大,往往需要数百G以上的存储空间及大量内存,这样的需求在一般PC上较难实现。而且生信分析往往需要众人分工协作,由此搭建一个公用服务器十分重要。
本次重复的实验使用的数据较小,在个人PC上完全可以操作,需要的硬盘存储空间约20G以内,由于条件的限制,作者本次实验在个人Linux系统上进行操作。
生物信息学实验使用服务器是必不可少的,在今后的操作中,读者需熟练掌握Linux操作系统及shell命令编程的使用,熟练使用云Linux服务器进行操作。国内云计算提供商有腾讯云,阿里云,华为云等,新用户均有数月的云服务器体验,读者可根据自己的实际情况自行选择。
生信环境的配置
系统环境
根据此流程需要进行的操作,本次实验需要在Linux系统上配置的环境如下:
- R语言环境
- R包:alyssafrazee/RSkittleBrewer, ballgown, genefilter, dplyr, devtools
- 分析软件:Hisat2, StringTie, Samtools, gffcompare
安装hisat2和StringTie:
1 | sudo apt update |
安装Conda并使用其安装Samtools, gffcompare:
1 | wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh |
安装 R 和 R包Ballgown:
1 | conda create -n Rspcae |
安装其他R包:
1 | R |
资源
此处所需资源为文章中提供的测序数据及参考序列等资料:
1 | cd /home/username/RNA |
在生信环境上操作RNA-seq实验
hisat2:将reads与genome匹配
1 | for i in *1.fastq.gz; |
samtools:将sam文件转换为bam文件
1 | for i in *.sam; |
stringtie:组装转录本并定量表达基因
1 | for i in *.bam; |
stringtie:合并所有转录本
1 | stringtie --merge -p 8 -G /home/username/RNA/chrX_data/genes/chrX.gtf -o stringtie_merged.gtf /home/username/RNA/chrX_data/mergelist.txt |
gffcompare:检测相对于注释文件,转录本的组装情况
1 | gffcompare -r /home/username/RNA/chrX_data/genes/chrX.gtf -G -o merged stringtie_merged.gtf |
stringtie:重新组装转录本并估算基因表达丰度,并为ballgown创建读入文件
1 | for i in *_chrX.bam; |
统计数据及结果分析
此步骤将在R环境中进行统计步骤及结果分析
数据处理
进入R并加载R包
1
2
3
4
5library(ballgown)
library(RSkittleBrewer)
library(genefilter)
library(dplyr)
library(devtools)加载表型数据
1
2
3setwd("/home/username/RNA/chrX_data/")
#设置R工作环境目录
pheno_data = read.csv("geuvadis_phenodata.csv")读入StringTie的计算结果
1
bg_chrX = ballgown(dataDir = "/home/username/RNA/chrX_data/result/ballgown", samplePattern = "ERR", pData=pheno_data)
滤去低丰度基因(样本间差异少于一个转录本)
1
bg_chrX_filt = subset(bg_chrX,"rowVars(texpr(bg_chrX)) >1",genomesubset=TRUE)
得到组间有差异的转录本和基因
1
2
3results_transcripts = stattest(bg_chrX_filt, feature="transcript" covariate="sex",adjustvars = c("population"), getFC=TRUE, meas="FPKM")
results_genes = stattest(bg_chrX_filt, feature="gene", covariate="sex", adjustvars = c("population"), getFC=TRUE, meas="FPKM")对转录本结果添加基因名
1
results_transcripts = data.frame(geneNames=ballgown::geneNames(bg_chrX_filt), geneIDs=ballgown::geneIDs(bg_chrX_filt), results_transcripts)
转录本与基因结果按P值排序
1
2results_transcripts=arrange(results_transcripts,pval)
results_genes=arrange(results_genes,pval)将排序结果写入文件
1
2
3
4
5write.csv(results_transcripts, "chrX_transcript_results.csv",row。names=FALSE)
write.csv(results_genes, "chrX_gene_results.csv",row.names=FALSE)
#此步骤生成 chrX_transcript_results.csv, chrX_gene_results.csv
#两个文字表格文件识别q值小于0.05的转录物和基因(性别间表达有差异)
1
2subset(results_transcripts,results_transcripts$qval<0.05)
subset(results_genes,results_genes$qval<0.05)
结果可视化
FPKM为参考值,性别为区分条件作图
1
2
3
4
5
6
7
8palette(rainbow(5))
#为调色板指定颜色
fpkm = texpr(bg_chrX,meas="FPKM")
fpkm = log2(fpkm+1)
#提取FPKM值并做log转换
boxplot(fpkm,col=as.numeric(pheno_data$sex),las=2,ylab='log2(FPKM+1)')单个样本在转录组上的分布
1
2
3
4
5
6
7
8
9
10
11
12ballgown::transcriptNames(bg_chrX)[12]
ballgown::geneNames(bg_chrX)[12]
# 绘制箱线图
plot(fpkm[12,] ~ pheno_data$sex, border=c(1,2),
main=paste(ballgown::geneNames(bg_chrX)[12],' : ',
ballgown::transcriptNames(bg_chrX)[12]),pch=19, xlab="Sex",
ylab='log2(FPKM+1)')
points(fpkm[12,] ~ jitter(as.numeric(pheno_data$sex)),
col=as.numeric(pheno_data$sex))查看某一基因位置上所有转录组
1
2plotTranscripts(ballgown::geneIDs(bg_chrX)[2263], bg_chrX, main=c('Gene XIST in sample ERR188234'), sample=c('ERR188234'))
#根据ERR188234.gtf的文件,查出XIST基因所在位置编码2263,进行绘图以性别为区分查看特定基因表达情况
1
plotMeans('MSTRG.56', bg_chrX_filt,groupvar="sex",legend=FALSE)
由于作者精力有限,编写时难免会出现错误和过失,对您的阅读和操作造成的不便请您谅解。如果方便,还请把错误处邮件至本人邮箱,或于公众号处留言,十分感谢!