Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何对应两个不同单细胞数据集的分群结果?

如何对应两个不同单细胞数据集的分群结果?

作者头像
生信技能树
发布于 2025-02-05 05:18:26
发布于 2025-02-05 05:18:26
52400
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

我们生信技能树有个学徒在过来中山进行学习的时候,学到了单细胞部分,然后他做了两个同样组织样本的数据,问:我这两个不同的数据集中,怎么样比较A数据集中的比如上皮细胞亚群与B数据集中的上皮细胞亚群是不是同一种上皮细胞亚群呢?这个问题挺有意思的,而且是一些多数据集整合算法或者 利用已知注释好的单细胞数据来注释新的单细胞未知细胞亚群数据的基础思想。

首先,来问问你的私人顾问人工智能大模型kimi

kimi(https://kimi.moonshot.cn/):两个不同数据集的单细胞降维聚类分群结果如何对应?

在单细胞转录组学研究中,将两个不同数据集的降维聚类分群结果进行对应是一个常见的问题,尤其是在跨样本、跨物种或跨实验条件的研究中。以下是几种常用的方法来实现这种对应关系:

1. 数据整合(Data Integration) 数据整合是最直接的方法之一,通过将两个数据集合并到一个统一的分析框架中,消除技术变异和批次效应,从而进行统一的降维和聚类。 操作步骤:

  1. 数据预处理:对两个数据集分别进行标准化、对数转换、高变基因筛选等预处理步骤。
  2. 整合工具选择:使用如Seurat的 SCTransformHarmonyBBKNNScanorama等工具进行整合。
  3. 统一降维和聚类:整合后,对合并的数据集进行降维(如PCA、t-SNE或UMAP)和聚类。
  4. 分析整合结果:通过可视化(如UMAP图)和标记基因分析,确定聚类的细胞类型。

2. 基于标记基因的对应(Marker Gene Matching) 如果不想进行数据整合,可以分别对两个数据集进行降维和聚类,然后通过标记基因来寻找对应的细胞群。 操作步骤:

  1. 分别降维和聚类:对两个数据集分别进行降维和聚类。
  2. 标记基因分析:使用FindMarkersFindAllMarkers函数找到每个聚类的标记基因。
  3. 标记基因匹配:比较两个数据集中聚类的标记基因,找到具有相似标记基因的聚类。

3. 基于细胞类型注释的对应(Cell Type Annotation) 如果已知某些标记基因或细胞类型特征,可以直接对两个数据集的聚类结果进行细胞类型注释,然后比较注释结果。 操作步骤:

  1. 分别降维和聚类:对两个数据集分别进行降维和聚类。
  2. 细胞类型注释:使用标记基因或自动化注释工具(如SingleRscCATCH)对聚类结果进行细胞类型注释。
  3. 比较注释结果:比较两个数据集中相同细胞类型的聚类。

4. 基于相似性度量的对应(Similarity Metrics) 如果两个数据集的细胞类型较为复杂,可以使用相似性度量(如Jaccard指数)来量化聚类之间的相似性。 操作步骤:

  1. 分别降维和聚类:对两个数据集分别进行降维和聚类。
  2. 计算相似性:计算两个数据集中聚类之间的相似性(如Jaccard指数)。
  3. 匹配聚类:根据相似性得分找到最匹配的聚类。

总结 选择哪种方法取决于具体的研究需求和数据特点:

  1. 数据整合:适合需要统一分析两个数据集的情况,能够消除批次效应。
  2. 标记基因匹配:适合已知标记基因且不想进行数据整合的情况。
  3. 细胞类型注释:适合已知细胞类型特征的情况。
  4. 相似性度量:适合细胞类型复杂且需要量化比较的情况。

在实际应用中,可以结合多种方法进行综合分析,以提高对应关系的准确性。

示例数据

学员询问的两个数据集分别为:GSE167297、GSE184198

GSE167297

https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE167297,这个数据样本组织类型为弥漫型胃癌,利用10X Genomics技术测序,共30,365个细胞。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GSM5101013 Pt1_normal
GSM5101014 Pt1_superficial_cancer
GSM5101015 Pt1_deep_cancer
GSM5101016 Pt2_superficial_cancer
GSM5101017 Pt2_deep_cancer
GSM5101018 Pt3_normal
GSM5101019 Pt3_superficial_cancer
GSM5101020 Pt3_deep_cancer
GSM5101021 Pt4_normal
GSM5101022 Pt4_superficial_cancer
GSM5101023 Pt4_deep_cancer
GSM5101024 Pt5_normal
GSM5101025 Pt5_superficial_cancer
GSM5101026 Pt5_deep_cancer

对此数据进行简单的读取并创建Seurat对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list=ls())
options(stringsAsFactors = F) 
source('scRNA_scripts/lib.R')
getwd()

