RNA-Seq:从fastq到表达矩阵

一、测序数据的准备

新建工作目录,RNASeq-analysis

mkdir RNASeq-analysis

cd RNASeq-analysis/

新建data文件夹;

mkdir data

1.1 公司返回的测序下机数据

例如:两个样本,三个生物学重复;

Raw data: Sample1-1_R1.fq.gz; Sample1-1_R2.fq.gz;  Sample1-2_R1.fq.gz; Sample1-2_R2.fq.gz; Sample1-3_R1.fq.gz; Sample1-3_R2.fq.gz; Sample2-1_R1.fq.gz; Sample2-1_R2.fq.gz; Sample2-2_R1.fq.gz; Sample2-2_R2.fq.gz; Sample2-3_R1.fq.gz; Sample2-3_R2.fq.gz; 

1.2 从SRA数据库下载数据

第一步,获取SRA编号Accession: PRJNA******/SRP******;

第二步,下载安装sra-tookit

conda install sra-tools

第三步,下载数据

prefetch SRR******

第四步,对数据进行拆分

使用 SRA-toolkit 软件包里的 fastq-dump 对数据进行拆分,并转换为 fastq 格式。

nohup fastq-dump --split-3 SRR****** 1>SRR******.log 2>SRR******.err &

将测序数据全部置于data文件夹,

mv Sample* data/

二、对数据进行质控和过滤

进行质控和过滤的软件有很多,这里推荐使用国内OpenGene 最新开发的 fastp,速度非常快,且一步完成质控和过滤的流程,相当于之前经常用的fasqc质控+Trimmomatic过滤,可以自动检测adapter 序列,无需手动输入,非常方便。其质控和过滤效果也非常不错,可自行查阅相关资料。

fastp的运行模式分为单端测序和双端测序(当然目前主流都是双端),支持压缩文件(file.fq.gz)及fastq输入:

进入工作目录:

cd ~/RNASeq-analysis/data/

fastp (single -end, SE)

fastp -I SRR******.fastq -O SRR******_clean.fastq

fastp (paired -end, PE)

fastp -i Sample1-1_R1.fq.gz -o Sample1-1_R1.clean.fq.gz -I Sample1-1_R2.fq.gz -O Sample1-1_R2.clean.fq.gz

fastp -i Sample1-1_R1.fq.gz -I Sample1-1_R2.fq.gz -o Sample1-1_R1.clean.fq.gz -O Sample1-1_R2.clean.fq.gz

当然,针对多个样本,我们也可以写个循环批量处理:

for file in `ls *_R1.fq.gz | perl -lpe 's/_R1.fq.gz//'`; do fastp -i ${file}_R1.fq.gz -I ${file}_R2.fq.gz -o ${file}_R1.clean.fq.gz -O ${file}_R2.clean.fq.gz; done

三、参考基因组准备

主要准备两个文件,一个是基因组文件Species.genome.fasta; 一个是基因结构注释文件Species.genome.gff3;

新建references文件夹:

mkdir references

将参考文件置于references文件夹;

mv Species.genome.fasta Species.genome.gff3 ~/RNASeq-analysis/references/

将gff3文件转换为gtf文件:

安装gffread:conda install gffread

# gff to gtf

gffread Species.genome.gff3 -T -o Species.genome.gtf

# gtf to gff

gffread Species.genome.gtf -o- > Species.genome.gff3

gff3与gtf文件格式的区别参考:https://www.jianshu.com/p/a27be34d335d

四、比对到参考基因组

RNASeq reads 由于不包含内含子,所以来自外显子边界处的 reads被重新 mapping 回基因组

时,会被中间的内含子分开,这种情况叫做 splice-alignment。比对的软件有很多,在这里推荐使用Hisat2或STAR。但STAR需要更大的内存,运行时间也更长,但准确性却相差不大。在这里使用Hisat2,使用conda安装Hisat2。

conda install hisat2

第一步,为参考基因组构建索引;

cd ~/RNASeq-analysis/references/

编写shell脚本:

vim hisat2-build.sh

genome=~/RNASeq-analysis/references/Species.genome.fasta

genome_prefix=~/RNASeq-analysis/references/Species

hisat2-build $genome $genome_prefix 1>hisat2-build.log 2>hisat2-build.err

运行hisat2-build.sh

nohup bash hisat2-build.sh &

第二步,使用Hisat2进行比对;

新建hisat2文件夹:

mkdir hisat2

cd ~/RNASeq-analysis/hisat2

编写shell脚本:

vim hisat2-run.sh

genome_prefix=~/RNASeq-analysis/references/Species

# 写一个for循环进行批量运算

#for paired -end, PE

for sample in `ls ~/RNASeq-analysis/data/*_R1.clean.fq.gz | perl -lpe 's/_R1.clean.fq.gz//'`; do hisat2 --new-summary -p 2 -x $genome_prefix -1 ${sample}_R1.clean.fq.gz -2 ${sample}_R2.clean.fq.gz -S ~/RNASeq-analysis/hisat2/${sample}.sam 2> ~/RNASeq-analysis/hisat2/${sample}.err; done

#for single -end, SE

for sample in `ls ~/RNASeq-analysis/data/SRR*.clean.fq.gz | perl -lpe 's/SRR*.clean.fq.gz//'`; do hisat2 --new-summary -p 2 -x $genome_prefix -U $left -S ~/RNASeq-analysis/hisat2/${sample}.sam 2> ~/RNASeq-analysis/hisat2/${sample}.err; done

