前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单细胞GSVA分析该用什么数据?

单细胞GSVA分析该用什么数据?

作者头像
生信技能树jimmy
发布2021-03-25 12:31:52
4.3K1
发布2021-03-25 12:31:52
举报
文章被收录于专栏:单细胞天地

经常有人问我单细胞GSVA分析应该用Seurat对象中的哪个数据,因为我此前的推文《单细胞转录组高级分析五:GSEA与GSVA分析》用的counts数据,后面有一篇推文《非人物种的GSEA&GSVA分析》用的是data数据。还有人推荐用scale.data,据说运行起来比counts数据快不少。很多人对此迷惑了,到底该用那个数据呢?

测试数据来源

测试数据来源于10x genomics官网的示例数据集。

数据下载链接:

代码语言:javascript
复制
https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3_nextgem/5k_pbmc_v3_nextgem_filtered_feature_bc_matrix.h5

保存文件名:pbmc.h5

运行时间对比

代码语言:javascript
复制
library(Seurat)
library(tidyverse)
library(GSVA)
library(msigdbr)

## 创建Seurat对象
#sc <- Read10X_h5("/home/james5woo/project/2020/2009_18pkgs/garnett/garnett_demo/pbmc.h5")
sc <- Read10X_h5("pbmc.h5")
sc <- sc[,sample(colnames(sc),1000)]  #将细胞数量随机抽样到1000个细胞
sc <- CreateSeuratObject(sc, project = "pbmc", min.cells = 10) #按较高标准过滤基因,主要是提高gsva的计算速度
dim(sc)
#[1] 12564  1000
sc <- NormalizeData(sc) %>% FindVariableFeatures() %>% ScaleData()

## 准备gsva分析的基因集(hallmark)
genesets <- msigdbr(species = "Homo sapiens", category = "H") %>% select("gs_name","gene_symbol") %>% as.data.frame()
genesets <- split(genesets$gene_symbol, genesets$gs_name)

## 测试counts数据
expr <- as.matrix(sc@assays$RNA@counts)
system.time({res.counts = gsva(expr, genesets, method="ssgsea", parallel.sz=10)}) 
#   用户    系统    流逝 
#196.838 533.948 207.484 

## 测试data数据
expr <- as.matrix(sc@assays$RNA@data)
system.time({res.data = gsva(expr, genesets, method="ssgsea", parallel.sz=10)}) 
#   用户    系统    流逝 
#195.250 501.749 197.244

## 测试scaledata数据
expr <- as.matrix(sc@assays$RNA@scale.data)
system.time({res.scaledata = gsva(expr, genesets, method="ssgsea", parallel.sz=10)}) 
#  用户    系统    流逝 
#63.273 414.530 144.077

## 再次测试scaledata数据
sc2 <- ScaleData(sc, features = rownames(sc))
expr <- as.matrix(sc2@assays$RNA@scale.data)
system.time({res.scaledata2 = gsva(expr, genesets, method="ssgsea", parallel.sz=10)}) 
#   用户    系统    流逝 
#235.689 721.989 272.767

从上面记录的运行时间来看,scale.data数据CPU的计算时间(63.273s)相比counts和data数据快了不少,这是因为默认的scale.data数据只有2000个基因。对所有基因scale之后再次测试scale.data数据,CPU的计算时间变成了235.689s,相比counts数据和data数据没有任何优势。

小结:scale.data数据并不能加快GSVA的运行时间

分析结果对比

为了客观地对比不同数据运行GSVA之后的差异,我用pearson相关性热图给大家展示。**从左上到右下的对角线代表相同细胞用不同数据运行GSVA分析后结果的相关性。**为了节省计算时间,我只取了前100个细胞计算相关性。

1、counts数据与data数据的结果对比,相同细胞的pearson相关性等于1,说明运行结果完全相同。

2、counts数据与2000个基因的scale.data数据的结果对比,相同细胞的pearson相关性很低。

3、counts数据与所有基因的scale.data数据的结果对比,相同细胞的pearson相关性不高。

小结:GSVA分析使用counts数据和data数据没有差别,但是使用scale.data数据会影响结果

减少基因数量可行吗?

写这篇推文时我突发奇想:使用高变基因来做GSVA分析可行吗?

代码语言:javascript
复制
# 筛选高变基因运行GSVA
EXPR <- as.matrix(sc@assays$RNA@counts)
for(i in seq(2000, 8000, 2000)){
  HVGs <- FindVariableFeatures(sc, nfeatures = i) %>% VariableFeatures()
  expr <- EXPR[HVGs,]
  res.hvg = gsva(expr, genesets, method="ssgsea", parallel.sz=10)
  coorda <- psych::corr.test(as.data.frame(res.counts[,1:100]), as.data.frame(res.hvg[,1:100]), method="pearson")
  pheatmap::pheatmap(coorda$r, cluster_rows = F, cluster_cols = F, display_numbers = F, show_rownames = F, 
                     show_colnames = F, filename = paste0("AllGenes_vs_",i,"HVGs.png"), width = 8, height = 7)
}

原始表达矩阵与2000高变基因表达矩阵的GSVA结果相关性

原始表达矩阵与4000高变基因表达矩阵的GSVA结果相关性

原始表达矩阵与6000高变基因表达矩阵的GSVA结果相关性

原始表达矩阵与8000高变基因表达矩阵的GSVA结果相关性

小结:不能使用高变基因的表达矩阵代替原始表达矩阵做GSVA分析

交流探讨:如果您阅读此文有所疑惑,或有不同见解,亦或其他单细胞需求,可以点击阅读原文联系。

往期回顾

RNA Velocity and Beyond 系列1—Introduction

scRNA plus||单细胞结合传统测序技术之路

毛囊间充质祖细胞功能障碍导致与年龄相关的脱发

明码标价之转录组常规测序服务(仅需799每个样品)




如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程

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

本文分享自 单细胞天地 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试数据来源
  • 运行时间对比
  • 分析结果对比
  • 减少基因数量可行吗?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档