Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞TPM数据遇上Seurat v5

单细胞TPM数据遇上Seurat v5

作者头像
用户11414625
发布于 2024-12-20 07:02:33
发布于 2024-12-20 07:02:33
17300
代码可运行
举报
文章被收录于专栏:生信星球520生信星球520
运行总次数:0
代码可运行

0.单细胞的TPM数据

众所周知,正常的单细胞数据应该给我们提供count,但偏偏有一些数据是特殊的,给的是tpm数据。准确来说应该是log2(tpm/10+1)

为啥除以10,这么解释的: TPM values were divided by 10 since we estimate the complexity of our single cell libraries to be on the order of 100,000 transcripts and would like to avoid counting each transcript ~10 times, as would be the case with TPM, which may inflate the difference between the expression level of a gene in cells in which the gene is detected and those in which it is not detected.

查阅seurat的github,对tpm数据的说明是

If you have TPM data, you can simply manually log transform the gene expression matrix in the object@data slot before scaling the data. You have to replace your object@data slot with the desired gene expression matrix as follows: sce.all@data = log(x = norm + 1))

在Seurat v5 版本之前,直接跳过NormalizeData 这个函数即可:

Yes, run CreateSeuratObject() and skip the data normalization step since you’re starting with normalized data

但是呢,当我们使用Seurat v5 ,粗暴的跳过NormalizeData 是会报错的。例如:

1.读取数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dat = data.table::fread("GSE72056_melanoma_single_cell_revised_v2.txt.gz",data.table = F)
dat[1:4,1:4]

##                                                           Cell
## 1                                                        tumor
## 2                           malignant(1=no,2=yes,0=unresolved)
## 3 non-malignant cell type (1=T,2=B,3=Macro.4=Endo.,5=CAF;6=NK)
## 4                                                     C9orf152
##   Cy72_CD45_H02_S758_comb CY58_1_CD45_B02_S974_comb Cy71_CD45_D08_S524_comb
## 1                      72                        58                      71
## 2                       1                         1                       2
## 3                       2                         1                       0
## 4                       0                         0                       0

dat = dat[-(1:3),]
library(tidyverse)
dat = distinct(dat,Cell,.keep_all = T)
library(tibble)
dat = column_to_rownames(dat,"Cell")
dat[1:4,1:4]

##          Cy72_CD45_H02_S758_comb CY58_1_CD45_B02_S974_comb
## C9orf152                  0.0000                    0.0000
## RPS11                     9.2172                    8.3745
## ELMO2                     0.0000                    0.0000
## CREB3L1                   0.0000                    0.0000
##          Cy71_CD45_D08_S524_comb Cy81_FNA_CD45_B01_S301_comb
## C9orf152                  0.0000                      0.0000
## RPS11                     9.3130                      7.8876
## ELMO2                     2.1263                      0.0000
## CREB3L1                   0.0000                      0.0000
2.正常创建对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(Seurat)
sce.all <- CreateSeuratObject(counts = dat, 
                           project = "a", 
                           min.cells = 3, 
                           min.features = 200)
3.质控
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sce.all[["percent.mt"]] <- PercentageFeatureSet(sce.all, pattern = "^MT-")
head(sce.all@meta.data, 3)

##                           orig.ident nCount_RNA nFeature_RNA percent.mt
## Cy72_CD45_H02_S758_comb            a   7143.363         3365          0
## CY58_1_CD45_B02_S974_comb          a   8915.833         3637          0
## Cy71_CD45_D08_S524_comb            a  12578.256         4660          0

VlnPlot(sce.all, 
        features = c("nFeature_RNA",
                     "nCount_RNA", 
                     "percent.mt"), 
        ncol = 3,pt.size = 0.5)

image.png

线粒体基因比例为0,另两个图也没有很利群的值,这个数据可以不过滤。

4.企图跳过NormalizeData

当我们企图跳过NormalizeData就会报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sce.all = sce.all %>% 
  #NormalizeData() %>%  
  FindVariableFeatures() %>%  
  ScaleData()

## Error in `ScaleData()`:
## ! No layer matching pattern 'data' found. Please run NormalizeData and retry

明明4版本这样做是木有问题的嘞。

5.查呀!

各种细枝末节都可以在seurat github页面上找到答案:

In the previous versions, “data” was automatically populated with the raw counts prior to running NormalizeData, which is no longer the case in v5. Therefore, if you run ScaleData and the “data” layer does not exist, this will not work. If you want to run ScaleData on the raw counts (which I wouldn’t recommend doing in most cases), you could do the following: sce.all_small <- ScaleData(sce.all_small, layer = “counts”) https://github.com/satijalab/seurat/issues/8003

