转录组测序数据分析

本文参考文献https://www.nature.com/articles/nprot.2016.095#materials进行bulk RNA-seq数据分析

首先进行原始数据的下载,当然因为文章中已经有了链接进行数据的下载,因此直接使用wget命令就能完成所需数据的下载,但是也要学会基本的测序数据、参考基因组、注释文件、index索引文件的下载,当然也可以自己建立index文件。

raw data下载(找了2个小鼠的测序结果):

fastq-dump --split-3 --gzip SRR3589959

fastq-dump --split-3 --gzip SRR3589960

加上--split-3之后, 会把原来双端拆分成两个文件,但是原来单端并不会保存成两个文件. 还有你用--gzip就能输出gz格式, 能够节省空间的同时也不会给后续比对软件造成压力,比对软件都支持,就是时间要多一点。

标准基因组的数据下载:

wgetftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/635/GCF_000001635.26_GRCm38.p6/GCF_000001635.26_GRCm38.p6_genomic.fna.gz

注释文件的下载:

Wgetftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/635/GCF_000001635.26_GRCm38.p6/GCF_000001635.26_GRCm38.p6_genomic.gff.gz

Index的下载,自己的电脑没法建立index有现成的index可以去https://ccb.jhu.edu/software/hisat2/index.shtml下载:

关于HISAT2官网上的index:https://www.biostars.org/p/290721/

genome: HFM index for reference

genome_snp: HGFM index for reference plus SNPs

genome_tran: HGFM index for reference plus transcripts

genome_snp_tran: HGFM index for reference plus SNPs and transcripts

当然也可以自己建立索引文件:

Hisat2-build reference genome

Index文件不会用不就狗带了吗,注意index文件的格式,其实就是只有电脑能看你不能看的二进制,所以千万不要尝试打开,否则会是一堆乱码,感觉自己弄错了emmm,打开index文件是一些.ht2格式的文件,参考基因组有几条染色体就有几个这样的文件,但是运行HISAT2的时候千万不要在文件名后面加上后缀!要不然会报错的~

分析步骤:

[if !supportLists]1、[endif]首先是对测序数据质量的检测——fastqc

fastqc-o ~/rnaseq/data/firstqc -t 6 ERR188044_chrX_1.fastq.gz && fastqc -o~/rnaseq/data/firstqc -t 6 ERR188044_chrX_2.fastq.gz

2、去除接头和低质量reads

trim_galore-output_dir ~/rnaseq/data/firstqc/clean --paired --length 58 --quality 25ERR188044_chrX_1.fastq.gz ERR188044_chrX_2.fastq.gz

[if !supportLists]2、[endif]进行第二次质检:

fastqc-o ~/rnaseq/data/secondqc -t 6 ERR188044_chrX_1_val_1.fq.gzERR188044_chrX_2_val_2.fq.gz

结果和原来差不多,因此便用了原来的reads进行比对。

[if !supportLists]3、[endif]将reads比对到参考基因组

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188044_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188044_chrX_2.fastq.gz -S ERR188044_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188104_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188104_chrX_2.fastq.gz -S ERR188104_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188234_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188234_chrX_2.fastq.gz -S ERR188234_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188245_chrX_1.fastq.gz -2 ~/rnaseq/chrX_data/samples/ERR188245_chrX_2.fastq.gz-S ERR188245_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188257_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188257_chrX_2.fastq.gz -S ERR188257_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188273_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188273_chrX_2.fastq.gz -S ERR188273_chrX.sam

hisat2 -p 6 --dta -t -x ~/rnaseq/chrX_data/indexes/chrX_tran-1 ~/rnaseq/chrX_data/samples/ERR188337_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188337_chrX_2.fastq.gz -S ERR188337_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188383_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188383_chrX_2.fastq.gz -S ERR188383_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188401_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188401_chrX_2.fastq.gz -S ERR188401_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1~/rnaseq/chrX_data/samples/ERR188428_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188428_chrX_2.fastq.gz -S ERR188428_chrX.sam

hisat2 -p 6 --dta -t -x ~/rnaseq/chrX_data/indexes/chrX_tran-1 ~/rnaseq/chrX_data/samples/ERR188454_chrX_1.fastq.gz -2~/rnaseq/chrX_data/samples/ERR188454_chrX_2.fastq.gz -S ERR188454_chrX.sam

