这是一个新系列

差不多是一年以前,我定导后没多久,接手了读研后的第一个课题。合作方是医院,和我对接的是一名博一的医学生,最开始两边的老师很排斥常规的单细胞文章思路,即各大类细胞分群、注释、描述,所以起初的几个月都在摸索一条主线,再后来有主线了,要加实验验证,周期有点长。我这边的分析基本做完。读研生活还在继续,我也不能太在意这一个课题,尽管有些时候我也很着急,尽管我在这个课题上花了很多时间。整理分析流程是个好习惯,最大的受益者还是自己,所以接下来我打算把我在处理单细胞转录组过程中,学到的用到的所有技能以这样的形式写出来,估计有二三十篇吧~

我想先从Cell Hashing这样一种改良的单细胞测序技术开始

1. CITE-seq

事实上Cell Hashing是在CITE-seq的基础上改进的,CITE-seq全称cellular indexing of transcriptomes and epitopes by sequencing,是一种同时对细胞内RNA和细胞表面蛋白进行测序的技术。

测序原理如上图,将特定的抗体连上一段序列,序列上包含与抗体信息对应的antibody barcode,像右上方表格一样,还包含一段ploy-A。该抗体复合物和细胞共培养后,细胞表面就会连上一些抗体,某种蛋白分子越多,连上的抗体就会越多。过流式之后,裂解细胞,断开二硫键,此时细胞内的RNA和抗体复合物来源的序列都会连到磁珠上,像右下图那样,这两种类型的序列长度不同,可以分开建库,调整核酸浓度,以确保两者都有合适的测序深度。

所以这样一种技术,除了提供转录组的信息,还提供了部分蛋白的信息。正如作者所说,多模态数据应用得越来越多。

支持cite-seq的R包去年看的时候,我知道有Seurat和CiteFuse,CiteFuse今年发表在Bioinformatics。

2. Cell Hashing

Cell Hashing和CITE-seq的测序原理基本一样,只是换了一个应用场景。它解决的问题是:如何将不同样本的细胞混起来测序(便宜),测完了还能区分哪个细胞来源于哪个样本,这样做也减少了批次效应。

标题里面提到了doublet检测仅针对来源于两个样本的doublet,不是指不同cell type的doublet

背景中提到了另一种解决这类问题的方案就是提供样本的遗传多态性信息(单细胞数据比对后也能得到部分信息,和已知的样本信息比较,就能知道细胞来源于哪个样本了),当然这个信息不那么容易获取。

如图,不同的样本有不同的antibody barcode。

实验过程如上图,在选择抗体时,尽量选择普适的抗体,比如CD45,免疫细胞都表达。是用一种还是多种无所谓(原文用了4种,CD45, CD98, CD44, and CD11a),只要保证antibody barcode与样本对应即可。

原文提供了针对cell hashing数据的拆分方法,这是对应的两个图。B图中的一个点和C图中的一列表示一个液滴(或者理解为一个cellular barcode)。正常情况下,一个液滴里面只有一个细胞,那么对应的样本tag (HTO) 只有一个,也就是只有一个tag有UMI,其他tag的UMI应该为0,不然就是doublet或者空的液滴(negative)。

3. Cell Hashing测序的拆分原理

通常我们在完成测序数据比对后,能得到一个表达矩阵,行为gene列为细胞,而cell hashing的数据,比对后得到的是行为gene+tag,列为细胞。上图给出的tag x cell的一个例子,我们利用的是这个矩阵来判定每个细胞属于哪个样本。

  • 第一步是对UMI矩阵标准化,式子里的i表示第几行,n表示样本(tag)的总数;
  • 第二步是粗分类,最后一类要么是8个UMI都和高,要么都很小;

  • 第三步,假设第9类细胞的tag x cell矩阵每一行都服从负二项分布,根据观测值拟合之后,求0.99分位数,据此来判断某一个值是positive还是negative;
  • 第四步,一列一列看,如果只有一个positive,说明是有效的CB,根据较大的HTO归到对应的样本里去;两个或多个positive则是doublet;没有positive则是空液滴。

预告

  • 下篇写如何从测序数据得到表达矩阵,普通10X以及cell hashing数据都适用
  • 下下篇写cell hashing数据拆分实战,用seurat和citefuse两种方法

因水平有限,有错误的地方,欢迎批评指正!

