Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞混样品测序后数据拆分(Cell Hashing技术)

单细胞混样品测序后数据拆分(Cell Hashing技术)

作者头像
生信技能树
发布于 2022-03-03 06:30:05
发布于 2022-03-03 06:30:05
3.9K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

最近有学徒提到她在复现文献:《utative regulators for the continuum of erythroid differentiation revealed by single-cell transcriptome of human BM and UCB cells.》的单细胞数据分析的时候.

她发现作者明明是提到了6个样品,但是其数据集是:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE150774,可以看到是5个数据 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GSM4558614 CD235a+ cells - umbilical cord blood 2 and umbilical cord blood 3,UCB3
GSM4558615 CD235a+ cells - umbilical cord blood 1
GSM4558616 CD235a+ cells - Bone Marrow 2
GSM4558617 CD235a+ cells - Bone Marrow 3
GSM4558618 CD235a+ cells - Bone Marrow 4

仔细看了看文章里面的描述,确实是 10x Genomics platform 这个技术,是 3 adult bone marrow and 3 umbilical cord blood samples ,合起来是6个样品,而且提前做了细胞分选,仅仅是关注 CD235a+ cells

学徒以为是作者数据整理上传失败,其实是cell hashing技术,大家可以先去了解 CITE-seq技术 ,它可以同时拿到普通基因的表达量矩阵,以及几十个蛋白质(通过antibody-derived tags (ADT))的表达量矩阵,该技术的全称为cellular indexing of transcriptomes and epitopes by sequencing。而Cell Hashing是在CITE-seq的基础上改进,是给需要混合的样品提前加上HTO (A distinct Hashtag oligonucleotide) 标签,这样即使混合后也可以提供不同的HTO标签进行区分。

可以看到文件UCB2UCB3确实是混合在同一个单细胞样品里面了 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GSM4558614_UCB2UCB3_filtered_gene_bc_matrices.tar.gz 95.9 Mb
GSM4558615_UCB1_filtered_gene_bc_matrices.tar.gz 4.4 Mb
GSM4558616_BM2_filtered_gene_bc_matrices.tar.gz 7.4 Mb
GSM4558617_BM3_filtered_gene_bc_matrices.tar.gz 6.3 Mb
GSM4558618_BM4_filtered_gene_bc_matrices.tar.gz 8.3 Mb

下面就让我们来看看如何把这个95.9 Mb的矩阵拆分成为两个样品

首先导入数据并查看数据分布

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list=ls())
options(stringsAsFactors = F) 
library(Seurat)
library(ggplot2)
# 需要自己去 GSE150774 数据集主页下载 GSE150774_RAW 哦 
# 把这个 GSM4558614_UCB2UCB3_filtered_gene_bc_matrices.tar.gz 95.9 Mb 解压即可:
HP <- Read10X("GSE150774_RAW/HP0_filtered_gene_bc_matrices/")
HP[[1]] # RNA:Gene Expression
HP[[2]] # HTO:Antibody Capture

它这个文件夹里面,有 表达量矩阵,也有 HTO (A distinct Hashtag oligonucleotide) 标签,这样即使混合后也可以提供不同的HTO标签进行区分。

表达量矩阵和HTO标签需要取交集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#先读hto数据 
yhto <- as.data.frame(HP$`Antibody Capture`)
rownames(yhto)
# 可以看到是两个样品
table(colSums(yhto)== 0)
pbmc.htos <- yhto[colSums(yhto)>0]
dim(pbmc.htos)

# 然后看表达量矩阵 
pbmc.umis <- HP$`Gene Expression`

#  取交集
joint.bcs <- intersect(colnames(pbmc.umis), colnames(pbmc.htos))
length(joint.bcs)

# 前面的抗体信息和表达量信息,都需要过滤
# Subset RNA and HTO counts by joint cell barcodes
pbmc.umis <- pbmc.umis[, joint.bcs]
pbmc.htos <- as.matrix(pbmc.htos[, joint.bcs])

如果你的表达量矩阵跟HTO标签矩阵确实是同一个实验产出的,两者交集应该是非常好。

创建Seurat并将HTO置入对象中

取交集后,就可以进行seurat标准流程啦

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Setup Seurat object
pbmc.hashtag <- CreateSeuratObject(counts = pbmc.umis)

# Normalize RNA data with log normalization
pbmc.hashtag <- NormalizeData(pbmc.hashtag)
# Find and scale variable features
pbmc.hashtag <- FindVariableFeatures(pbmc.hashtag, selection.method = "mean.var.plot")
pbmc.hashtag <- ScaleData(pbmc.hashtag, features = VariableFeatures(pbmc.hashtag))
pbmc.hashtag

