当前位置: 首页 > news >正文

单细胞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_CCCTAGGAAGATGGAGGAGAGAAGGCGGTGAAAGAGACCTGTAAAAAGCCACCGN+@@@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)

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

 

相关文章:

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

根据所使用的建库方法&#xff0c;单细胞的RNA序列&#xff08;也称为读取&#xff08;reads&#xff09;或标签&#xff08;tags&#xff09;&#xff09;将从转录本的3端&#xff08;或5端&#xff09;&#xff08;10X Genomics&#xff0c;CEL-seq2&#xff0c;Drop-seq&…...

Docker部署Nacos

此篇文章使用的nacos为2.2.1版本 拉取Nacos镜像 docker pull nacos/nacos-server:v2.2.1先将容器启动起来 docker run -d \ --name nacos \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --privilegedtrue \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e NA…...

1005. K 次取反后最大化的数组和

原题链接&#xff1a;1005. K 次取反后最大化的数组和 思路&#xff1a; 先把数组排序好&#xff0c;然后直接从下标0(最小的负数)开始反转&#xff0c;那么接下来有两种情况&#xff1a; 1.负数反转完了&#xff0c;k还有剩余。此时因为nums内全部都是正数&#xff0c;所以我…...

【云原生】什么是 Kubernetes ?

什么是 Kubernetes &#xff1f; Kubernetes 是一个开源容器编排平台&#xff0c;管理着一系列的 主机 或者 服务器&#xff0c;它们被称作是 节点&#xff08;Node&#xff09;。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…...

自建CA实战之 《0x01 Nginx 配置 https单向认证》

自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;&#xff0c;本篇文章我们将介…...

《QT从基础到进阶·三十八》QWidget实现炫酷log日志打印界面

QWidget实现了log日志的打印功能&#xff0c;不仅可以在界面显示&#xff0c;还可以生成打印日志。先来看下效果&#xff0c;源码放在文章末尾&#xff1a; LogPlugin插件类管理log所有功能&#xff0c;它可以获取Log界面并能打印正常信息&#xff0c;警告信息和错误信息&…...

JVM的小知识总结

加载时jvm做了这三件事&#xff1a; 1&#xff09;通过一个类的全限定名来获取该类的二进制字节流 什么是全限定类名&#xff1f; 就是类名全称&#xff0c;带包路径的用点隔开&#xff0c;例如: java.lang.String。 即全限定名 包名类型 非限定类名也叫短名&#xff0c;就…...

深入理解JVM虚拟机第二十六篇:详解JVM当中的虚方法和非虚方法,并从字节码指令的角度去分析虚方法和非虚方法

😉😉 学习交流群: ✅✅1:这是孙哥suns和树哥给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚​​​​​​​📚 微信:DashuDeveloper拉你进微信群,免费领取! 一:非虚方法和虚方法 方法…...

ElasticSearch的日志配置

ElasticSearch默认情况下使用Log4j2来记录日志&#xff0c;日志配置文件的路径为$ES_HOME/config/log4j2.properties&#xff0c;配置方法见Log4j2的官方文档。 参考path-settings&#xff0c;通过指定path.logs&#xff0c;可以指定日志文件的保存路径。 在日志配置文件$ES_…...

SQL Injection (Blind)`

SQL Injection (Blind) SQL Injection (Blind) SQL盲注&#xff0c;是一种特殊类型的SQL注入攻击&#xff0c;它的特点是无法直接从页面上看到注入语句的执行结果。在这种情况下&#xff0c;需要利用一些方法进行判断或者尝试&#xff0c;这个过程称之为盲注。 盲注的主要形式有…...

NX二次开发UF_CURVE_ask_trim 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_trim Defined in: uf_curve.h int UF_CURVE_ask_trim(tag_t trim_feature, UF_CURVE_trim_p_t trim_info ) overview 概述 Retrieve the current parameters of an a…...

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…...

python:傅里叶分析,傅里叶变换 FFT

使用python进行傅里叶分析&#xff0c;傅里叶变换 FFT 的一些关键概念的引入&#xff1a; 1.1.离散傅里叶变换&#xff08;DFT&#xff09; 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法&#xff0c;傅里叶变换是傅里叶分析的核心&…...

云原生系列Go语言篇-编写测试Part 2

基准测试 确定代码是快或慢非常复杂。我们不用自己计算&#xff0c;应使用Go测试框架内置的基准测试。下面来看​​第15章的GitHub代码库​​sample_code/bench目录下的函数&#xff1a; func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …...

CMake Error:No targets specified and no makefile found

在适用cmake构建项目的时候&#xff0c;突然遇到了这个报错 Make Error at CMakeLists.txt:1 (project): VERSION not allowed unless CMP0048 is set to NEW – Configuring incomplete, errors occurred! make: *** No targets specified and no makefile found. Stop. CMake…...

常见树种(贵州省):019滇白珠、杜茎山、苍山越桔、黄背越桔、贵州毛柃、半齿柃、钝叶柃、细枝柃、细齿叶柃木、土蜜树、山矾、胡颓子、檵木

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、滇白珠…...

java - 定时器

一、什么是定时器 定时器是指可以通过 Java 中的 Timer 类和 TimerTask 类所提供的功能来实现定期执行某些任务的工具。 标准库中提供了一个 Timer 类 . Timer 类的核心方法为 schedule . schedule 包含两个参数 . 第一个参数指定即将要执行的任务代码 , 第二个参数指定多…...

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)

目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…...

攻防非对称问题| 当前企业面临的网络攻防非对称问题及其解决途径

随着信息技术的不断发展&#xff0c;网络已经成为我们日常生活和商业活动中不可或缺的一部分。然而&#xff0c;随之而来的是网络安全问题的不断升级。网络攻防非对称问题是当前亟待解决的一个复杂而严峻的挑战。其主要的表现是攻击成本远低于防御成本以及相同投入带来的攻击能…...

Java多线程二-线程安全

1、线程安全问题 多个线程&#xff0c;同时操作同一个共享资源的时候&#xff0c;可能会出现业务安全问题。 2、实例&#xff1a;取钱的线程安全问题 2.1、场景 小明和小红是夫妻&#xff0c;他们有个共同账户&#xff0c;余额是十万元&#xff0c;如果两人同时取钱并且各自取…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...