运行hisat2-run.sh

nohup bash hisat2-run.sh &

第三步,比对结果压缩、排序及构建索引

新建sorted目录

mkdir sorted

进入工作目录

cd ~/RNASeq-analysis/hisat2

编写shell脚本

vim sorted.sh

for file in *.sam; do 

    samtools view -b $file > ~/RNASeq-analysis/sorted/${file%.sam}.bam

    samtools sort ~/RNASeq-analysis/sorted/${file%.sam}.bam > ~/RNASeq-analysis/sorted/${file%.sam}.sorted.bam

    samtools index ~/RNASeq-analysis/sorted/${file%.sam}.sorted.bam

done

运行sorted.sh

nohup bash sorted.sh &

其中bam和sam文件均可使用IGV查看

五、计算表达量

第一步,表达定量和标准化

使用R版本Subreads软件包中featureCounts计算表达量,其中Subread 的输入是 bam 文件和 gtf 文

件,输出文件描述了落在每一个基因上的 reads 数目(read counts)。read counts还需要 TPM 和

TMM标准化,这个标准化的步骤可以使用edgeR包里的fpkm函数。

新建featurecounts文件夹

mkdir featurecounts

cd ~/RNASeq-analysis/featurecounts

编写R脚本

vim featurecounts.R

关于R包安装:

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

    install.packages("BiocManager")

BiocManager::install("limma")

BiocManager::install("Rsubread")

BiocManager::install("edgeR")

install.packages("reshape2")

我们写一个循环运行featurecounts.R得到count文件

for file in ~/RNASeq-analysis/sorted/*.sorted.bam; do Rscript featurecounts.R ~/RNASeq-analysis/sorted/$file ~/RNASeq-analysis/references/Species.genome.gtf 10 $file; done

第二步,将所有count文件合并

perl -lne 'if ($ARGV=~/(.*).count/){print "$1\t$_"}' *.count > merge.count

第一列为样品名;第二列为基因名;第三列为counts数;第四列为fpkm值;第五列为tpm值

第三步,提取counts值及tpm值并生成矩阵

awk -F"\t" '{print $1"\t"$2"\t"$3}' merge.count > gene.count

awk -F"\t" '{print $1"\t"$2"\t"$5}' merge.count > gene.tpm

编写R脚本:matrix_count.R

a=read.csv('gene.count',header=F,sep="\t")

colnames(a)=c('sample','gene','counts')

library(reshape2)

counts=dcast(a,formula=gene~sample)

write.table(counts,file="gene_count.csv",sep="\t",quote=FALSE,row.names=FALSE)

运行R脚本

Rscript matrix_count.R

生成gene_count.csv

第1列为基因名;第2-4列为Sample1三个生物学重复对应的count数;第5-7列为Sample2三个生物学重复对应的count数;

编写R脚本:matrix_tpm.R

a=read.csv('tpm.count',header=F,sep="\t")

colnames(a)=c('sample','gene','tpm')

library(reshape2)

counts=dcast(a,formula=gene~sample)

write.table(counts,file="gene_tpm.csv",sep="\t",quote=FALSE,row.names=FALSE)

运行R脚本

Rscript matrix_tpm.R

生成gene_tpm.csv

第1列为基因名;第2-4列为Sample1三个生物学重复对应的TPM值;第5-7列为Sample2三个生物学重复对应的TPM值;

有参转录组的上游分析今天就写到这里,接下来便是差异表达、后续个性化分析及可视化作图了。


参考文献:

1. Shifu Chen, Yanqing Zhou, Yaru Chen, Jia Gu; fastp: an ultra-fast all-in-one FASTQ preprocessor, Bioinformatics, Volume 34, Issue 17, 1 September 2018, Pages i884–i890, https://doi.org/10.1093/bioinformatics/bty560

2. Kim D, Langmead B, and Salzberg SL HISAT: a fast spliced aligner with low memory requirements, Nature methods, 2015

3. Li H.*, Handsaker B.*, Wysoker A., Fennell T., Ruan J., Homer N., Marth G., Abecasis G., Durbin R. and 1000 Genome Project Data Processing Subgroup (2009) The Sequence alignment/map (SAM) format and SAMtools. Bioinformatics, 25, 2078-9. [PMID: 19505943]

4. Li H A statistical framework for SNP calling, mutation discovery, association mapping and population genetical parameter estimation from sequencing data. Bioinformatics. 2011 Nov 1;27(21):2987-93. Epub 2011 Sep 8. [PMID: 21903627]

5. Liao Y, Smyth GK and Shi W. The R package Rsubread is easier, faster, cheaper and better for alignment and quantification of RNA sequencing reads. Nucleic Acids Research, 47(8):e47, 2019

6. Liao Y, Smyth GK and Shi W. featureCounts: an efficient general-purpose program for assigning sequence reads to genomic features. Bioinformatics, 30(7):923-30, 2014

7. Liao Y, Smyth GK and Shi W. The Subread aligner: fast, accurate and scalable read mapping by seed-and-vote. Nucleic Acids Research, 41(10):e108, 2013

8. Wickham, H. (2007). Reshaping data with the reshape package. 21(12):1–20. http://www.jstatsoft.org/v21/i12

你可能感兴趣的:(RNA-Seq:从fastq到表达矩阵)