单细胞分析实录(1): 认识Cell Hashing的更多相关文章

  1. 单细胞分析实录(2): 使用Cell Ranger得到表达矩阵

    Cell Ranger是一个"傻瓜"软件,你只需提供原始的fastq文件,它就会返回feature-barcode表达矩阵.为啥不说是gene-cell,举个例子,cell has ...

  2. 【代码更新】单细胞分析实录(20): 将多个样本的CNV定位到染色体臂,并画热图

    之前写过三篇和CNV相关的帖子,如果你做肿瘤单细胞转录组,大概率看过: 单细胞分析实录(11): inferCNV的基本用法 单细胞分析实录(12): 如何推断肿瘤细胞 单细胞分析实录(13): in ...

  3. 【代码更新】单细胞分析实录(21): 非负矩阵分解(NMF)的R代码实现,只需两步,啥图都有

    1. 起因 之前的代码(单细胞分析实录(17): 非负矩阵分解(NMF)代码演示)没有涉及到python语法,只有4个python命令行,就跟Linux下面的ls grep一样的.然鹅,有几个小伙伴不 ...

  4. 单细胞分析实录(3): Cell Hashing数据拆分

    在之前的文章里,我主要讲了如下两个内容:(1) 认识Cell Hashing:(2): 使用Cell Ranger得到表达矩阵.相信大家已经知道了cell hashing与普通10X转录组的差异,以及 ...

  5. 单细胞分析实录(5): Seurat标准流程

    前面我们已经学习了单细胞转录组分析的:使用Cell Ranger得到表达矩阵和doublet检测,今天我们开始Seurat标准流程的学习.这一部分的内容,网上有很多帖子,基本上都是把Seurat官网P ...

  6. 单细胞分析实录(4): doublet检测

    最近Cell Systems杂志发表了一篇针对现有几种检测单细胞测序doublet的工具的评估文章,系统比较了常见的例如Scrublet.DoubletFinder等工具在检测准确性.计算效率等方面的 ...

  7. 单细胞分析实录(17): 非负矩阵分解(NMF)代码演示

    本次演示使用的数据来自2017年发表于Cell的头颈鳞癌单细胞文章:Single-Cell Transcriptomic Analysis of Primary and Metastatic Tumo ...

  8. 单细胞分析实录(8): 展示marker基因的4种图形(一)

    今天的内容讲讲单细胞文章中经常出现的展示细胞marker的图:tsne/umap图.热图.堆叠小提琴图.气泡图,每个图我都会用两种方法绘制. 使用的数据来自文献:Single-cell transcr ...

  9. 单细胞分析实录(18): 基于CellPhoneDB的细胞通讯分析及可视化 (上篇)

    细胞通讯分析可以给我们一些细胞类群之间相互调控/交流的信息,这种细胞之间的调控主要是通过受配体结合,传递信号来实现的.不同的分化.疾病过程,可能存在特异的细胞通讯关系,因此阐明这些通讯关系至关重要. ...

随机推荐

  1. MySQL(13)---MYSQL主从复制原理

    MYSQL主从复制原理 最近在做项目的时候,因为部署了 MYSQL主从复制 所以在这里记录下整个过程.这里一共会分两篇博客来写: 1.Mysql主从复制原理 2.docker部署Mysql主从复制实战 ...

  2. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  3. Java 安全之Java Agent

    Java 安全之Java Agent 0x00 前言 在前面发现很多技术都会去采用Java Agent该技术去做实现,比分说RASP和内存马(其中一种方式).包括IDEA的这些破解都是基于Java A ...

  4. java并发编程实战《八》管程

    管程:并发编程的万能钥匙 为什么 Java 在 1.5 之前仅仅提供了 synchronized 关键字及 wait().notify().notifyAll() 这三个看似从天而降的方法? Java ...

  5. 网鼎杯2020 AreUSerialz

    0x00 前言 ...有一说一,赵总的BUUCTF上的这道题目并没有复现到精髓.其实感觉出题人的题目本身没有那么简单的,只不过非预期实在是太简单惹. 涉及知识点: 1.php中protected变量反 ...

  6. jenkins+git部署环境,出现Failed to connect to repository : Command "git ls-remote -h http://gitlab.xxxxx.git HEAD" returned status code 128stdout: stderr: fatal: repository 'http://gitlab.xxxxx.git' not fou

    1.部署jenkins+git源码管理的方式,源码管理报128stdout 源码管理出现如下错误: Failed to connect to repository : Command "gi ...

  7. flask注册蓝图报错

    记录下这个我找了两天的坑... take no arguments() 这两天一直学习flask的时候,我把注册的蓝图,写成注册的form表单的 举个栗子 class TetsView(view.Me ...

  8. flask加载配置文件的三种方法

    1.第一种方法也是我们最长用到的,包括我们项目中也是采用第一种的方法,加载配置文件 配置信息全部写在config.py里面,在主app.py的文件中写入 import config app.confi ...

  9. 你必须知道的MySQL知识点

    什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构(掌握) 数据结构可视化 前置知识:树的高度越低查询效率越高 二叉树:不能自平衡,极端情况出现倾斜,查询效率和链表类似 红黑 ...

  10. 赶紧收藏!王者级别的Java多线程技术笔记,我java小菜鸡愿奉你为地表最强!

    Java多线程技术概述 介绍多线程之前要介绍线程,介绍线程则离不开进程. 首先 , 进程 :是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元: 线程:就 ...