所以解决办法就是加上个参数layer = “counts”。虽然叫counts但我们创建对象的时候放了个什么东西进去自己心里没点数嘛?那其实是tpm😄。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sce.all = sce.all %>% 
  #NormalizeData() %>%  
  FindVariableFeatures() %>%  
  ScaleData(layer = "counts") %>%
  RunPCA(pc.genes = pbmc@var.genes)  %>%
  FindNeighbors(dims = 1:15) %>% 
  FindClusters(resolution = 0.5) %>% 
  RunUMAP(dims = 1:15) 

## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 4645
## Number of edges: 150415
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9164
## Number of communities: 16
## Elapsed time: 0 seconds

后面就可以正常进行啦,顺便把这个数据做完

6.还能做个singleR
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 注释
library(celldex)
library(SingleR)
#ref <- celldex::HumanPrimaryCellAtlasData()
#因为下载太慢,使用了提前存好的本地数据
ref <- get(load("ref_Human_all.RData"))
library(BiocParallel)
pred.scRNA <- SingleR(test = sce.all@assays$RNA$counts, 
                      ref = ref,
                      labels = ref$label.main, 
                      clusters = sce.all@active.ident)
pred.scRNA$pruned.labels

##  [1] "T_cells"           "T_cells"           "B_cell"           
##  [4] "Neurons"           "Neurons"           "T_cells"          
##  [7] "Monocyte"          "T_cells"           "Tissue_stem_cells"
## [10] "Neurons"           "Neurons"           "Endothelial_cells"
## [13] "T_cells"           "Fibroblasts"       "T_cells"          
## [16] "Neurons"

plotScoreHeatmap(pred.scRNA, clusters=pred.scRNA@rownames, fontsize.row = 9,show_colnames = T)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new.cluster.ids <- pred.scRNA$pruned.labels
names(new.cluster.ids) <- levels(sce.all)
levels(sce.all)

##  [1] "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14"
## [16] "15"

sce.all <- RenameIdents(sce.all,new.cluster.ids)
levels(sce.all)

## [1] "T_cells"           "B_cell"            "Neurons"          
## [4] "Monocyte"          "Tissue_stem_cells" "Endothelial_cells"
## [7] "Fibroblasts"