###### step1: 导入数据 ######   
# 参考:https://mp.weixin.qq.com/s/tw7lygmGDAbpzMTx57VvFw
dir='GSE167297_RAW/' 
samples=list.files( dir ,pattern = 'gz')
samples 
library(data.table)
sceList = lapply(samples,function(pro){ 
  # pro=samples[1] 
  print(pro)
  ct=fread(file.path( dir ,pro),data.table = F)
  ct[1:4,1:4]
  rownames(ct)=ct[,1]
  ct=ct[,-1]
  sce=CreateSeuratObject(counts =  ct ,
                         project = gsub('_CountMatrix.txt.gz','', gsub('GSM[0-9]*_','',pro) ) ,
                         min.cells = 5,
                         min.features = 300)
  return(sce)
})
names(sceList)  
library(stringr)
do.call(rbind,lapply(sceList, dim)) 
samples= gsub('_CountMatrix.txt.gz','', gsub('GSM[0-9]*_','',samples) ) 
samples
sce.all=merge(x=sceList[[1]], y=sceList[ -1 ],   add.cell.ids = samples  ) 
names(sce.all@assays$RNA@layers)
sce.all[["RNA"]]$counts 

# Alternate accessor function with the same result
LayerData(sce.all, assay = "RNA", layer = "counts")
sce.all <- JoinLayers(sce.all)
dim(sce.all[["RNA"]]$counts )
 
as.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])
head(sce.all@meta.data, 10)
table(sce.all$orig.ident) 

然后经过简单的质控,降为聚类分群,得到以下的简单注释:

GSE184198

https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE184198,该数据组织样本取自一名未经治疗、原发性、非转移性胃癌(GC)患者,该患者接受了胃癌切除手术。相邻的正常胃组织样本采集自癌组织边缘5厘米以外的区域。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GSM5580154 GC tissue
GSM5580155 NT tissue

数据处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list=ls())
options(stringsAsFactors = F) 
source('scRNA_scripts/lib.R')
getwd()

###### step1: 导入数据 ######   
# 参考:https://mp.weixin.qq.com/s/tw7lygmGDAbpzMTx57VvFw
dir='GSE184198_RAW/'
samples=list.files( dir  )
samples
sceList = lapply(samples,function(pro){ 
  # pro=samples[5] 
  print(pro)  
  tmp = Read10X(file.path(dir,pro ) ) 
  if(length(tmp)==2){
    ct = tmp[[1]] 
  }else{ct = tmp}
  print(dim(ct))
  sce =CreateSeuratObject(counts =  ct ,
                          project =  gsub('_processed','', gsub('GSM[0-9]*_','',pro) )  ,
                          min.cells = 5,
                          min.features = 300 )
  return(sce)
}) 
do.call(rbind,lapply(sceList, dim)) 
samples=gsub('_processed','', gsub('GSM[0-9]*_','',samples) ) 
samples
sce.all=merge(x=sceList[[1]], y=sceList[ -1 ], add.cell.ids = samples  ) 
names(sce.all@assays$RNA@layers)
sce.all[["RNA"]]$counts 

# Alternate accessor function with the same result
LayerData(sce.all, assay = "RNA", layer = "counts")
sce.all <- JoinLayers(sce.all)
dim(sce.all[["RNA"]]$counts )
 
as.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])
head(sce.all@meta.data, 10)
table(sce.all$orig.ident) 

同样的简单注释之后结果如下:

将两个数据集的注释结果对应起来:基于亚群表达相似性

1、读取前面的处理结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# GSE167297
sce.all = readRDS('./2021-GSE167297-深层浸润和浅层-胃癌/2-harmony/sce.all_int.rds')
load('./2021-GSE167297-深层浸润和浅层-胃癌/phe.Rdata') 
identical(rownames(phe) , colnames(sce.all))
sce.all@meta.data = phe
sel.clust = "celltype"
sce.all <- SetIdent(sce.all, value = sel.clust)
table(sce.all@active.ident) 
DimPlot(sce.all,label = T) 
GSE167297 = sce.all

# GSE184198
sce.all = readRDS('./2022-GSE184198-胃癌-肿瘤干细胞-AQP5/2-harmony/sce.all_int.rds')
load('./2022-GSE184198-胃癌-肿瘤干细胞-AQP5/phe.Rdata') 
identical(rownames(phe) , colnames(sce.all))
sce.all@meta.data = phe
sel.clust = "celltype"
sce.all <- SetIdent(sce.all, value = sel.clust)
table(sce.all@active.ident) 
DimPlot(sce.all, label = T) 
GSE184198 = sce.all

