Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >scRNA分析|单细胞GSVA + limma差异分析-celltype分组?样本分组?

scRNA分析|单细胞GSVA + limma差异分析-celltype分组?样本分组?

作者头像
生信补给站
发布于 2023-08-25 02:01:18
发布于 2023-08-25 02:01:18
2.1K06
代码可运行
举报
文章被收录于专栏:生信补给站生信补给站
运行总次数:6
代码可运行

单细胞数据完成差异分析后,可以根据结果进行后续的GO ,KEGG,GSEA富集分析,推荐使用clusterProfiler-R包,可参考 R|clusterProfiler-富集分析 clusterProfiler|GSEA富集分析及可视化

此外还可以进行GSVA分析,基因集变异分析即GSVA(Gene set variation analysis), 是一种非参数、无监督的分析方法,可以分析 不同的目标基因集 在不同样本中的富集程度。

输入文件比较简单,只需要 A:表达量矩阵 和 B:目标基因集 即可分析。

一 载入R包 数据

1, 获取表达矩阵

如果想计算celltype的GSVA结果,可以使用 AverageExpression 函数计算 不同celltype之间的表达量均值矩阵;

如果计算每个细胞的GSVA结果,直接提取表达量矩阵即可;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(Seurat) 
#source("http://bioconductor.org/biocLite.R")
#biocLite("GSVA"library(GSVA)
library(tidyverse)
library(org.Hs.eg.db)

#加载单细胞数据
load("sce.anno.RData")

#计算各celltype的表达量均值
Idents(sce2) <- "Anno" 
expr <- AverageExpression(sce2, assays = "RNA", slot = "data")[[1]]
expr <- expr[rowSums(expr)>0,]  #过滤细胞表达量全为零的基因
expr <- as.matrix(expr)
head(expr)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                  Epi   Fibroblast         un           T      Endo     Myeloid
OR4F5      2.762724e-04 0.0000000000 0.00000000 0.000000000 0.0000000 0.000000000
AL627309.1 4.399548e-02 0.0080237642 0.01036203 0.007629199 0.0000000 0.047063397
AL627309.5 0.000000e+00 0.0008855168 0.00000000 0.000000000 0.0000000 0.000000000
AP006222.2 1.068307e-01 0.2828329948 0.12706163 0.050051575 0.1942506 0.244211331
LINC01409  1.299390e-04 0.0005598456 0.00000000 0.000000000 0.0000000 0.000000000
FAM87B     7.746596e-05 0.0026794766 0.02404758 0.000000000 0.0000000 0.001711278
单细胞表达量多为0,可以先过滤一下在所有细胞中均无表达的基因。
2,获取目标基因集

根据自己的需要选择MSigDB数据库中的基因集

2.1 手动下载

进入http://www.gsea-msigdb.org/gsea/msigdb/index.jsp后选择需要下载的基因集,然后使用R读取下载好的gmt格式的文件。

2.2 msigdbr包

直接使用msigdbr包内置好的基因集,含有多个物种 以及 多个基因集,通过参数选择物种以及数据集,较为方便。推荐!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(msigdbr)
msigdbr_species() #列出有的物种

#选择基因集合
human_KEGG = msigdbr(species = "Homo sapiens", #物种
                      category = "C2",
                     subcategory = "KEGG") %>% 
  dplyr::select(gs_name,gene_symbol)#这里可以选择gene symbol或者ID
human_KEGG_Set = human_KEGG %>% split(x = .$gene_symbol, f = .$gs_name)#list
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# A tibble: 20 × 2
   species_name                    species_common_name                                                    
   <chr>                           <chr>                                                                  
 1 Anolis carolinensis             Carolina anole, green anole                                            
 2 Bos taurus                      bovine, cattle, cow, dairy cow, domestic cattle, domestic cow, ox, oxen
 3 Caenorhabditis elegans          NA                                                                     
 4 Canis lupus familiaris          dog, dogs                                                              
 5 Danio rerio                     leopard danio, zebra danio, zebra fish, zebrafish                      
 6 Drosophila melanogaster         fruit fly                                                              
 7 Equus caballus                  domestic horse, equine, horse                                          
 8 Felis catus                     cat, cats, domestic cat                                                
 9 Gallus gallus                   bantam, chicken, chickens, Gallus domesticus                           