p = UMAPPlot(object = sce.all, pt.size = 0.5, label = TRUE)
p
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
单细胞多样本整合之harmony(seurat v5)
多样本整合这回事,其实有很多中方法,seurat5可以用一个参数支持5种整合算法。 Anchor-based CCA integration (method=CCAIntegration) Anchor-based RPCA integration (method=RPCAIntegration) Harmony (method=HarmonyIntegration) FastMNN (method= FastMNNIntegration) scVI (method=scVIIntegration)
用户11414625
2024/12/20
1.1K0
单细胞多样本整合之harmony(seurat v5)
​单细胞专题 | 7.单细胞下游分析——常规分析流程案例一
单细胞专题 | 1.单细胞测序(10×genomics技术)的原理 单细胞专题 | 2.如何开始单细胞RNASeq数据分析 单细胞专题 | 3.单细胞转录组的上游分析-从BCL到FASTQ 单细胞专题 | 4.单细胞转录组的上游分析-从SRA到FASTQ 单细胞专题 | 5.单细胞转录组的上游分析-从FASTQ到count矩阵 单细胞专题 | 6.单细胞下游分析——不同类型的数据读入
DoubleHelix
2022/12/16
5.5K0
​单细胞专题 | 7.单细胞下游分析——常规分析流程案例一
单细胞多样本整合之CCA(Seuratv5)
看到一篇单细胞数据挖掘的文章,题为:Establishment of a Prognostic Model of Lung Adenocarcinoma Based on Tumor Heterogeneity
用户11414625
2024/12/20
2450
单细胞多样本整合之CCA(Seuratv5)
​单细胞专题 | 8.单细胞类型注释之SingleR包详解
单细胞专题 | 1.单细胞测序(10×genomics技术)的原理 单细胞专题 | 2.如何开始单细胞RNASeq数据分析 单细胞专题 | 3.单细胞转录组的上游分析-从BCL到FASTQ 单细胞专题 | 4.单细胞转录组的上游分析-从SRA到FASTQ 单细胞专题 | 5.单细胞转录组的上游分析-从FASTQ到count矩阵 单细胞专题 | 6.单细胞下游分析——不同类型的数据读入 单细胞专题 | 7.单细胞下游分析——常规分析流程案例一
DoubleHelix
2022/12/16
9.9K0
​单细胞专题 | 8.单细胞类型注释之SingleR包详解
单细胞测序—GSE218208(流程简化)
上一篇帖子学习记录了Seurat官方给出的分析流程单细胞测序—基础分析流程,本篇文章以GSE218208为例,记录下实际的单细胞分析流程,更为简便,其与官方给出的流程略有不同。
sheldor没耳朵
2024/07/30
3310
单细胞测序—GSE218208(流程简化)
这个肝癌单细胞数据集居然真的有这么多NK细胞亚群啊!!!
根据生信技能树发布的学徒作业:SingleR说是NK细胞你就相信了吗, 验证一下看真的是有这么多NK细胞
生信技能树
2023/09/04
4550
这个肝癌单细胞数据集居然真的有这么多NK细胞亚群啊!!!
用V5版本Seurat做单细胞数据文献复现
V5和V4的代码区别主要在前期导入数据和其中的数据有些许改变,曾老师在之前的几篇推文还有直播中都有提到。
生信菜鸟团
2024/01/19
3.4K0
用V5版本Seurat做单细胞数据文献复现
单细胞组间比较分析
这篇文章介绍的是有分组的单细胞数据怎样分析,数据来自GEO的GSE231920,有3个treat,3个control样本,代码完整,可以自行下载数据跑一跑,但请注意细胞数量是6w,对计算资源要求较高,自己的电脑跑不动,需要在服务器上跑。
生信技能树
2024/07/05
2980
单细胞组间比较分析
单细胞学习第四天
2 多样本的整合,使用harmony,它需要的计算资源少,且准确程度高,是最受欢迎的方法。
用户11167001
2024/06/20
1990
单细胞实战之细胞周期矫正,双胞体和RNA污染去除——入门到进阶(初级篇2)
我们在上一讲内容中得到处理好后的数据集之后,接着来学习“矫正”数据的三个工具~ 分别为细胞周期矫正,去除双胞体和RNA污染。
凑齐六个字吧
2025/02/09
5230
单细胞实战之细胞周期矫正,双胞体和RNA污染去除——入门到进阶(初级篇2)
day7 GEO下载多样本数据的聚类注释
昆兰
2024/07/01
1920
使用singleR基于自建数据库来自动化注释单细胞转录组亚群
但是因为singleR的数据库资源陈旧而且很有限,满足不了日益增长的单细胞应用,后面我们都是主推第一层次降维聚类分群后的人工命名,通常我们拿到了肿瘤相关的单细胞转录组的表达量矩阵后的第一层次降维聚类分群通常是:
生信技能树
2024/04/13
1.3K0
使用singleR基于自建数据库来自动化注释单细胞转录组亚群
CNS图表复现05—免疫细胞亚群再分类
如果你也想加入交流群,自己去:你要的rmarkdown文献图表复现全套代码来了(单细胞)找到我们的拉群小助手哈。
生信技能树jimmy
2020/09/28
2K0
CNS图表复现05—免疫细胞亚群再分类
单细胞混样品测序后数据拆分(Cell Hashing技术)
最近有学徒提到她在复现文献:《utative regulators for the continuum of erythroid differentiation revealed by single-
生信技能树
2022/03/03
4K0
单细胞混样品测序后数据拆分(Cell Hashing技术)
单细胞学习小组003期 Day7
Today, we do multiple samples of scRNA-seq.
用户11153857
2024/07/06
1220
文献复现-单细胞揭示新辅助治疗后NSCLC的免疫微环境变化
文章在这:Tumor microenvironment remodeling after neoadjuvant immunotherapy in non-small cell lung cancer revealed by single-cell RNA sequencing 方法:来自3名治疗前和12名接受新辅助PD-1阻断联合化疗的非小细胞肺癌(NSCLC)患者的~92,000个单细胞的转录组。根据病理反应将12个治疗后样本分为两组:MPR(n = 4)和非MPR(n = 8)。
生信菜鸟团
2023/09/09
1.8K0
文献复现-单细胞揭示新辅助治疗后NSCLC的免疫微环境变化
day9 二次分群和细胞周期
如果是大多数点都集中在0点附近的,就可以不用去除细胞周期的影响!,分布范围较广或者是有较多的离群值那就需要要去除。
昆兰
2024/07/01
1340
单细胞降维聚类分群注释全流程学习(seruat5/harmony)
https://mp.weixin.qq.com/s/drmfwJgbFsFCtoaMsMGaUA
凑齐六个字吧
2024/09/07
3510
单细胞降维聚类分群注释全流程学习(seruat5/harmony)
单细胞自动注释之Garnett
在使用Seurat包得到降维聚类分群的结果后,就可以对数据进行注释了。Garnett是Cole Trapnell 实验室实验室开发的自动注释R包,使用机器学习算法来预测细胞类型,可以支持训练自己的分类器。
用户11414625
2024/12/20
2800
单细胞自动注释之Garnett
怎么知道我的单细胞数据需不需要去除细胞周期的影响呢
尘封的高中生物学知识,细胞的有丝分裂,分为分裂期(M)和分裂间期(G1,S,G2),细胞处于不同的细胞周期时,代谢活跃状态和染色体的状态大不相同,直接比较表达量是不公平的。
用户11414625
2024/12/20
2740
怎么知道我的单细胞数据需不需要去除细胞周期的影响呢
推荐阅读
相关推荐
单细胞多样本整合之harmony(seurat v5)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验