单细胞seurat入门—— 从原始数据到表达矩阵

根据所使用的建库方法,单细胞的RNA序列(也称为读取(reads)或标签(tags))将从转录本的3'端(或5'端)(10X Genomics,CEL-seq2,Drop-seq,inDrops)或全长转录本(Smart-seq)获得。

图片来源: Papalexi E and Satija R. Single-cell RNA sequencing to explore immune cell heterogeneity, Nature Reviews Immunology 2018 (https://doi.org/10.1038/nri.2017.76)

我们可以根据自己感兴趣的生物学问题而选择不同的方法。这些方法具有以下优点:

  • 3'(或5')端测序
    • 通过独特的分子标记物(molecular identifiers)来更准确地定量鉴别生物复制品和扩增(PCR)复制品
    • 可以给更多的细胞测序,更好地识别细胞类群
    • 每个细胞的平均测序成本更低
    • 最适用于10000个以上的细胞
  • 全长(Full length)测序
    • 可以检测到亚型水平上的表达差异
    • 可以进行等位基因(allele-specific)表达差异的检测
    • 可以给少量细胞进行更深度的测序
    • 最适用于细胞量少的样本

全长测序和3'端测序需要进行许多相同的分析步骤,但3'端流程越来越受欢迎,在分析过程中包含了更多的步骤。因此,我们的教程将详细分析这些3'端流程的数据,重点是基于液滴的方法(inDrops,Drop seq,10X Genomics)。

3’端测序(包括所有基于液滴的方法)

对于单细胞RNA测序的数据分析来说,理解在每次读取中获得的信息,以及我们如何在分析过程中使用这些信息是非常有帮助的。

对于3'端测序的方法,来自同一转录本不同分子的读取只能来自转录本的3'端,因此具有相同序列的可能性很高。然而,在建库过程中的PCR步骤也可能产生读取重复。为了确定一次读取是生物重复还是技术重复,这些方法使用了唯一的分子标识符(UMIs)。

  • 使用不同UMI映射到同一个转录本的读取来自不同的分子,是生物学上的复制-每个读取都应该被计数。
  • 具有相同UMI的读取源于同一分子,是技术上的复制-这些UMI应该合并为一个读取的计数。
  • 在下图中,ACTB的读取应合并计为单个读取,而ARL1的读取应分别计为单个读取。

