2023-05-21-单细胞 KEGG选取特定通路的基因集做GSVA分析

事先声明,这是随笔,着重记录思路、踩坑以及解决过程,以记录自己的学习和之后可能需要复现。

首先推荐阅读几篇教程,以了解需要做什么:

Pathway通路与GSEA基因集有何区别?

单细胞中应该如何做GSVA?

GSVA: gene set variation analysis-安装

1.GSVA的安装

我使用Bioconductor安装,非常方便。


2.获取选定通路的基因集

(这里不确定自己使用的最简单的方法,方法来自如下:

KEGG通路数据库下载(人种)-BeeBee生信

这个代码可以放心跑,虽然看起来很长,但是用自己的电脑也可以跑通。有一步需要的时间比较长,耐心等待即可。解析如下:

2.1 首先需要下载两个R包,但通常情况下可能已经装载在R里面了,因此直接library一手先。没有的话去装包,都很好装。

 library(KEGGREST, quietly = TRUE)
 
 library(tidyverse, quietly = TRUE)

2.2 之后加载推文里的函数

 # keggGet(x)[[1]]$GENE 数据基因名是个向量,其中奇数位置是 entrezgene_id 偶数位置是 symbol
 
 geneEntrez <- function(x){
 
   geneList <- keggGet(x)[[1]]$GENE
 
   if(!is.null(geneList)){
 
     listLength <- length(geneList)
 
     entrezList <- geneList[seq.int(from = 1, by = 2, length.out = listLength/2)]
 
     entrez <- stringr::str_c(entrezList, collapse = ",")
 
     return(entrez)
 
   }else{
 
     return(NA)
 
   }
 
 }

keggGet(x)[[1]]$GENE 数据基因名是个向量,其中奇数位置是 entrezgene_id 偶数位置是 symbol

geneSymbol <- function(x){

  geneList <- keggGet(x)[[1]]$GENE

  if(!is.null(geneList)){

    listLength <- length(geneList)

    symbolList <- geneList[seq.int(from = 2, by = 2, length.out = listLength/2)] %% map_chr(symbolOnly)

    symbol <- stringr::str_c(symbolList, collapse = ",")

    return(symbol)

  }else{

    return("")

  }

}
 # 取得 hsaxxxxx 这种通路ID
 pathwayID <- function(x){
 
   items <- strsplit(x, ":", fixed = TRUE) %% unlist()
 
   return(items[2])
 
 }

2.3 正式获取通路部分

建议从这里开始读脚本。建议自己在交互模式下试一下用到的KEGGREST函数,看看返回数据的结构。

1.这是第一步,取得所有的KEGG通路列表

 hsaList <- keggList("pathway", "hsa")
 
 IDList <- names(hsaList) %% map_chr(pathwayID)

2. 将通路ID和通路名放在一个表格(tibble)里

 hsaPathway <- tibble::tibble(pathway_id=IDList, pathway_name=hsaList)
 
 head(hsaPathway, n=3) %% print()

3. 用前面定义函数,获得每个通路的基因,然后也放在表格里

pathwayFull <- hsaPathway %% dplyr::mutate(entrezgene_id=map_chr(pathway_id, geneEntrez), hgnc_symbol=map_chr(pathway_id, geneSymbol))

4.查看数据维度

dim(pathwayFull) %% print()

5.会有通路没有基因,我的话只需要有基因的,所以把无基因的移除

pathwayWithGene <- dplyr::filter(pathwayFull, !is.na(entrezgene_id) & hgnc_symbol != "")

write_tsv(pathwayWithGene, path="KEGGREST_WithGene.tsv")

dim(pathwayWithGene) %% print()

所以最后得到的应该是pathwayWithGene这个变量!


3. 选定需要的通路,输入关键字,记录下pathway_id

3.1 View(pathwayWithGene) 内容如下

image

3.2 选取自己需要的通路成为新的变量

例如:c("hsa04350", "hsa04310", "hsa04014", "hsa04390", "hsa04330","hsa04110","hsa04151","hsa04115"),输入代码:

 pathwayWithGene_select <- pathwayWithGene[c("hsa04350", "hsa04310",
 "hsa04014", "hsa04390", "hsa04330","hsa04110","hsa04151","hsa04115"),]
image

3.3 将通路写成gsva函数所需要的列表形式

 genelist <- list()
 
 for (i in seq(length(unique(pathwayWithGene_select$pathway_id)))){
 
   genelist[i] <- pathwayWithGene_select$hgnc_symbol[i]
 
 }
 
 names(genelist) <- paste0("gs",c(1:length(unique(pathwayWithGene_select$pathway_id))))
 
 save(genelist, file = "./genelist.RData")

结果如下:

image

到这里,已经完成了一半的工作,但是这个还是不能用,因为参照正常的数据集是这样的:

image

因此需要对我们的基因集进行改造:

一行函数轻松搞定,比较吃基本功!

genelist_2 <- lapply(genelist,function(x) unlist(strsplit(x,split = ",")))
image

4. 进行GSVA分析

4.1 首先取单细胞的表达量数据集

一定要是matrix格式的!

 gene.expr <- as.matrix(sce_cnv[["RNA"]]@data)

进行分析

gsva.result <- GSVA::gsva(gene.expr, genelist_2,kcdf='Gaussian')

首先转换为数据框格式,之后保存结果

 gsva.result_df <- as.data.frame(gsva.result)
 
 save(gsva.result_df,file = "./gsva.result_df.RData")

4.2 可以对GSVA Score进行做热图等相关分析

……

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容