bulk转录组实战(一)

写在开头:在这一个合集中,我将详细介绍bulk RNA-seq实际数据分析的流程,有哪些注意的地方以及一些小技巧

首先是获取测序数据:如果是自己的测序数据,直接从公司给的账号中下载各个样本的RawData(fastq格式)即可。
如果想要分析公共数据,在GEO数据库输入文章中给出的登录号,如GSE184771,这些数据通常是经过质控、数据归一化、差异表达分析等处理。提交者通常会详细描述其数据的处理步骤。Series Matrix File可能会提供关于实验设计、数据处理的详细信息;supplementary file可能会提供经过处理的表达矩阵,也就是我们需要下载到R中进行分析的文件。或者进入下面的SRA Run selector,SRA数据库一般储存的是原始的测序文件,下载SRR_Acc_List1.txt,以便在Linux中下载SRA数据,可以使用它们进行完整的上游和下游分析。


GEO184771

Accession list
#SRAToolkit 是NCBI提供的用于处理来自SRA 数据库测序数据的一个工具包。前面的常用Linux命令合集中已经介绍如何下载了
#使用其中的prefetch命令批量下载数据
#运行nohup  &  用于放入后台下载,避免关闭终端导致下载中断
mkdir -p GSE184771/fastq
cd /home/GSE184771/fastq
#读取文件 SRR_Acc_List1.txt 的内容,$()将读取到的内容作为参数传递到prefetch命令中,最后-O .指定下载文件的输出目录为当前目录
nohup prefetch -O . $(<SRR_Acc_List1.txt) &

#下载完 sra 文件,我们往往需要先将 SRA文件转化为 fastq 文件才能用于后续分析。使用前面安装的 SRAToolkit 中的fastq-dump工具
vi RNA-seq.sh
# 读取包含本地 SRA 文件路径的文件SRR_Acc_List2.txt,并逐行处理
#其中fastq-dump参数:--split-files将配对reads(paired-end reads)分别输出到不同的文件中,对于一方有而一方没有的reads直接丢弃。--split-3将配对reads输出到两个文件中,并将unpaired reads输出到第三个文件中。--split-spot将双端测序分为两份,但是都放在同一个文件中。
mkdir /home/GSE184771/1.QC
cd /home/GSE184771/fastq
cat SRR_Acc_List2.txt | while read i
do
    # fastq-dump 命令处理SRA 文件,并将其转换为压缩的 FASTQ 文件,输出到当前目录,fastq-dump 命令处理本地的 SRA 文件,并将其转换为压缩的 FASTQ 文件,输出到当前目录
    fastq-dump --gzip --split-files $i -O /home/GSE184771/1.QC && echo "** ${i} to fastq done **"
done
bash RNA-seq.sh
fastq-dump --split-files ./SRR16060501/SRR16060501.sra -O /home/GSE184771/1.QC #或者一个一个运行不报错

现在均得到了样本的原始测序fastq文件,接下来进行质控。