# Add HTO data as a new assay independent from RNA
pbmc.hashtag[["HTO"]] <- CreateAssayObject(counts = pbmc.htos)
names(pbmc.hashtag)
# Normalize HTO data, here we use centered log-ratio (CLR) transformation
pbmc.hashtag <- NormalizeData(pbmc.hashtag, 
                              assay = "HTO", 
                              normalization.method = "CLR")


head(pbmc.hashtag@meta.data)

VlnPlot(pbmc.hashtag, features = c("nFeature_RNA", "nCount_RNA",
                                   "nCount_HTO","nFeature_HTO"), 
        ncol = 2,pt.size = 0)

可以看到,这个时候其实是两个矩阵都进入了seurat对象里面哦,

利用HTODemux函数拆分数据

前面的seurat对象比较特殊,它有两个assay,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> pbmc.hashtag
An object of class Seurat 
32740 features across 18777 samples within 2 assays 
Active assay: RNA (32738 features, 1749 variable features)
 1 other assay present: HTO

这样的,有两个 assay的 seurat对象,就可以被HTODemux函数拆分数据,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pbmc.hashtag <- HTODemux(pbmc.hashtag,
                         assay = "HTO", 
                         positive.quantile = 0.99)
pbmc.hashtag
table(pbmc.hashtag$HTO_classification.global)
pbmc.hashtag@assays
table(pbmc.hashtag$hash.ID)

# ## Doublet Negative  Singlet 
#     152    14650     3975 

# 可视化
Idents(pbmc.hashtag) <- "hash.ID"
VlnPlot(pbmc.hashtag, features = "nCount_RNA", pt.size = 0, log = TRUE)
FeatureScatter(pbmc.hashtag, feature1 = "rna_HBE1", feature2 = "rna_S100A9")

可以看到, 这个数据集质量有点问题,绝大部分的细胞都是阴性,有点意思。

数据提取

混合样品,拆开成为不同的seurat对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

# First, we will remove negative cells from the object
table(Idents(pbmc.hashtag))
pbmc.hashtag.subset <- subset(pbmc.hashtag, 
                              idents = c("Negative","Doublet"), 
                              invert = TRUE)
table(Idents(pbmc.hashtag.subset)) 
pbmc.hashtag.subset <- RunPCA(pbmc.hashtag.subset)
pbmc.hashtag.subset <- RunUMAP(pbmc.hashtag.subset,dims=1:10)
DimPlot(pbmc.hashtag.subset) 

#提取B0251B0251 <- subset(pbmc.hashtag, 
                idents = c("B0251 anti-human Hashtag1"))
#提取B0252B0252 <- subset(pbmc.hashtag, 
                idents = c("B0252 anti-human Hashtag2"))
 

多个单细胞对象需要合并后走harmony流程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

sce.all <- merge( B0251, y=  B0252 ,add.cell.ids = c('B0251','B0252')) 
 
as.data.frame(sce.all@assays$RNA@counts[1:10, 1:2])
head(sce.all@meta.data, 10)
table(sce.all@meta.data$orig.ident) 
library(stringr)
phe=as.data.frame(str_split(colnames(sce.all),'_',simplify = T))
head(phe)
sce.all@meta.data$orig.ident = phe$V1
table(sce.all@meta.data$orig.ident )
head(sce.all@meta.data)
# 下面是标准流程
sce=sce.all
sce <- NormalizeData(sce, 
                         normalization.method = "LogNormalize",
                         scale.factor = 1e4) 
sce <- FindVariableFeatures(sce)
sce <- ScaleData(sce)
sce <- RunPCA(sce, features = VariableFeatures(object = sce))

library(harmony)
seuratObj <- RunHarmony(sce, "orig.ident")
names(seuratObj@reductions)
seuratObj <- RunUMAP(seuratObj,  dims = 1:15, 
                     reduction = "harmony")
DimPlot(seuratObj,reduction = "umap",label=T ) 

sce=seuratObj
sce <- FindNeighbors(sce, reduction = "harmony",
                     dims = 1:15) 
sce.all=sce 

后面的结果就顺理成章了,分群注释,如下所示的结果:

唯一美中不足的就是最开始的两万多个细胞,居然过滤后仅仅是剩下三千左右细胞数量了。

如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.

