RNA-seq 保姆教程:差异表达分析(一)

news2024/12/26 20:44:55

介绍

RNA-seq 目前是测量细胞反应的最突出的方法之一。RNA-seq 不仅能够分析样本之间基因表达的差异,还可以发现新的亚型并分析 SNP 变异。本教程[1]将涵盖处理和分析差异基因表达数据的基本工作流程,旨在提供设置环境和运行比对工具的通用方法。请注意,它并不适用于所有类型的分析,比对工具也不适用于所有分析。此外,本教程的重点是给出一般的分析流程。对于更大规模的研究,强烈建议使用集群来增加内存和计算能力。由于完整版过长,因此分为两部分,需要获取完整版的,请跳转文末

项目配置

安装conda

Miniconda 是一个全面且易于使用的 Python 包管理器。 Miniconda 旨在将您当前的 Python 安装替换为具有更多功能且模块化的 Python ,因此您可以删除它而不会损坏您的系统。它不仅允许您安装 Python 包,还可以创建虚拟环境并访问大型生物信息学数据库。

# 下载 macOS
wget https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -O ~/miniconda.sh

# 下载 LINUX 
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh

# 安装
bash miniconda.sh -b -f -p ~/miniconda

# 添加环境变量
echo 'PATH="$HOME/miniconda/bin:$PATH' >> ~/.bash_profile

# 更新环境变量
source ~/.bash_profile

# 为 conda 添加下载源
conda config --add channels conda-forge
conda config --add channels defaults
conda config --add channels r
conda config --add channels bioconda

项目结构

项目结构组织适当是可重复研究的关键。在处理和分析期间,会创建许多文件。为了最好地组织并提高分析的可重复性,最好使用简单的文件结构。直观的结构允许其他研究人员和合作者按照步骤进行操作。本教程中的结构只是组织数据的一种方式,您可以选择您最习惯的方式。

  • clone(无法使用 git的读者,请后台回复 " rna " )
# Clone
git clone https://github.com/twbattaglia/RNAseq-workflow new_workflow

# 进入目录
cd new_workflow  # 完整结构如下图
new_workflow
new_workflow

基因组下载

要查找差异表达基因或异构体转录本,您首先需要一个参考基因组进行比较。对于任何比对,我们需要 .fasta 格式的基因组,还需要 .GTF/.GFF 格式的注释文件,它将基因组中的坐标与带注释的基因标识符相关联。这两个文件都是执行比对和生成计数矩阵所必需的。请注意,不同数据库(Ensembl、UCSC、RefSeq、Gencode)具有相同物种基因组的不同版本,并且注释文件不能混合。在本流程中,将使用 Gencode 的基因组。

  • 小鼠 (Gencode)
# 基因组文件下载
wget -P genome/ ftp://ftp.sanger.ac.uk/pub/gencode/Gencode_mouse/release_M12/GRCm38.p5.genome.fa.gz

# 注释文件下载
wget -P annotation/ ftp://ftp.sanger.ac.uk/pub/gencode/Gencode_mouse/release_M12/gencode.vM12.annotation.gtf.gz

# 解压
gunzip genome/GRCm38.p4.genome.fa.gz
gunzip annotation/gencode.vM12.annotation.gtf.gz
  • 人 (Gencode)
# 基因组文件下载
wget -p genome/ ftp://ftp.sanger.ac.uk/pub/gencode/Gencode_human/release_25/GRCh38.p7.genome.fa.gz

# 注释文件下载
wget -P annotation/ ftp://ftp.sanger.ac.uk/pub/gencode/Gencode_human/release_25/gencode.v25.annotation.gtf.gz

# 解压
gunzip genome/GRCh38.p7.genome.fa.gz
gunzip annotation/gencode.v25.annotation.gtf.gz

流程

Workflow
Workflow

示例数据:如果您想使用示例数据来练习,请运行以下命令下载老鼠的 RNAseq 数据。