图片来源: modified from Macosko EZ et al. Highly Parallel Genome-wide Expression Profiling of Individual Cells Using Nanoliter Droplets, Cell 2015 (https://doi.org/10.1016/j.cell.2015.05.002)

所以我们需要追踪UMI,除此之外,我们还需要什么信息来正确量化样本中每个细胞中每个基因的表达呢?无论使用何种基于液滴的方法,在细胞水平上进行正确的定量需要以下条件:

  • 样本索引 (Sample index):确定读取来自于哪个样本。在建库期间添加——需要记录
  • 细胞条形码 (Celluar barcode):确定读取来自于哪个细胞。每个建库方法都有一个供在建库期间使用的细胞条形码库存(stock)
  • 唯一分子标识符 (UMI):确定读取来自哪个转录分子。UMI将被用于合并PCR复制物
  • 测序读取1 (Sequencing read1):1号读取序列
  • 测序读取2 (Sequencing read2):2号读取序列

例如,当使用inDrops v3建库方法时,以下内容显示如何在四次读取中获取所有信息:

图片来源:Sarah Boswell, Director of the Single Cell Sequencing Core at HMS

  • R1 (61bp 读取1):读取的序列(顶部红色箭头)
  • R2 (8bp 索引读取1(i7)):细胞条码 —— 判断读取来自于哪个细胞(顶部紫色箭头)
  • R3 (8bp 索引读取2(i5)):样本/库索引 —— 判断读取来自哪个样本(底部红色箭头)
  • R4 (14bp 读取2):读取2和剩下的细胞条形码和UMI —— 读取来自于哪个转录本(底部紫色箭头)

对于不同的基于液滴的单细胞RNA测序方法,分析流程是相似的,但是对UMI、细胞ID和样本索引的分析将有所不同。例如,下面是10X序列读取的示意图,其中索引、UMI和条码的位置不同:

图片来源: Sarah Boswell, Director of the Single Cell Sequencing Core at HMS

单细胞RNA测序的工作流程

单细胞RNA测序方法将确定如何从序列读取中解析条码和UMI。因此,尽管一些具体步骤略有不同,总体工作流程通常会遵循相同的步骤,而不考虑方法的差异。一般工作流程如下:

图片来源: Luecken, MD and Theis, FJ. Current best practices in single‐cell RNA‐seq analysis: a tutorial, Mol Syst Biol 2019 (doi: https://doi.org/10.15252/msb.20188746)

工作流程的步骤是:

  • 生成计数矩阵 (Generation of the count matrix):格式化读取、分离样本、映射(mapping)和定量(quantification)
  • 原始计数矩阵的质量控制 (Quality control of the raw counts):过滤掉质量差的细胞
  • 过滤后计数的聚类 (Clustering of filtered counts):将转录活动相似的细胞归为一类(细胞类型=不同的聚类)
  • 标记识别 (Marker identification):识别每个细胞群的基因标记(marker)
  • 其他可选的下游步骤 (Optional downstream steps)

不管做什么样的分析,基于每种情况的单一样本而得出关于群体的结论都是不可信的。生物学重复仍然是非常必要的!也就是说,如果你想得出与总体相对应的结论,不应该局限于单一样本。

生成计数矩阵

我们将从讨论该工作流程的第一部分开始,该部分是从原始序列数据生成计数矩阵。我们将重点关注基于液滴的3'端测序,如inDrops、10X Genomics和Drop seq。

测序后,测序设备将原始测序数据输出为BCLFASTQ格式,或生成计数矩阵 (count matrix)。如果读取的是BCL格式,那么我们需要转换为FASTQ格式。有一个名为bcl2fastq的命令行工具可以轻松地完成此转换。

注:在工作流程的这一步,我们不进行分离。您可能已经对6个样本进行了测序,但所有样本的读取可能都出现在同一个BCL或FASTQ文件中。

在许多单细胞RNA测序方法中,从原始数据生成计数矩阵将会经历很多类似的步骤。

umis 和 zUMIs 是用来估算3'端转录本测序数据表达量的命令行工具。两种工具都包含了UMIs的合并以校正扩增偏差(amplification bias)的功能。此过程中的步骤包括:

  1. 格式化读写并过滤低质量的细胞条码
  2. 分离样本
  3. 比对/伪映射到转录组
  4. 合并UMI并量化读写

如果使用10X Genomic建库方法, Cell Ranger 流程将会被用于以上所有的步骤。

1. 格式化读写并过滤低质量的细胞条码

FASTQ文件可被用于解析细胞条码、UMI和样本条码。对于基于液滴的方法,由于以下原因,许多细胞条码将会匹配到数量较少(< 1000)的读取,这是因为:

  • 封装了来自于死/濒死细胞的游离RNA
  • 混入了只表达少量基因的简单细胞(如红细胞等)
  • 其他因素的影响

这些多余的条码需要在读取比对之前从测序数据中过滤掉。要进行此筛选,将提取并保存每个细胞的“细胞条码”和“分子条码”。例如,如果使用了umis工具,每次读取时都会将信息添加到标题行,格式如下:

 @HWI-ST808:130:H0B8YADXX:1:1101:2088:2222:CELL_GGTCCA:UMI_CCCT
 AGGAAGATGGAGGAGAGAAGGCGGTGAAAGAGACCTGTAAAAAGCCACCGN
 +
 @@@DDBD>=AFCF+<CAFHDECII:DGGGHGIGGIIIEHGIIIGIIDHII#

建库方法中使用的细胞条码应该是已知的,且未知的条码将会被丢弃,同时允许存在适量与已知细胞条码不匹配的现象。

2. 分离样本读取

如果测序不止一个样本,这个过程的下一步是对样本进行分离。这个步骤不是由umis工具完成,而是由zUMIs完成的。我们需要对读取的数据进行分析,以确定与每个细胞关联的样本条码。

3. 映射/伪映射至cDNA

为了确定读取源于哪个基因,可使用传统的(STAR)或轻量级方法(Kallisto/RapMap)对读取进行映射 (mapping)。

4. 合并UMI并完成对读取的定量

重复的UMI被合并,这样唯一的UMI可以使用Kallisto或featureCounts这样的工具定量。结果是一个细胞的基因计数矩阵:

图片来源:extracted from Lafzi et al. Tutorial: guidelines for the experimental design of single-cell RNA sequencing studies, Nature Protocols 2018 (https://doi.org/10.1038/s41596-018-0073-y)

矩阵中的每个值表示一个细胞中相应基因的读取数。使用计数矩阵,我们可以探索和过滤数据,只保留较高质量的细胞。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 文件常用操作与流转换

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

SATA信息传输FIS结构总结通过实例代码(快速)掌握(二)

目录 一、简介二、总体介绍2.1 详细FIS传输过程2.2 FIS内容详解 三、FIS实例3.1 构造一个write FIS3.1.1 WRITE FIS内容3.1.2 协议分析仪trace分析3.1.3 write过程总trace 3.2 构造一个read FIS3.2.1 READ FIS内容3.2.2 协议分析仪 read trace3.2.3 read过程总trace 3.3 FIS和C…

Linux系统管理:WinSCP 安装与使用

目录 一、实验 1.下载WinSCP 2.安装WinSCP 3.使用WinSCP 一、实验 1.下载WinSCP &#xff08;1&#xff09;地址 Downloading WinSCP-6.1.2-Setup.exe :: WinSCP 2.安装WinSCP &#xff08;1&#xff09;选择安装程序模式 &#xff08;2&#xff09;点击 &#xff08;3…

C++初识类和对象

前言 上一期我们介绍了一些C入门的基础知识&#xff0c;本期我们来介绍面向对象。初步认识一下面向对象和面向过程、类、以及封装&#xff01; 本期内容介绍 面向过程和面向对象 类的引入 类的定义 类的访问限定符和封装 类的作用域 类的实例化 类对象模型 this指针 一、面向…

name 属性:提高 Vue 应用可维护性的关键

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Linux加强篇006-存储结构与管理硬盘

目录 前言 1. 从“/”开始 2. 物理设备命名规则 3. 文件系统与数据资料 4. 挂载硬件设备 5. 添加硬盘设备 6. 添加交换分区 7. 磁盘容量配额 8. VDO虚拟数据优化 9. 软硬方式链接 前言 悟已往之不谏&#xff0c;知来者之可追。实迷途其未远&#xff0c;觉今是而昨非…

5.7 Windows驱动开发:取进程模块函数地址

在笔者上一篇文章《内核取应用层模块基地址》中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址&#xff0c;由于是入门系列所以并没有封装实现太过于通用的获取函数&#xff0c;本章将继续延申这个话题&#xff0c;并依次实现通用版…

linux内核态内存泄漏检测-kmemleak

参考文章&#xff1a;Linux内核态内存泄漏检测工具--kmemleak工具原理及应用_linux 内存泄漏检测工具-CSDN博客 细说&#xff5c;Linux 内存泄漏检测实现原理与实现_内核_指针_信息 kmemleak原理&#xff1a;看网上说大概原理是在通过kmalloc&#xff0c;vmalloc&#xff0c…

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#xff1a;基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…

[AutoSAR存储] 车载存储层次 和 常用存储芯片概述

公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《AutoSAR存储》 <<<< 返回总目录 <<<< 1 存储系统层次 先抛个问题&#xff0c; 为什么要划分存储器的层次&#xff1f; 速度越快&#xff0c;但成本越高&#xff0c;从经济的角度规…

【Web】[GKCTF 2021]easycms

直接点击登录按钮没有反应 扫目录扫出来/admin.php 访问 弱口令admin 12345直接登录成功 点开设计--主题--自定义 编辑页头&#xff0c;类型选择php源代码 点保存显示权限不够 设计--组件--素材库 先随便上传一个文件&#xff0c;之后改文件名称为../../../../../system/tmp…

OSS+CDN的资费和安全

文章目录 花费OSSCDNOSS CDN 安全OSS防盗链跨域设置CORS数据加密 CDN防盗链URL鉴权Cookie鉴权远程鉴权IP黑白名单UA黑白名单 回源服务自定义私有参数IP黑白名单数据加密 花费 OSS 存储费用 &#xff1a;0.12元/GB/月下行流量费用 &#xff1a;0.5元/GB请求费用 &#xff1a;…

2023金盾杯线上赛-AGRT战队-WP

目录 WEB ApeCoin get_source ezupload easyphp MISC 来都来了 芙宁娜 Honor Crypto 我看看谁还不会RSA hakiehs babyrsa PWN sign-format RE Re1 WEB ApeCoin 扫描发现有源码泄露&#xff0c;访问www.tar.gz得到源码。 在源码中发现了冰蝎马。 Md5解码&am…

持续集成部署-k8s-配置与存储-存储类:动态创建NFS-PV案例

动态创建NFS-PV案例 1. 前置条件2. StorageClass 存储类的概念和使用3. RBAC 配置4. storageClass 配置5. 创建应用&#xff0c;测试 PVC 的自动配置6. 解决 PVC 为 Pending 状态问题7. 单独测试自动创建 PVC 1. 前置条件 这里使用 NFS 存储的方式&#xff0c;来演示动态创建 …

springboot打印启动信息

打印启动信息 转载自:www.javaman.cn 1 spring Bean实例化流程 基本流程&#xff1a; 1、Spring容器在进行初始化时&#xff0c;会将xml或者annotation配置的bean的信息封装成一个BeanDefinition对象&#xff08;每一个bean标签或者bean注解都封装成一个BeanDefinition对象&a…

传输层协议[精选]

网络: 跨主机通信. 互联网通信: 两点之间的通信路径有无数条. 集线器: 把一根网线差出来两根,但是同一时刻只能有一根线跑.交换机: 组建局域网.路由器: 本质就是将两个局域网连接起来 交换机和路由器之间的区别越来越模糊. 调制解调器: 使用电话线上网的时候,需要将电话线的模…

推动卓越创新:了解 4 种研发团队架构如何优化您的组织

揭示敏捷实践中常犯的12大错误&#xff0c;了解如何避免这些敏捷失败 陷阱&#xff0c;找出问题根源并采取有效改进措施&#xff0c;提高项目成功率。立即连线 Runwise.co 社区敏捷专家获得专业建议&#xff0c;或 Runwise.co 在线学习敏捷方法实战课程&#xff0c;提升您和团队…

Node——Node.js基础

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它能够让JavaScript脚本运行在服务端&#xff0c;这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术&#xff0c;它以简单易…

【go入门】表单

4.1 处理表单的输入 先来看一个表单递交的例子&#xff0c;我们有如下的表单内容&#xff0c;命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action"/login" meth…

11-25碎片小知识

一.strlen补充 strlen函数返回值是size_t&#xff0c;即无符号整型&#xff0c; size_t有头文件&#xff0c;是stdio.h 由于strlen函数返回值是无符号整型&#xff0c;所以下面代码要注意 -3会被转换成无符号的 实现my_strlen 法一&#xff1a;指针减指针 #define _CRT_S…