#如果样本数不多,其实可以一个一个运行
#列出所有(_R1.fq.gz)的路径,并将这些路径保存到文件1中。>符号被用作输出重定向操作符,作用是将命令的输出结果写入到指定的文件中。
ls /home/RNA-seq/fastq/*_R1.fq.gz > 1 
ls /home/RNA-seq/fastq/*_R2.fq.gz > 2
#使用cut命令根据/分隔符提取第5个字段(第一个字段为空,完整文件路径在第5个位置),再次使用cut根据_分隔符提取第1个字段(样本名),并将结果保存到文件0中。
ls /home/RNA-seq/fastq/*_R2.fq.gz |cut -d"/" -f 5|cut -d"_" -f 1  > 0
#paste命令合并文件0、1和2的内容(分别是样本名、_R1.fq.gz和_R2.fq.gz的路径),生成文件config
paste 0 1 2  > config
#类似于SRR16060501 /home/RNA-seq/fastq/SRR16060501_R1.fq.gz /home/RNA-seq/fastq/SRR16060501_R2.fq.gz
vi RNA-seq.sh
for i in $(cat config)
do
    echo $i
    arr=($i)
    fq1=${arr[1]}
    fq2=${arr[2]}
    sample=${arr[0]}
      fastqc fq1 fq2 -o /home/GSE184771/1.QC
done
cd /home/GSE184771/1.QC
#整合质控结果
multiqc ./

得到了质控结果,我以一个样本的R1为例。QC结果包括以下几部分。


QC结果

其中比较重要的包括:per base sequence quality每个碱基的质量。蓝色的线表示每个碱基位置上的平均质量分数(mean quality score),一般还会有黄色的框(箱线图),表示的是每个碱基位置的质量分数分布的中位数和四分位范围(interquartile range, IQR),一般要求蓝线要在绿色区域内,箱线图在黄色区域以上。碱基质量分数与碱基出错的概率关系为Q=−10log10(P),某个位置的碱基质量为30就是它出错的概率为0.1%


per base sequence quality

Per base sequence content在前几个碱基可以不稳定,但在后面一般是AT和CG是两条平行的线。
Per base sequence content

Sequence duplication levels峰一般在最左侧。图中显示有50%左右的reads有大于10个重复。测序数据中存在大量的重复序列,有可是PCR扩增偏好;测序深度不足,可能会导致样本中的某些序列被过度重复(当测序深度不足时,测序过程中的随机抽样误差会更显著。测序仪在读取DNA片段时是随机的,如果测序深度低,每个位置被读取的次数有限,这会导致某些片段被重复读取,而其他片段可能完全没有被读取。);生物学因素,某些生物样本中天然存在高重复率的序列,特别是在低复杂度区域或高表达的基因区域;技术问题如接头污染或样本准备中的错误,也可能导致重复序列的增加。


Sequence duplication levels

Overrepresented sequences显示这条序列大量出现,占全部reads的13%左右,这很可能就是接头,或者PCR偏好性扩增造成的,一般后续需要过滤掉


Overrepresented sequences

Adapter content,如果有接头残留,后续一定要过滤掉


adapter content

接下来就需要针对质控情况进行选择性过滤了,使用Trim-galore对数据进行过滤和质控,它将fastqc与cutadapt封装在一起。

#这个可以针对不同文件质控情况,选择不同的过滤参数进行过滤
mkdir /home/GSE184771/2.trim
cd /home/GSE184771/fastq
#使用--paired 参数时,--adapter 参数会应用于R1,--adapter2 参数会应用于R2,从而去除自定义的序列,比如overrepresented sequences。--illumina 参数会同时处理R1和R2文件中的Illumina接头序列。--quality设置质量分数阈值,低于该阈值的碱基将被修剪。--stringency 4设置修剪的严格度,至少有 4 个匹配adapter的碱基序列才能进行修剪。-j 8使用的线程数为 8。-o 输出目录。--fastqc会对修剪后的文件运行 FastQC 分析
nohup trim_galore --paired --illumina --adapter2 AAGCAGTGGTATCAACGCAGAGTACTTTTTTTTTTTTTTTTTTTTTTTTT --fastqc C1_R1.fq.gz C2_R2.fq.gz --quality 25 --stringency 4 -j 8 --fastqc -o /home/GSE184771/2.trim &
#其他根据情况进行选择性过滤
#生成的_R1_val_1.fq.gz和_R2_val_2.fq.gz: 表示经过修剪并验证配对关系后的R1和R2文件,是用于后续比对和分析的文件

Bowtie2 和 HISAT2 是用于高通量测序数据的序列比对工具。Bowtie2对短读长数据(50-100bp)比对非常高效,支持局部(local)和全局(global)比对模式,可以用于ChIP-seq、DNA-seq以及小 RNA-seq。HISAT2 专门用于处理 RNA-seq 数据;适合长读长数据,优化了比对长读长(例如 100-300bp)的能力,同时也可以高效处理基因组中的剪接事件。所以我们这里使用Hisat2进行比对

#需要准备参考物种的参考基因组和注释文件,有很多网站上的数据可供下载,如UCSC、GENCODE、Ensembl、NCBI、iGenomes等。对于大多数基因组比对和下游分析,primary assembly的 FASTA和注释 文件通常已经足够
#首先构建索引,输入参考基因组序列,构建的索引的基础名称为index_m39.genome。时间长建议后台运行
mkdir /home/GSE184771/reference
mkdir /home/GSE184771/3.align
cd /home/GSE184771/reference
#在构建 HISAT2 索引时,可以使用 --ss 和 --exon 选项来包含剪接位点和外显子信息
#使用hisat2_extract_splice_sites.py 和 hisat2_extract_exons.py 脚本从 GTF 文件中提取剪接位点和外显子信息。
hisat2_extract_splice_sites.py gencode.GRCm39_primary.annotation.gtf > m39.ss
hisat2_extract_exons.py gencode.GRCm39_primary.annotation.gtf > m39.exon
nohup hisat2-build -p 4 --ss m39.ss --exon m39.exon GRCm39.primary_genecode.genome.fa index_m39.genome &
#-x为构建的索引。-1和-2为过滤后的文件,-S为输出路径,--dta启用下游转录组分析,适用于转录组数据。--new-summary生成详细的比对统计信息
nohup hisat2 -x /home/GSE184771/reference/index_m39.genome/index_m39.genome -1 C1_R1_val_1.fq.gz -2 C1_R2_val_2.fq.gz -S /home/GSE184771/3.align/C1_aligned.sam -p 8 --dta --new-summary &
#将比对结果压缩成bam文件并根据染色体排序,以节省存储空间、提高处理效率。排序后的 BAM 文件可以被索引,索引后的 BAM 文件可以快速随机访问特定区域的数据,这对于下游的分析和可视化非常重要,很多下游分析工具要求输入的 BAM 文件是按坐标排序的(如stringtie)
cd /home/GSE184771/3.align
nohup samtools sort -@ 8 C1_aligned.sam -o C1_sorted.bam &
建立BAM索引文件
nohup samtools index ./C1_sorted.bam &
reference fasta

Stringtie定量,gtf文件不能是压缩文件

mkdir /home/GSE184771/4.stringtie
cd /home/GSE184771
#-G指定GTF文件,-e 参数表示只对提供的注释文件中的转录本进行表达量估算,而不进行新的转录本组装。C1_genes.list 文件是一个基因级别的表达量表格,列出了每个基因的基本信息和表达量信息。C1_count.gtf 文件是一个转录本级别的 GTF 文件,包含了转录本和外显子的信息及其表达量。
nohup stringtie ./3.align/C1_sorted.bam -G ./reference/gencode.GRCm39.annotation.gtf -e -p 8 -o ./4.stringtie/C1_count.gtf -A ./stringtie/C1_genes.list &
#由于后续R下游分析使用到的基因表达矩阵都是原始的count矩阵,不能是经过FPKM或TPM归一化,以及其他转换后的数据。所以需要从中得到原始基因表达矩阵
#汇总stringtie表达量结果,例如
vi sample_list.txt
C1  /home/zhangyina/zbw_RNA-seq/stringtie/C1_count.gtf
C2  /home/zhangyina/zbw_RNA-seq/stringtie/C2_count.gtf
C3  /home/zhangyina/zbw_RNA-seq/stringtie/C3_count.gtf
E1  /home/zhangyina/zbw_RNA-seq/stringtie/E1_count.gtf
E2  /home/zhangyina/zbw_RNA-seq/stringtie/E2_count.gtf
E3  /home/zhangyina/zbw_RNA-seq/stringtie/E3_count.gtf
#将如上内容写入sample_lsit.txt,该文件为 \t(Tab) 分隔的两列,第一列为样本名称,第二列为定量的 GTF 文件的路径,注意最后不要有空行
cat sample_lsit.txt
#从https://github.com/gpertea/stringtie,下载prepDE.py3脚本
python prepDE.py3 -i sample_list.txt
#执行完上述步骤后得到的gene_count_matrix.csv即为基因表达矩阵,可以导入到R语言用edgeR / DESeq2包进行差异表达基因分析。基因表达矩阵包含了每个基因在不同样本中的原始计数(即每个基因在每个样本中检测到的读数数量)。行表示基因,列表示样本。
#生成的transcript_count_matrix.csv 文件包含了每个转录本在不同样本中的原始计数(即每个转录本在每个样本中检测到的读数数量)。行表示转录本,列表示样本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容