wget -P input/ ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR137/001/SRR1374921/SRR1374921.fastq.gz
wget -P input/ ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR137/002/SRR1374922/SRR1374922.fastq.gz
wget -P input/ ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR137/003/SRR1374923/SRR1374923.fastq.gz
wget -P input/ ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR137/004/SRR1374924/SRR1374924.fastq.gz

1. 质控

  • 使用 FastQC [2] 分析序列质量

FastQC 旨在提供一种简单的方法来对来自高通量测序管道的原始序列数据进行一些质量检查。它提供了一组模块化的分析,您可以使用它来快速了解您的数据是否存在任何问题。”

处理任何样本之前的第一步是分析数据的质量。fastq 文件中包含质量信息,指的是每个碱基检出的准确度(% 置信度)。FastQC 查看样品序列的不同方面:接头污染、序列重复水平等)

1.1. 安装

  • 同时创建新的环境
conda create -n rna-seq -c bioconda fastqc -y

1.2. 运行

fastqc -o results/1_initial_qc/ --noextract input/sample.fastq

1.3. 结果

── results/1_initial_qc/
    └──  sample_fastqc.html   <-  质控结果的 HTML 文件
    └──  sample_fastqc.zip    <-  FastQC 报告数据

2. 过滤

  • 使用 Trim_Galore [3] 删除低质量序列!

分析数据质量后,下一步是删除不符合质量标准的序列/核苷酸。有大量的质量控制包,但 trim_galore 结合了 Cutadapt[4]FastQC 以删除低质量序列,同时执行质量分析以查看过滤效果。

要选择的 2 个最重要的参数:最小 Phred 分数 (1-30) 和最小测序长度。关于这个参数有不同的看法,您可以查看下面的论文以获取有关使用哪些参数的更多信息。通常是: 20 的 Phred 分数(99% 的置信度)和至少 50-70% 的序列长度

  • https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-016-0956-2
  • https://genomebiology.biomedcentral.com/articles/10.1186/s13059-016-0881-8
  • http://www.epigenesys.eu/images/stories/protocols/pdf/20150303161357_p67.pdf

2.1. 安装

conda install -c bioconda trim-galore --yes

2.2. 运行

trim_galore --quality 20 --fastqc --length 25 \
--output_dir results/2_trimmed_output/ \
input/sample.fastq

2.3. 结果

── results/2_trimmed_output/
     └──  sample_trimmed.fq                 <-  过滤后的测序文件 (.fastq)
     └──  sample_trimmed.html               <- FastQC 质量分析的 HTML 文件
     └──  sample_trimmed.zip                <- FastQC 报告数据
     └──  sample.fastq.trimming_report.txt  <-   Cutadapt 修剪报告