十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Seurat4.0系列教程21:结合Cell Hashing分析双细胞
Cell Hashing 由NYGC 技术创新小组与Satija实验室合作开发,使用寡核苷酸标记的抗体标记细胞表面表达的蛋白质,在每个单细胞上放置一个"样本条形码",使不同的样品能够一起多路复用,并在单次实验中运行。欲了解更多信息,请参阅此文[1]
生信技能树jimmy
2022/01/10
1.6K0
Seurat4.0系列教程21:结合Cell Hashing分析双细胞
Seurat教程 || 分析Cell Hashing数据
Cell Hashing是与NYGC的技术创新小组合作开发的,它使用低聚标记(oligo-tagged)抗体来标记表面蛋白,在每个单细胞上放置一个“样本条形码(sample barcode)”,使得不同的样本可以被多路复用并在单个实验中运行。更多信息,可以参阅Cell Hashing with barcoded antibodies enables multiplexing and doublet detection for single cell genomics。(https://genomebiology.biomedcentral.com/articles/10.1186/s13059-018-1603-1)
生信技能树jimmy
2020/08/17
2.5K0
Seurat教程 || 分析Cell Hashing数据
空间单细胞取巧办法
在没有单细胞转录组技术的年代,我们如果有足够的流式筛选技术提取到各个单细胞亚群后去普通转录组,得到的图表和生物学结论未必差到哪里。同理,目前的空间单细胞其实也不需要具体到一个平面的每个点的细胞,终归是需要把平面划分为不同区域。扪心自问,如果真的是让你关心每个单细胞或者说空间里面的每个点,你玩的过来吗?分门别类的思想无处不在,既然我们并不关心具体的每个单细胞的表达量,而是看各个单细胞亚群的表达量,所以就有了流式筛选的策略,同理我们并不关心空间上面的每个点,而是划分为不同区域,所以就有了荧光显微切割的多位点取样。
生信技能树
2022/06/08
4280
空间单细胞取巧办法
一篇单细胞文献复现及代码部分更新
https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE151177
生信菜鸟团
2023/12/14
1.7K0
一篇单细胞文献复现及代码部分更新
单细胞实战之样本整理,细胞注释和部分图表绘制---从入门到进阶(初级篇1)
在完成了马拉松课程后,我们应该对单细胞分析有了基本了解。接下来,我们将开启新的篇章——单细胞实战:从入门到进阶。
凑齐六个字吧
2025/02/08
2150
单细胞实战之样本整理,细胞注释和部分图表绘制---从入门到进阶(初级篇1)
单细胞测序—标准流程代码(1)
现在的单细胞测序很少是单个样本测序了,一般是多个样本。这里用ifnb.SeuratData包中的ifnb示例数据来模拟单细胞测序多样本分析流程。
sheldor没耳朵
2024/08/20
7760
单细胞测序—标准流程代码(1)
白癜风单细胞转录组数据处理
所以我写了一个还算是比较自动化的单细胞转录组数据处理代码,如果是我自己来做这样的处理,可以在十几分钟就完成复现文章的第一层次降维聚类分群图,如下所示的2分组的15个样品 :
生信技能树
2023/02/27
4590
白癜风单细胞转录组数据处理
画出像烟花一样的单细胞umap图,原因竟然是?
GSE125527数据:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE125527。
生信技能树
2025/02/05
1680
画出像烟花一样的单细胞umap图,原因竟然是?
如何优雅的修改Seurat流程里面的单细胞样品名字
假设我们有一个seurat对象sce.all,默认的每个cell的样本来源信息是存储在sce.all对象中metadata的orig.ident部分(sce.all@meta.data$orig.ident),但是orig.ident中的内容是从1开始的数值,有N个样本,就有N个数值去代表这N个样本。在后续的作图分析中,如果样本信息只是数值,还要对应回原本的样本名去查看,这样并不直观。因此我们有这个需要将seurat对象中的orig.ident替换为真实的样本名字。
生信技能树jimmy
2024/01/22
3.3K0
如何优雅的修改Seurat流程里面的单细胞样品名字
单细胞专题 | 6.单细胞下游分析——不同类型的数据读入
单细胞专题 | 1.单细胞测序(10×genomics技术)的原理 单细胞专题 | 2.如何开始单细胞RNASeq数据分析 单细胞专题 | 3.单细胞转录组的上游分析-从BCL到FASTQ 单细胞专题 | 4.单细胞转录组的上游分析-从SRA到FASTQ 单细胞专题 | 5.单细胞转录组的上游分析-从FASTQ到count矩阵
DoubleHelix
2022/12/16
4.1K0
单细胞专题 | 6.单细胞下游分析——不同类型的数据读入
病毒感染相关单细胞文献复现-1
该篇文章重点研究了轮状病毒感染绒毛尖端的肠细胞会导致损伤。并且对感染的小鼠肠上皮进行的单细胞RNA测序显示了广泛的应答,包括干细胞扩增和不成熟的肠上皮细胞群。干细胞亚群更频繁地进入细胞周期,导致产生更多的肠上皮细胞来补偿绒毛尖端受损的肠上皮细胞。在丛状细胞中病毒转录物的存在和丛状细胞转录激活的证据表明丛状细胞在损伤后的上皮反应中提供了重要的信号。
生信菜鸟团
2023/09/09
3950
病毒感染相关单细胞文献复现-1
免疫抑制剂-TNBC单细胞数据集聚类分群
然后就是花费了从早上9点至下午4点的运行过程,流程是初级流程,时间是好几倍,这时间可以跑完别的一整篇了,果然不可高攀。 乍一看去,这些图不算难呀,可能这个PI和TI的设定得多花点时间琢磨一下
生信菜鸟团
2023/09/09
4930
免疫抑制剂-TNBC单细胞数据集聚类分群
转录组和单细胞下游基于R的数据分析-01
数据链接是:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE212199
生信技能树
2024/03/25
2010
转录组和单细胞下游基于R的数据分析-01
V5版seurat读取不同格式单细胞数据
在23年3月份的时候(下意识想说今年了hhh,恍然发现已经24年),菜鸟团作者就整理过不同格式的单细胞数据读取的方法,是基于V4版本的。
生信菜鸟团
2024/01/06
4.8K0
V5版seurat读取不同格式单细胞数据
RUNX1在B前体急性白血病细胞中的过表达(readMM函数活学活用)
接下来就可以读取它们啦,有意思的是每个样品都需要独立的读取3个文件,合并成为一个单细胞Seurat对象,操作技巧满满!
生信技能树
2021/12/04
6760
RUNX1在B前体急性白血病细胞中的过表达(readMM函数活学活用)
鼻咽癌患者肿瘤部位和外周血的单细胞组成差异
在单细胞大行其道的近两年,我也安排了学徒们做了几百个有表达量矩阵可以下载的单细胞转录组文献图表复现,挑选其中100个成功的案例,提供代码给大家,希望对大家有帮助!
生信技能树
2021/04/29
1.1K0
鼻咽癌患者肿瘤部位和外周血的单细胞组成差异
不知道细胞亚群的生物学功能?clusterProfiler来帮你
所以我给他的建议是不管三七二十一,先分群,然后看每个亚群功能异质性,给出注释,并且给出临床生存分析结果。
生信技能树
2021/07/29
8050
一篇NC文献部分复现——小鼠正常肺和纤维化肺细胞的 scRNA-seq 分析
胶原生成细胞 (Collagen-producing cells)维持肺的复杂结构并驱动肺纤维化的病理性瘢痕形成。文章中进行scRNA-seq,以鉴定正常和纤维化肺中所有胶原生成细胞,在小鼠肺的不同隔室中具有不同解剖定位的多个胶原生成亚群的特征,一个以表达「Cthrc1」 (collagen triple helix repeat containing 1) 为特征的亚群出现在纤维化肺中,表达最高水平的胶原。
生信菜鸟团
2023/11/24
1.7K0
一篇NC文献部分复现——小鼠正常肺和纤维化肺细胞的 scRNA-seq 分析
日光性皮炎和银屑病单细胞数据集复现
单细胞转录组学表明,IL-17A/F 在日光性皮炎和银屑病中具有不同的上游驱动力。
生信菜鸟团
2024/04/11
2600
日光性皮炎和银屑病单细胞数据集复现
免疫性血小板低下症患者的单细胞层面变化
现在要分享的是数据集GSE196676,关于Immune thrombocytopenia (ITP), 中文翻译可以是免疫性血小板低下症,对应发表的文章也很新,Deciphering transcriptome alterations in bone marrow hematopoiesis at single-cell resolution in immune thrombocytopenia. Signal Transduct Target Ther 2022 Oct 7;7(1):347. PMID: 36202780
生信技能树
2023/02/27
5020
免疫性血小板低下症患者的单细胞层面变化
推荐阅读
相关推荐
Seurat4.0系列教程21:结合Cell Hashing分析双细胞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验