10 Homo sapiens                    human                                                                  
11 Macaca mulatta                  rhesus macaque, rhesus macaques, Rhesus monkey, rhesus monkeys         
12 Monodelphis domestica           gray short-tailed opossum                                              
13 Mus musculus                    house mouse, mouse                                                     
14 Ornithorhynchus anatinus        duck-billed platypus, duckbill platypus, platypus                      
15 Pan troglodytes                 chimpanzee                                                             
16 Rattus norvegicus               brown rat, Norway rat, rat, rats                                       
17 Saccharomyces cerevisiae        baker's yeast, brewer's yeast, S. cerevisiae                           
18 Schizosaccharomyces pombe 972h- NA                                                                     
19 Sus scrofa                      pig, pigs, swine, wild boar                                            
20 Xenopus tropicalis              tropical clawed frog, western clawed frog

A:如果你的研究是其中的物种就可以无缝做GSEA 和 GSVA了。

B:如果研究的物种不在其中,也可以自定义基因集,注意转为对应的形式。human_KEGG_Set 为基因集合的列表形式。

二 GSVA分析

1, GSVA分析

数据准备好后,加载GSVA包,一个gsva函数就可以得到GSVA的结果了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(GSVA)
gsva.kegg <- gsva(expr, gset.idx.list = human_KEGG_Set, 
             kcdf="Gaussian",
             method = "gsva",
             parallel.sz=1)
head(gsva.kegg)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                             Epi     Myeloid Fibroblast           T        Endo         un
KEGG_ABC_TRANSPORTERS                           -0.30909556 -0.38967397 -0.4080869 -0.36390157 -0.23292000 -0.2954922
KEGG_ACUTE_MYELOID_LEUKEMIA                     -0.51620884  0.03252670 -0.4041246  0.15837659  0.27282853 -0.3265242
KEGG_ADHERENS_JUNCTION                          -0.25225184 -0.24621834 -0.1800216 -0.35910806  0.12149392 -0.2252523
KEGG_ADIPOCYTOKINE_SIGNALING_PATHWAY            -0.49448870 -0.13413340 -0.4633362 -0.24019340 -0.12668157 -0.3430883
KEGG_ALANINE_ASPARTATE_AND_GLUTAMATE_METABOLISM  0.03912373 -0.25381877 -0.3541902 -0.03168169 -0.38696763  0.3222462
KEGG_ALDOSTERONE_REGULATED_SODIUM_REABSORPTION  -0.28822490  0.07870691 -0.2787129  0.05187873 -0.03042265  0.1007009

行为目标基因集,列为celltype ,数值为gsva分数。

这里需要注意,如果输入矩阵为log转化后的连续表达矩阵指则设置kcdf参数为"Gaussian",如果是counts矩阵则设置kcdf为"Poisson"

2, 绘制热图