2、提取亚群水平的伪bulk count表达值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提取亚群水平的伪bulk count表达值
table(GSE184198$celltype)
GSE184198 <- AggregateExpression(GSE184198, group.by = c("celltype" ), assays = "RNA") 
GSE184198 <- as.data.frame(GSE184198[[1]])
head(GSE184198)

table(GSE167297$celltype)
GSE167297 <-AggregateExpression(GSE167297 , group.by = c("celltype" ), assays = "RNA") 
GSE167297 <- as.data.frame(GSE167297[[1]])
head(GSE167297)

3、根据表达值计算亚群间的相似性

使用pearson计算相关性并用热图展示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ids <- intersect(rownames(GSE167297),rownames(GSE184198))
ct=cbind(GSE167297[ids,], GSE184198[ids,] )
colnames(ct)=paste(c(rep('GSE167297',ncol(GSE167297)),rep('GSE184198',ncol(GSE184198))),colnames(ct))
dim(ct)
head(ct)

pheatmap::pheatmap(cor(log2(edgeR::cpm(ct)+1)))

可以看到两个独立数据集中的相同亚群可以很好地聚在一起:

当然,这是非常简单粗暴的方法,下一期我们将介绍不同算法数据整合的时候,整合的思想与这里的异同点。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
胃癌单细胞数据集GSE163558复现(一):数据下载、整理与读取
Hello小伙伴们大家好,我是生信技能树的小学徒”我才不吃蛋黄“。接下来的一段时间里,将由我开启一个新的学徒分享系列,给大家系统整理单细胞测序的代码。此系列包括但不限于以下内容:数据下载与读取;质控和去批次;降维聚类;分群注释;差异分析;富集分析;拟时序分析;细胞通讯;CopyKAT。
生信技能树jimmy
2024/06/13
2.6K0
胃癌单细胞数据集GSE163558复现(一):数据下载、整理与读取
你相信癌症细胞系结果还是肿瘤病人数据(生信游民交流群)
而且还经过了一些肿瘤病人的转录组队列数据集同样的EGFR突变与否的分组后差异分析,也是有CD47作为多个数据集差异结果的交集,证据链非常solid:
生信技能树
2024/04/13
2030
你相信癌症细胞系结果还是肿瘤病人数据(生信游民交流群)
区区20万个单细胞居然超内存了
其中一个数据集是2020发在NC的肺癌单细胞文章:《Single-cell RNA sequencing demonstrates the molecular and cellular reprogramming of metastatic lung adenocarcinoma》,是44个肺癌病人的58个10x技术的单细胞转录组样品,因为是两三年前的10x单细胞技术那个时候都比较辣鸡所以细胞数量就平均每个样品是3千,这样的话合计是20万个单细胞。
生信技能树
2023/02/27
2.1K1
区区20万个单细胞居然超内存了
单细胞的这种命名方式可取吗?
今天又来学习一篇单细胞数据文章,标题为《Integration of Single-Cell and Bulk Transcriptomes to Identify a Poor Prognostic Tumor Subgroup to Predict the Prognosis of Patients with Early-stage Lung Adenocarcinoma》,这篇文献于2025年1月21号发表在J Cancer杂志上。
生信技能树
2025/03/17
560
单细胞的这种命名方式可取吗?
脓毒症小鼠模型单细胞(中性粒细胞这么就丢了呢)
前些天我们公众号弄了一个活动,详见:春节期间单细胞转录组数据分析全免费,收到了上百个需求, 本来呢我们自己就算是春节前后14天不吃不喝不眠不休也不可能完成这么多单细胞数据处理。好在我灵机一动,想起来了前面两个月培养的一百多个在线实习生,毕竟教了他们R语言,转录组,以及单细胞转录组。 所以我写了一个还算是比较自动化的单细胞转录组数据处理代码,如果是我自己的,可以在十几分钟就完成复现文章的第一层次降维聚类分群图,比如数据集:https://www.ncbi.nlm.nih.gov/geo/query/acc.c
生信技能树
2023/02/27
4410
脓毒症小鼠模型单细胞(中性粒细胞这么就丢了呢)
多分组单细胞测序数据第一层次未整合和整合分析对B细胞细分的分群有何影响?
这期学习这篇推文:多分组单细胞转录组测序样本第一层次未整合和整合数据的B细胞细分对比
生信技能树jimmy
2023/09/19
8040
多分组单细胞测序数据第一层次未整合和整合分析对B细胞细分的分群有何影响?
如何整合多个单细胞数据集
学员给了一个正常人的肾脏组织数据集(GSE131685),同时我们读取它,如下所示的文件形式:
生信技能树
2024/11/21
2110
如何整合多个单细胞数据集
天啦,啥肿瘤有如此高比例的树突细胞
如下所示是的降维聚类分群和命名,很明显的可以看到髓系免疫细胞里面的巨噬细胞和树突细胞的比例是有问题的,而且那些高表达量基因明明是单核细胞的并不是树突细胞的 :
生信技能树
2024/06/08
1780
天啦,啥肿瘤有如此高比例的树突细胞
肿瘤病人的单细胞转录组数据不做整合就能体现出来恶性癌细胞的病人异质性吗
其中第一层次降维聚类分群是:clustering and cell type identification was based on scRNA-seq of 212,404 cells from primary mononuclear bone marrow samples of RRMM patients (n = 20) as shown by an UMAP embedding colored by sample without batch-effect correction.
生信技能树
2023/11/19
2800
肿瘤病人的单细胞转录组数据不做整合就能体现出来恶性癌细胞的病人异质性吗
基于Seurat的TransferData函数自动化迁移单细胞转录组亚群的注释信息
这个GSE206528的单细胞转录组数据集,很容易构建成为Seurat对象。仍然是走常规的单细胞转录组降维聚类分群代码,可以看 链接: https://pan.baidu.com/s/1bIBG9RciAzDhkTKKA7hEfQ?pwd=y4eh ,基本上大家只需要读入表达量矩阵文件到r里面就可以使用Seurat包做全部的流程。批量读取它的9个文件的代码如下所示:
生信技能树
2024/04/13
8670
基于Seurat的TransferData函数自动化迁移单细胞转录组亚群的注释信息
单细胞实战之样本整理,细胞注释和部分图表绘制---从入门到进阶(初级篇1)
在完成了马拉松课程后,我们应该对单细胞分析有了基本了解。接下来,我们将开启新的篇章——单细胞实战:从入门到进阶。
凑齐六个字吧
2025/02/08
2680
单细胞实战之样本整理,细胞注释和部分图表绘制---从入门到进阶(初级篇1)
画出像烟花一样的单细胞umap图,原因竟然是?
GSE125527数据:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE125527。
生信技能树
2025/02/05
2110
画出像烟花一样的单细胞umap图,原因竟然是?
单细胞水平看小鼠胰腺导管腺癌进展中的细胞异质性
文章链接:https://insight.jci.org/articles/view/129212
生信技能树
2021/12/10
9220
单细胞水平看小鼠胰腺导管腺癌进展中的细胞异质性
这两个疾病的患者的PBMC跟正常人的在单细胞转录组水平差异很大吗
值得一提的是这个数据挖掘是韩国人做的哦,标题是:《Immunological link between periodontitis and type 2 diabetes deciphered by single‐cell RNA analysis》
生信技能树jimmy
2023/12/19
4390
这两个疾病的患者的PBMC跟正常人的在单细胞转录组水平差异很大吗
单细胞测序—不同格式的单细胞测序数据读写(多样本)
读写过程中需要将一个GSE数据集中多个样本的seurat对象合并成一个大的seurat对象
sheldor没耳朵
2024/08/25
1.3K0
单细胞测序—不同格式的单细胞测序数据读写(多样本)
单细胞降维聚类分群注释全流程学习(seruat5/harmony)
https://mp.weixin.qq.com/s/drmfwJgbFsFCtoaMsMGaUA
凑齐六个字吧
2024/09/07
3640
单细胞降维聚类分群注释全流程学习(seruat5/harmony)
人海绵体单细胞转录组图谱
文章标题:《Single-cell transcriptome atlas of the human corpus cavernosum》
生信技能树jimmy
2024/04/28
2330
人海绵体单细胞转录组图谱
肿瘤单细胞转录组的第一层次降维聚类分群
主要的分析就是第一层次降维聚类分群,然后大概认识一下有什么亚群,以及比例差异情况,最后就是把每个亚群都细分一下做同样的分析即可。
生信技能树
2023/11/16
3980
肿瘤单细胞转录组的第一层次降维聚类分群
单细胞RNA测序分析人高级别浆液性卵巢癌的组织结构
文章标题:《Single-Cell RNA Sequencing Reveals the Tissue Architecture in Human High-Grade Serous Ovarian Cancer》
生信技能树jimmy
2024/01/02
5190
单细胞RNA测序分析人高级别浆液性卵巢癌的组织结构
学徒作业|GSE217845-胰腺癌中的巨噬细胞细分亚群
学徒作业的要求是:从上面的数据集GSE217845里面的10个胰腺癌的10x技术单细胞转录组数据的第一层次降维聚类分群里面提前髓系免疫细胞后,继续细分降维聚类拿到里面的巨噬细胞,然后继续细分巨噬细胞看看能否复现文章里面的:
生信技能树jimmy
2024/04/15
4250
学徒作业|GSE217845-胰腺癌中的巨噬细胞细分亚群
推荐阅读
相关推荐
胃癌单细胞数据集GSE163558复现(一):数据下载、整理与读取
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验