hisat2 -p 6 --dta -t -x~/rnaseq/chrX_data/indexes/chrX_tran -1 ~/rnaseq/chrX_data/samples/ERR204916_chrX_1.fastq.gz-2 ~/rnaseq/chrX_data/samples/ERR204916_chrX_2.fastq.gz -S ERR204916_chrX.sam

以上参数都可以通过hisat2 –help查到。

4、将sam文件转换成bam文件并进行排序,至于为什么要进行排序是因为打开其中一个sam文件就可以看到人家已经指明数据是unsorted的了。

samtoolssort -@ 8 -o ~/bam/ERR188044_chrX.bam ERR188044_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188104_chrX.bam ERR188104_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188234_chrX.bam ERR188234_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188245_chrX.bam ERR188245_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188257_chrX.bam ERR188257_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188273_chrX.bam ERR188273_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188337_chrX.bam ERR188337_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188383_chrX.bam ERR188383_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188401_chrX.bam ERR188401_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188428_chrX.bam ERR188428_chrX.sam && samtoolssort -@ 8 -o ~/bam/ERR188454_chrX.bam ERR188454_chrX.sam

[if !supportLists]4、[endif]进行转录本的组装。

1092  stringtie -p 8 -G chrX.gtf -oERR188044_chrX.gtf -l ERR188044 ERR188044_chrX.bam

 1093  ls

 1094 stringtie -p 8 -G chrX.gtf -o ERR188104_chrX.gtf -l ERR188104ERR188104_chrX.bam

 1095  ls

 1096 stringtie -p 8 -G chrX.gtf -o ERR188234_chrX.gtf -l ERR188234ERR188234_chrX.bam

 1097  ls

 1098 stringtie -p 8 -G chrX.gtf -o ERR188245_chrX.gtf -l ERR188245ERR188245_chrX.bam

 1099 stringtie -p 8 -G chrX.gtf -o ERR188257_chrX.gtf -l ERR188257ERR188257_chrX.bam

 1100  ls

 1101 stringtie -p 8 -G chrX.gtf -o ERR188273_chrX.gtf -l ERR188273ERR188273_chrX.bam

 1102 stringtie -p 8 -G chrX.gtf -o ERR188337_chrX.gtf -l ERR188337ERR188337_chrX.bam

 1103  ls

 1104 stringtie -p 8 -G chrX.gtf -oERR188383_chrX.gtf -l ERR188383 ERR188383_chrX.bam

 1105 stringtie -p 8 -G chrX.gtf -o ERR188401_chrX.gtf -l ERR188401ERR188401_chrX.bam

 1106 stringtie -p 8 -G chrX.gtf -o ERR188428_chrX.gtf -l ERR188428ERR188428_chrX.bam

 1107 stringtie -p 8 -G chrX.gtf -o ERR188454_chrX.gtf -l ERR188454ERR188454_chrX.bam

[if !supportLists]5、[endif]将组装后的转录本merge一下:

stringtie --merge -p8 -G chrX.gtf -o stringtie_merged.gtf ~/rnaseq/chrX_data/mergelist.txt

其中mergelist.txt就是上一步得到的文件名字组成的纯文本格式的文件,当然也可以将上述文件名直接打上去,以空格隔开。下图为mergelist.txt文件打开的样子:


[if !supportLists]6、[endif]将merge后的注释文件与标准基因组的注释文件进行对比(这一步可以不做):

gffcompare -rchrX.gtf -G -o merged stringtie_merged.gtf

[if !supportLists]7、[endif]再以merge后的注释文件作为参考进行转录本的组装并输出为ballgown可以识别的格式(因为在一个实验中,我们往往有很多样本,而不同样本的转录本往往是不同的,而我们需要让他们在近似相同的情况下进行组装,因此再用merge后的注释文件作为参考进行组装):