以结果的前20个绘制示例热图,可以自选择重点的通路

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(pheatmap)
pheatmap(gsva.kegg[1:20,], show_colnames = T, 
         scale = "row",angle_col = "45",
         cluster_row = T,cluster_col = T,
         color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
3, limma差异分析

和正常的转录组差异分析一样,构建分组信息 以及 比较矩阵,然后使用limma进行差异分析。

此处分析 注释出来的5种celltype 和 注释为unknown之间的差异GSVA结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(limma)
# 构建分组文件
group_list <- data.frame(celltype = colnames(gsva.kegg), group = c(rep("con", 5), rep("case", 1)))

design <- model.matrix(~ 0 + factor(group_list$group))
colnames(design) <- levels(factor(group_list$group))
rownames(design) <- colnames(gsva.kegg)

# 构建差异比较矩阵
contrast.matrix <- makeContrasts(con-case, levels = design)

# 差异分析,case vs. con
fit <- lmFit(gsva.kegg, design)
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
diff <- topTable(fit2, coef = 1, n = Inf, adjust.method = "BH", sort.by = "P")
head(diff)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                                       logFC      AveExpr         t    P.Value adj.P.Val         B
KEGG_RIBOSOME                                             -0.7314315 -0.240532302 -2.289899 0.03492937 0.9966699 -4.382757
KEGG_ALANINE_ASPARTATE_AND_GLUTAMATE_METABOLISM           -0.5197531 -0.110881401 -2.100093 0.05077169 0.9966699 -4.418969
KEGG_MATURITY_ONSET_DIABETES_OF_THE_YOUNG                 -0.5827932 -0.078191940 -1.986597 0.06314026 0.9966699 -4.440295
KEGG_PHENYLALANINE_METABOLISM                             -0.4828199 -0.125947781 -1.888280 0.07597847 0.9966699 -4.458485
KEGG_ARRHYTHMOGENIC_RIGHT_VENTRICULAR_CARDIOMYOPATHY_ARVC -0.4559099 -0.080461313 -1.826270 0.08522283 0.9966699 -4.469792
KEGG_FOLATE_BIOSYNTHESIS                                  -0.4870146 -0.004848985 -1.811745 0.08752649 0.9966699 -4.472419
4, GSVA差异结果可视化
文章中常见的为双向的柱形图,需要先进行一些设置:

(1)根据logFC 和 adj.P.Val 参数设置,确定上调 ,下调 。为展示结果,以下参数较离谱 ,无参考价值。

实际项目多设置为logFC > 0 & adj.P.Val < 0.05;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#设置分组
diff$group <- ifelse( diff$logFC > 0 & diff$P.Value < 0.3 ,"up" ,
  ifelse(diff$logFC < 0 & diff$P.Value < 0.3 ,"down","noSig")
)

(2)设置label的位置

本示例中过滤掉了不显著的通路,在filter行首添加#注释掉即不进行过滤

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff2 <- diff %>% 
  mutate(hjust2 = ifelse(t>0,1,0)) %>% 
  mutate(nudge_y = ifelse(t>0,-0.1,0.1)) %>% 
  filter(group != "noSig") %>% #注释掉该行即可
  arrange(t) %>% 
  rownames_to_column("ID")

(3)通过factor设置展示顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diff2$ID <- factor(diff2$ID, levels = diff2$ID)
limt = max(abs(diff2$t))

(4)ggplot2 可视化展示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(diff2, aes(ID, t,fill=group)) + 
  geom_bar(stat = 'identity',alpha = 0.7) + 
  scale_fill_manual(breaks=c("down","up"), #设置颜色
                    values = c("#008020","#08519C"))+
  geom_text(data = diff2, aes(label = diff2$ID, #添加通路标签
                              y = diff2$nudge_y),
            nudge_x =0,nudge_y =0,hjust =diff2$hjust,
            size = 3)+ #设置字体大小
  labs(x = "KEGG pathways", #设置标题 和 坐标
       y=paste0("t value of GSVA score\n","celltype-unknown"),
       title = "GSVA")+
  scale_y_continuous(limits=c(-limt,limt))+
  coord_flip() + 
  theme_bw() + #去除背景色
  theme(panel.grid =element_blank(), #主题微调
        panel.border = element_rect(size = 0.6),
        plot.title = element_text(hjust = 0.5,size = 18),
        axis.text.y = element_blank(),
        axis.title = element_text(hjust = 0.5,size = 18),
        axis.line = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "none" #去掉legend
  )

三 GSVA 样本分组

1, 表达量文件
如果是按照样本分组的话就无需计算每个celltype的表达量均值,直接使用每个细胞的表达量;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
expr2 <- as.matrix(sub@assays$RNA@data)
gsva.kegg2 <- gsva(expr2, gset.idx.list = keggSet, kcdf="Gaussian",method = "gsva",
             parallel.sz=1)

2, 分组文件

分组文件因为是每个barcode的粒度,在metadata中构建分组列信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#之前定义过分组信息
sce2@meta.data$group <- ifelse( grepl("MET",sce2@meta.data$sample ) ,"MET" ,"PT" )
group_list2 <- sce2@meta.data[,c("group")]

#标准limma分析
design <- model.matrix(~0+factor(group_list2))
colnames(design)=levels(factor(group_list2))
rownames(design)=colnames(expr)

contrast.matrix<-makeContrasts(contrasts = "MET-PT",levels = design)

fit <- lmFit(gsva.kegg2,design)
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
diff2 <- topTable(fit2, coef = 1, n = Inf, adjust.method = "BH", sort.by = "P")

好了,单细胞GSVA分析完成 ,处理数据以及代码都不复杂。

◆ ◆ ◆ ◆ ◆

精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)

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