3. 去除rRNA

  • 使用 [SortMeRNA](http://bioinfo.lifl.fr/RNA/sortmerna/ http://bioinformatics.oxfordjournals.org/content/28/24/3211 "SortMeRNA") 去除 rRNA 序列

一旦我们去除了低质量序列和任何接头污染,我们就可以继续执行一个额外的(和可选的)步骤,从样本中去除 rRNA 序列。如果您的样品在文库制备之前未使用 rRNA 去除方案制备,建议运行此步骤以删除任何可能占用大部分比对序列的 rRNA 序列污染

3.1. 安装

conda install -c bioconda sortmerna --yes

3.2. 创建索引

在我们运行 sortmerna 命令之前,必须首先下载并处理真核、古细菌和细菌 rRNA 数据库。sortmerna_db/ 文件夹将是我们保存运行 SortMeRNA 所需文件的位置。这些数据库只需要创建一次,因此任何未来的 RNAseq 流程中都可以使用这些文件。

# 将 sortmerna 包 下载到 sortmerna_db 文件夹中
wget -P sortmerna_db https://github.com/biocore/sortmerna/archive/2.1b.zip

# 解压文件
unzip sortmerna_db/2.1b.zip -d sortmerna_db

# 将数据库移动到正确的文件夹中
mv sortmerna_db/sortmerna-2.1b/rRNA_databases/ sortmerna_db/

# 删除无用的文件夹
rm sortmerna_db/2.1b.zip
rm -r sortmerna_db/sortmerna-2.1b

# 将所有数据库的位置保存到一个文件夹中
sortmernaREF=sortmerna_db/rRNA_databases/silva-arc-16s-id95.fasta,sortmerna_db/index/silva-arc-16s-id95:\
sortmerna_db/rRNA_databases/silva-arc-23s-id98.fasta,sortmerna_db/index/silva-arc-23s-id98:\
sortmerna_db/rRNA_databases/silva-bac-16s-id90.fasta,sortmerna_db/index/silva-bac-16s-id95:\
sortmerna_db/rRNA_databases/silva-bac-23s-id98.fasta,sortmerna_db/index/silva-bac-23s-id98:\
sortmerna_db/rRNA_databases/silva-euk-18s-id95.fasta,sortmerna_db/index/silva-euk-18s-id95:\
sortmerna_db/rRNA_databases/silva-euk-28s-id98.fasta,sortmerna_db/index/silva-euk-28s-id98

# 创建索引
indexdb_rna --ref $sortmernaREF

3.3. 运行

# 保存 rRNA 数据库的变量
# 将所有数据库的位置保存到一个文件夹中
sortmernaREF=sortmerna_db/rRNA_databases/silva-arc-16s-id95.fasta,sortmerna_db/index/silva-arc-16s-id95:\
sortmerna_db/rRNA_databases/silva-arc-23s-id98.fasta,sortmerna_db/index/silva-arc-23s-id98:\
sortmerna_db/rRNA_databases/silva-bac-16s-id90.fasta,sortmerna_db/index/silva-bac-16s-id95:\
sortmerna_db/rRNA_databases/silva-bac-23s-id98.fasta,sortmerna_db/index/silva-bac-23s-id98:\
sortmerna_db/rRNA_databases/silva-euk-18s-id95.fasta,sortmerna_db/index/silva-euk-18s-id95:\
sortmerna_db/rRNA_databases/silva-euk-28s-id98.fasta,sortmerna_db/index/silva-euk-28s-id98

# 运行 SortMeRNA 
sortmerna \
--ref $sortmernaREF \
--reads results/2_trimmed_output/sample_trimmed.fq \
--aligned results/3_rRNA/aligned/sample_aligned.fq \
--other results/3_rRNA/filtered/sample_filtered.fq \
--fastx \
--log \
-a 4 \
-v

# 将日志移动到正确的文件夹中
mv -v results/3_rRNA/aligned//sample_aligned.log results/3_rRNA/logs

3.4. 结果

── results/3_rRNA/
    └── aligned/sample_aligned.fq     <-  rRNA 污染的序列
    └── filtered/sample_filtered.fq   <-  无任何 rRNA 污染的序列
    └── logs/sample_aligned.log       <-  SortMeRNA 分析的日志

4. 比对

  • 使用 STAR-aligner [5] 进行基因组比对

STAR aligner 是一种非常快速有效的拼接比对工具,用于将 RNAseq 数据与基因组进行比对。 STAR aligner 具有发现非规范剪接和嵌合(融合)转录本的能力,但对于我们的用例,我们将使用全长 RNA 序列与基因组进行比对。该工具的输出是一个 .BAM 文件,它表示每个序列已对齐的坐标。 .BAM 文件与 .SAM 文件相同,但它是二进制格式,因此您无法查看内容,这极大地减小了文件的大小。

4.1. 安装

conda install -c bioconda star --yes

4.2. 创建索引

SortMeRNA 步骤类似,我们必须首先生成要比对的基因组索引,以便工具可以有效地映射数百万个序列。 star_index 文件夹将是我们运行 STAR 所需文件的位置,并且由于程序的性质,它最多可以占用 30GB 的空间。此步骤只需运行一次,即可用于任何后续的 RNAseq 比对分析。

STAR \
--runMode genomeGenerate \
--genomeDir star_index \
--genomeFastaFiles genome/* \
--sjdbGTFfile annotation/* \
--runThreadN 4

4.3. 运行

# 运行 STAR
STAR \
--genomeDir star_index \
--readFilesIn filtered/sample_filtered.fq  \
--runThreadN 4 \
--outSAMtype BAM SortedByCoordinate \
--quantMode GeneCounts

# 将 BAM 文件移动到正确的文件夹中
mv -v results/4_aligned_sequences/sampleAligned.sortedByCoord.out.bam results/4_aligned_sequences/aligned_bam/

# 将日志移动到正确的文件夹中
mv -v results/4_aligned_sequences/${BN}Log.final.out results/4_aligned_sequences/aligned_logs/
mv -v results/4_aligned_sequences/sample*Log.out results/4_aligned_sequences/aligned_logs/

4.4. 结果

── results/4_aligned_sequences/
    └── aligned_bam/sampleAligned.sortedByCoord.out.bam   <- 排序的 BAM 比对文件
    └── aligned_logs/sampleLog.final.out                  <- STAR 比对率日志
    └── aligned_logs/sampleLog.out                        <- STAR 比对过程中的步骤日志

5. 定量

  • featureCounts [6] 总结基因计数

现在有了 .BAM 比对文件,可以继续尝试将这些坐标总结为基因丰度。为此,必须使用 featureCounts 或任何其他读数汇总工具汇总读数,并按具有原始序列丰度的样本生成基因表。然后该表将用于执行统计分析并找到差异表达的基因。

5.1. 安装

conda install -c bioconda subread --yes

5.2. 运行

# 将目录更改为比对的 .BAM 文件夹
cd results/4_aligned_sequences/aligned_bam

# 将文件列表存储为变量
dirlist=$(ls -t ./*.bam | tr '\n' ' ')
echo $dirlist

# 运行 featureCounts 
featureCounts \
-a ../../annotation/* \
-o ../../results/5_final_counts/final_counts.txt \
-g 'gene_name' \
-T 4 \
$dirlist

# 将目录更改回主文件夹
cd ../../../

5.3. 结果

── results/5_final_counts/
    └── final_counts.txt                <- 所有样本的最终基因计数
    └── final_counts.txt.summary        <- 基因计数总结

6. 质控报告

  • 使用 multiQC [7] 生成指控分析报告

在质量过滤、rRNA 去除、STAR 比对和基因定量期间,创建了多个日志文件,其中包含衡量各个步骤质量的指标。我们可以使用汇总工具 MultiQC 来搜索所有相关文件并生成丰富的图表来显示来自不同步骤日志文件的数据,而不是遍历许多不同的日志文件。在确定序列与基因组的比对情况以及确定每个步骤丢失了多少序列时,此步骤非常有用。

6.1. 安装

conda install -c bioconda multiqc --yes

6.2. 运行

# 运行 multiqc 并将结果输出到最终文件夹
multiqc results \
--outdir results/6_multiQC

6.3. 结果

── results/6_multiQC/
    └── multiqc_report.html     <- 代表每一步的日志结果
    └── multiqc_data/           <- multiqc 从各种日志文件中找到的数据文件夹

欢迎Star -> 学习目录

国内链接 -> 学习目录


参考资料

[1]

Source: https://github.com/twbattaglia/RNAseq-workflow

[2]

FastQC: http://www.bioinformatics.babraham.ac.uk/projects/fastqc/

[3]

Trim_Galore: http://www.bioinformatics.babraham.ac.uk/projects/trim_galore/

[4]

Cutadapt: http://cutadapt.readthedocs.io/en/stable/guide.html

[5]

STAR-aligner: https://www.ncbi.nlm.nih.gov/pubmed/23104886

[6]

featureCounts: https://www.ncbi.nlm.nih.gov/pubmed/24227677

[7]

multiQC: http://multiqc.info/

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

L2搭载率连续两个月站上30%大关,车企加速产业链整合

进入新的行业发展周期&#xff0c;车企的智能化挑战越来越大&#xff0c;也催生新一轮整合热潮。对于全球数百家中小型智能汽车技术公司来说&#xff0c;「上岸」时机已经到来。 本周&#xff0c;全球第四大汽车制造商Stellantis宣布&#xff0c;收购总部位于匈牙利的人工智能…

在 Solidity 中 ++i 为什么比 i++ 更省 Gas?

前言 作为一个初学者&#xff0c;“在 Solidity 中 i 为什么比 i 更省 Gas&#xff1f;” 这个问题始终在每个寂静的深夜困扰着我。也曾在网上搜索过相关问题&#xff0c;但没有得到根本性的解答。最终决定扒拉一下它们的字节码&#xff0c;从较为底层的层面看一下它们的差别究…

多进程编程

系列文章目录 多进程编程 VS 多线程编程_crazy_xieyi的博客-CSDN博客 文章目录 前言一、进程创建二、进程等待前言 Java对操作系统提供的多进程编程接口这些操作进行了限制&#xff0c;最终给用户只提供了两个操作&#xff1a;进程创建和进程等待。 一、进程创建 创建出一个…

Android 基础知识3-1项目目录结构

上一章我们创建了Hello Word项目&#xff0c;代码是由ADT插件自动生成的&#xff0c;我们没有对其进行编码&#xff0c;所以没有对其框架进行分析。其实每一个平台都有自己的结构框架&#xff0c;所以我们对Android项目的结构也进行分析。 与一般的Java项目一样&#xff0c;src…

Qt 学习(二) —— Qt工程基本文件详解

目录1. pro文件内容解释2. main文件内容解释3. widget.cpp/widget.h文件内容解释4. ui_widget.h文件内容解释5. widget.ui文件内容解释以Widget窗口部件项目为例&#xff0c;新建的工程目录有如下几个文件&#xff1a; QtCreator软件将他们做了如下分组&#xff0c;包含三个文件…

idea快捷搜索键

目录 1、shift shift 双击 2、Ctrl F在当前类中&#xff0c;页中进行查找相关方法等 3、CtrlShiftN按【文件名】搜索文件 4、CtrlH 查看类的继承关系 5、Alt F7 查看类在哪儿被使用 idea全局搜索的快捷键 1、shift shift 双击 可以搜索任何东西。类、资源、配置项…

运行写在字符串中的Python代码 exec(‘‘‘print(1)‘‘‘)

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 运行写在字符串中的Python代码 exec(print(1)) [太阳]选择题 请问对以下Python代码说法错误的是&#xff1f; print("【执行】exec(print(1))") exec(print(1)) myFuncsumab prin…

CTF秀web2

CTF秀web21.分析题目2.解题2.1信息收集3.2获取数据库3.3获取数据库表3.3获取表信息3.uinon注入语句3.1 判断注入3.2 信息收集3.3注入语句1.分析题目 如上图所示&#xff0c;可以看到是sql注入的题目&#xff0c;进入题目看看&#xff0c;题目页面如下&#xff1a; 如上图所示&a…

fastjson反序列化漏洞

1.fastjson反序列化漏洞原理 我们知道fastjson在进⾏反序列化时会调⽤⽬标对象的构造&#xff0c;setter&#xff0c;getter等⽅法&#xff0c;如果这些⽅法内部 进⾏了⼀些危险的操作时&#xff0c;那么fastjson在进⾏反序列化时就有可能会触发漏洞。 我们通过⼀个简单的案例…

kubernetes 资源管理

kubernetes 资源管理 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务&#xff0c;所谓的部署服务&#xff0c;其实就是在…

纳睿雷达冲刺上市:产能利用率不足仍要扩产,毛利率持续下滑

上海证券交易所信息显示&#xff0c;广东纳睿雷达科技股份有限公司&#xff08;下称“纳睿雷达”&#xff09;的IPO进程已有8个月未有变化&#xff0c;上一次更新信息还是2022年3月10日。而证监会网站则显示&#xff0c;已向纳睿雷达发出了注册阶段三次问询问题&#xff0c;最新…

创建线程的几种方式

创建线程的几种方式 文章目录创建线程的几种方式一、继承 Thread 类二、实现 Runnable 接口三、实现 Callable 接口&#xff0c;并结合 Future 实现四、通过线程池创建线程五、前三种创建线程方式对比继承Thread实现Runnable接口实现Callable接口参考链接一、继承 Thread 类 通…

11.20二叉树基础题型

一.二叉树的存储 1.存储结构 存储结构:顺序存储或者是类似于链表的链式存储 二叉树的链式存储是通过一个一个的节点引用起来的&#xff0c;常见的表示方式有二叉和三叉表示方式 // 孩子表示法 class Node {int val; // 数据域Node left; // 左孩子的引用&#xff0c;常常代…

【SpringBoot项目】一文掌握文件上传和下载【业务开发day04】

文章目录前言文件上传下载文件上传介绍文件下载介绍文件上传代码实现文件下载代码实现新增菜品需求分析数据模型代码开发功能测试&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315;! &#x1f30e;文章说明&#xff1a;SpringBoot项目-瑞吉外卖【day04】业务开发…

【SRE】MySQL8的安装方式

MySQL8的安装方式Windows下载配置配置my.ini新建data文件夹初始化将数据库加入服务修改root密码Linux下载配置配置my.ini新建data文件夹初始化将数据库加入服务修改root密码Windows 下载 https://downloads.mysql.com/archives/community/ 选择MySQL8最新版本 选择上面这个 …

node和npm的安装配置使用(借鉴数篇文章避坑)

1.Error: EINVAL: invalid argument, mkdir C:\Users\lm\‪D:\nodejs\node_global 怎么解决&#xff1f; 2.环境配置中D:\Develop\nodejs\node_global\node_modules路径的疑惑&#xff1f; 之前看了很多网上的教程&#xff0c;感觉都是在互相抄&#xff0c;没有自己的东西&am…

m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 传统CDMA技术在码间串扰和多址干扰等方面存在的问题使其总体性能受到限制&#xff0c;随着OFDM技术的发展&#xff0c;出现了OFDM结合CDMA的信技术&#xff0c;即多载波CDMA技术&#xf…

服务器linux下springboot项目启动、停止、重启脚本+配置jdk+配置maven+批量启动jar包脚本

部署springboot项目配置启动、停止、重启脚本 一.在Linux环境下部署springboot项目 1、把springboot项目打成jar包&#xff0c;使用maven插件实现 1.1、引入maven插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId>…

【自用】Linux-CentOS7安装配置jdk1.8

一、准备工作 步骤1.创建目录 /usr/java 并进入该目录 # 进入/usr/目录 cd /usr/# 创建java目录 mkdir java# 进入java目录 cd java步骤2.下载 jdk-8u351-linux-x64.rpm 链接&#xff1a;https://pan.baidu.com/s/1IWDf70ddcy-u_mDofBklCQ?pwdxrfy 提取码&#xff1a;xrfy …

14.PyQt5应用程序主窗口QmainWindow详解

PyQt5 应用程序主窗口 对于日常见到的应用程序而言&#xff0c;许多都是基于主窗口的&#xff0c;主窗口包含了菜单栏、工具栏、状态栏和中心区域等。 QT/PyQt中提供了以QmainWindow类为核心的主窗口框架&#xff0c;它包含了众多相关的类&#xff0c;它们的继承关系如下图所…