1117  stringtie–e –B -p 8 -G stringtie_merged.gtf -o ~/ballgown/ERR188044/ERR188044_chrX.gtfERR188044_chrX.bam

 1118  stringtie -e –B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188044/ERR188044_chrX.gtf ERR188044_chrX.bam

 1119  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188044/ERR188044_chrX.gtf ERR188044_chrX.bam

 1120  ls

 1121  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188104/ERR188104_chrX.gtf ERR188104_chrX.bam

 1122  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188234/ERR188234_chrX.gtf ERR188234_chrX.bam

 1123  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188245/ERR188245_chrX.gtf ERR188245_chrX.bam

 1124  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188257/ERR188257_chrX.gtf ERR188257_chrX.bam

 1125  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188273/ERR188273_chrX.gtf ERR188273_chrX.bam

 1126  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188337/ERR188337_chrX.gtf ERR188337_chrX.bam

 1127  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188383/ERR188383_chrX.gtf ERR188383_chrX.bam

 1128  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188401/ERR188401_chrX.gtf ERR188401_chrX.bam

 1129  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188428/ERR188428_chrX.gtf ERR188428_chrX.bam

 1130  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR188454/ERR188454_chrX.gtf ERR188454_chrX.bam

 1131  stringtie -e -B -p 8 -G stringtie_merged.gtf-o ~/ballgown/ERR204916/ERR204916_chrX.gtf ERR204916_chrX.bam

[if !supportLists]8、[endif]用ballgown包进行可视化。

通过bioconductor网站安装需要的R包:

Ballgown、dplyr、DelayedMatrixStats

在R中运行如下程序:

library(ballgown)

setwd("D:/data")#设定工作目录

pheno_data

= read.csv("geuvadis_phenodata.csv")#读取一个储存了样本ID和变量的文件,这个文件需要自己建立,打开之后如下图:

 

pheno_data

bg_chrX

= ballgown(dataDir = "ballgown", samplePattern = "ERR",

pData=pheno_data)#将上述数据读取到ballgown函数中

bg_chrX

bg_chrX_filt= subset(bg_chrX,"rowVars(texpr(bg_chrX)) >1",genomesubset=TRUE)# texpr函数是ballgown包中的一个计算转录本表达水平的函数,其默认输出值为FPKM,这一步是将转录本的表达水平高于1的筛选出来。

if(!requireNamespace("BiocManager", quietly = TRUE))

install.packages("BiocManager")

BiocManager::install("DelayedMatrixStats")

library(DelayedMatrixStats)#安装R包

results_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")#这里的stattest函数是为了保持实验变量唯一,因为我们的样本中含有两个变量:性别和种群,而我们在此处只是想要探究一下性别对于基因表达的影响,因此需要矫正一下种群对基因和转录本水平变化的影响。

results_transcripts

= data.frame(geneNames=ballgown::geneNames(bg_chrX_filt), geneIDs=ballgown::geneIDs(bg_chrX_filt),

results_transcripts)#将基因的名字和ID加到输出数据的表格中,为了下面输出为csv格式的文件做准备。

library(dplyr)

results_transcripts= arrange(results_transcripts,pval)

results_genes

= arrange(results_genes,pval)#将输出结果按照p-value进行排序

write.csv(results_transcripts,"chrX_transcript_results.csv", row.names=FALSE)

write.csv(results_genes,

"chrX_gene_results.csv", row.names=FALSE)#结果输出,其中row.names=FALSE是为了去除第一列函数自带的编号,这些编号没有什么实际意义。

subset(results_transcripts,results_transcripts$qval<0.05)

write.csv(subset(results_transcripts,results_transcripts$qval<0.05),"diff_transcripts.csv", row.name=TRUE)

write.csv(subset(results_genes,results_genes$qval<0.05),

"diff_genes.csv", row.name=TRUE)#将qvalue<0.05的转录本筛选出来并且输出为csv格式。The q-value is an adjusted p-value,

taking in to account the false discovery rate (FDR)R中有一个函数可以单独完成这个转换,stattest函数的输出结果中直接进行了这一转换。

[if !supportLists]9、[endif]将上述数据做成更加形象的图片

tropical=c('darkorange', 'dodgerblue', 'hotpink', 'limegreen', 'yellow')

palette(tropical)#定义颜色

fpkm= texpr(bg_chrX,meas="FPKM")

fpkm

= log2(fpkm+1)#将fpkm转化成对数形式主要是为了能够在一张图片中进行展示。

boxplot(fpkm,col=as.numeric(pheno_data$sex),las=2,ylab='log2(FPKM+1)')#col参数是为了设置颜色,las是为了设置数据间隔,ylab是为了设置轴标签。

运行后得到下图:

关于 表示基因表达水平和FPKM的计算公式:

 

 

 

你可能感兴趣的:(转录组测序数据分析)