本文分享自 生信补给站 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
单细胞测序—标准分析流程(4)—GSEA与GSVA
https://github.com/rcastelo/GSVA/issues/172
sheldor没耳朵
2024/09/05
1.1K0
单细胞测序—标准分析流程(4)—GSEA与GSVA
RNA-seq入门实战(八):GSVA——基因集变异分析
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
9.8K0
RNA-seq入门实战(八):GSVA——基因集变异分析
单细胞miloR分析(基于 KNN 图的细胞差异丰度分析方法)
通常情况下,对两组或多组样本进行了不同处理/干预之后,研究者首先会进行同种细胞亚群处理前后的细胞数量的比较,但在单细胞分辨率时代之后,即使是同一个亚群中的不同细胞也应当看成不同的样本。
凑齐六个字吧
2024/09/29
2.3K0
单细胞miloR分析(基于 KNN 图的细胞差异丰度分析方法)
单细胞GSVA分析专用R包
之前我们介绍过irGSEA:基于秩次的单细胞基因集富集分析整合框架,针对17种常见的Functional Class Scoring (FCS)方法进行了benchmark,感兴趣的可以仔细读一下。最近恰好看到了密西根大学的Research Assistant Professor Neurology的Kai Guo的github也有一个打分工具:https://github.com/guokai8/scGSVA ,也值得介绍一下:
生信技能树
2024/11/21
2580
单细胞GSVA分析专用R包
单细胞各个亚群基因按照平均表达量排序后gsea分析
如果一定要做gsea或者gsva这样的给基因集合打分,也有几个补救措施,比如把单细胞表达量矩阵进行缺失值插补,或者把单细胞表达量矩阵构建成为metacell矩阵。不过,最简单的方法是把单细胞表达量矩阵按照各个亚群来进行表达量平均,我们以大家熟知的pbmc3k数据集为例,大家先安装这个数据集对应的包 SeuratData,并且对它进行降维聚类分群,参考前面的例子:人人都能学会的单细胞聚类分群注释 ,而且每个亚群找高表达量基因,都存储为Rdata文件。标准代码是:
生信技能树
2023/02/28
1.3K0
单细胞各个亚群基因按照平均表达量排序后gsea分析
单细胞实战之pseudobulks分析,GSVA富集分析——入门到进阶(初级篇3)
我们在上一讲内容中学习了“矫正”数据的三个工具~ 分别为细胞周期矫正,去除双胞体和RNA污染。接下来我们再来学习一下pseudobulks分析、GSVA富集分析。初级篇2最后得到的工程文件通过网盘分享:初级篇2 链接: https://pan.baidu.com/s/1ETVEkJNCJSe9NU7_aLEPVA 提取码: znmb
凑齐六个字吧
2025/02/14
1820
单细胞实战之pseudobulks分析,GSVA富集分析——入门到进阶(初级篇3)
生物信息数据分析教程视频——13-3种R包(DESeq2、edgeR和limma)进行RNAseq的差异表达分析与比较
视频地址:http://mpvideo.qpic.cn/0bc3zeaakaaalqalwhjtmzrvbsodaxeqabia.f10002.mp4? 参考文章: 超详细的DESeq2和edg
DoubleHelix
2022/12/15
1.4K0
生物信息数据分析教程视频——13-3种R包(DESeq2、edgeR和limma)进行RNAseq的差异表达分析与比较
scRNA|ComplexHeatmap自定义单细胞转录组celltype-level 热图可视化
使用之前注释过的sce.anno.RData数据 ,后台回复 anno 即可获取
生信补给站
2023/09/26
2K1
scRNA|ComplexHeatmap自定义单细胞转录组celltype-level 热图可视化
文献复现-单细胞揭示新辅助治疗后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的免疫微环境变化
【画图】如何画火山图?
如果你不喜欢敲代码可以按照下面的链接在线完成 2分钟!使用小站工具,就能用鼠标点出火山图和GSEA图~回复:我要测试。领取测试数据玩起来吧~
Chris生命科学小站
2023/02/28
7390
【画图】如何画火山图?
limma差异分析,谁和谁比很重要吗?
新手在刚接触limma包做差异分析的时候,会碰到很多教程,有的教程写的是正常组比疾病组,有的是疾病组比正常组,他们都是对的,只有你凌乱了。
医学和生信笔记
2022/11/15
1.2K0
limma差异分析,谁和谁比很重要吗?
药物预测之差异基因为什么不行
现在可以尝试一下理解药物预测的原理啦,首先呢在前面的教程 药物预测之相关性为什么不行,我们发现简简单单的表达量相关性居然都可以勉勉强强得到还算是合理的结果啊!现在让我们一起看看差异基因能不能进行药物预测!
生信技能树
2021/10/12
1.5K0
顶刊杂志Nat Med.(IF=58.7)同款GSVA打分结果可视化
这个打分的双向条形图我印象中最深的是他出现在2018年8月24发表在顶刊杂志Nat Med.(IF=58.7)中,文献的标题为《Phenotype molding of stromal cells in the lung tumor microenvironment》,长得很好看:
生信技能树
2025/04/01
2270
顶刊杂志Nat Med.(IF=58.7)同款GSVA打分结果可视化
GEO数据挖掘7
GSVA分析,gene Set Variation Analysis,被称为基因集变异分析,是一种非参数的无监督分析方法,用来评估芯片核转录组的基因集富集结果。 思路
火星娃统计
2020/09/15
1.5K0
GEO数据挖掘7
复现单细胞结合常规转录组的Nat Med文章数据挖掘部分
英文标题:High systemic and tumor-associated IL-8 correlates with reduced clinical benefit of PD-L1 blockade
生信菜鸟团
2023/08/23
7220
复现单细胞结合常规转录组的Nat Med文章数据挖掘部分
差异分析|DESeq2完成配对样本的差异分析
前段时间拿到一个RNA-seq测序数据(病人的癌和癌旁样本,共5对)及公司做的差异分析结果(1200+差异基因),公司告知用的是配对样本的DESeq分析。
生信补给站
2021/03/03
7.2K6
差异分析|DESeq2完成配对样本的差异分析
GEO数据挖掘—GSE5883(基于时间序列)
之前把GSE5883数据集按照普通二分组进行分析的,参考GEO数据挖掘-GSE5883
sheldor没耳朵
2024/07/24
1680
GEO数据挖掘—GSE5883(基于时间序列)
PGSEA和GSVA你会怎么选择呢?
it tests for each sample whether the average expression of genes in a gene sets deviates from the overall average expression (expression of all genes in all samples).
生信技能树
2018/07/27
1.3K0
获取KEGG通路的基因列表 做单细胞GSEA、GSVA分析
使用KEGG通路的基因列表进行单细胞GSEA GSVA分析的过程,我们需要遵循以下步骤:
生信小博士
2024/03/22
9230
获取KEGG通路的基因列表   做单细胞GSEA、GSVA分析
带有疾病进展的多分组差异结果如何展示?
此次给绘制的图来自文献《Triple DMARD treatment in early rheumatoid arthritis modulates synovial T cell activation and plasmablast/plasma cell differentiation pathways》,是2017发表的,使用了他们团队自己2016发表的转录组测序数据,所以其实是有两个转录组测序数据集。
生信技能树
2025/01/02
2010
带有疾病进展的多分组差异结果如何展示?
推荐阅读
相关推荐
单细胞测序—标准分析流程(4)—GSEA与GSVA
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验