ssGSEA -- 学习记录

文章目录

biref

前情提要链接:

https://blog.csdn.net/jiangshandaiyou/article/details/136536349

https://blog.csdn.net/jiangshandaiyou/article/details/134457515


相比起GSA,GSEA不再关注于差异基因,因此不受p-value以及log2FC的指标的过滤影响,可以获得更多生物学功能变化的信息。但是呢需要多个样本的测序数据才能得到与表型相关的排序数据,如果我只有一个样本呢?或者我的样本没有先验的表型区分呢(也就是没法分组)?

ssGSEA说我可以。ssGSEA是单样本的GSEA,对于一个基因集S,每一个样本都可以计算得到一个enrichment score。

也就是说其实我们可以从一个多样本的表达矩阵得到另一个矩阵,行是多个不同的基因集S,列仍然是样本,值则是ES。

Barbie DA, Tamayo P, Boehm JS, et al. Systematic RNA interference reveals that oncogenic KRAS-driven cancers require TBK1. Nature. 2009;462(7269):108-112. doi:10.1038/nature08460

统计学原理

需要补充的基础知识:

https://blog.csdn.net/jiangshandaiyou/article/details/136545010

其他注意事项

  • GSEA与ssGSEA几乎一模一样,它们都需要对所有基因进行排序得到一个ranked gene list ;
    都运用了k-s like test评估基因集S中的基因与S外的基因的分布是否不同,
    虽然是思想是一模一样的,但是统计量的计算不同。
  • 在GSEA中,基因的是按照log2FC从大到小排列,而在ssGSEA中,对于单个样本,将基因按照其表达量从大到小排序。也就是每个样本都是一个独特他的ranked gene list。
  • K-s like test中的eCDF阶梯上升高度所依赖的值不同。
    在GSEA中,最后基因集S中基因的阶梯上升高度依赖于log2FC的加权值
    而在ssGSEA中,为了消除异常值对结果的影响,在第一步排序基因后,会将表达量用秩次(rank)替换
    比如说一个样本有100个基因的信息,先按照基因表达量排好序后,这个genelist对应的值是基因的表达量,然后经过秩次标准化转换后,这个genelist已经由表达量的降序排列变成了100,99,98,...,3,2,1。
    也就是原文L中的r1,r2 ,r3 ,...,rN。所以最后基因集S中的基因的阶梯上升高度依赖于秩次的加权值。

代码实现部分

R 复制代码
# 借助GSVA工具实现
# .libPaths("C:/Users/lenovo/Documents/R/win-library/4.0")
library(tidyverse)
library(reshape2)
library(cowplot)
library(RColorBrewer)
library(GSVA)

options(warn = -1)
options(digits = 5)


# 准备表达矩阵
list.files("G:/20240223-project-HY0007-GSVA-analysis-result/")

expr <- read.table("../TPM_DE.filter.txt",sep = "\t",header = T,row.names = 1)
head(expr)
expr <- as.matrix(expr) # 需要转换成matrix或者 ExpressionSet object

# 准备预设的gene sets
# install.packages("msigdbr")
library(msigdbr)
## msigdbr包提取下载 先试试KEGG和GO做GSVA分析
##KEGG
KEGG_df_all <-  msigdbr(species = "Homo sapiens", # Homo sapiens or Mus musculus
                        category = "C2",
                        subcategory = "CP:KEGG") 
KEGG_df <- dplyr::select(KEGG_df_all,gs_name,gs_exact_source,gene_symbol)
kegg_list <- split(KEGG_df$gene_symbol, KEGG_df$gs_name) ##按照gs_name给gene_symbol分组

##GO
GO_df_all <- msigdbr(species = "Homo sapiens",
                     category = "C5")
GO_df <- dplyr::select(GO_df_all, gs_name, gene_symbol, gs_exact_source, gs_subcat)
GO_df <- GO_df[GO_df$gs_subcat!="HPO",]
go_list <- split(GO_df$gene_symbol, GO_df$gs_name) ##按照gs_name给gene_symbol分组

####  GSVA  ####
# geneset 1
geneset <- go_list
gsva_mat <- gsva(expr=expr, 
                 gset.idx.list=geneset, 
                 kcdf="Gaussian" ,#"Gaussian" for logCPM,logRPKM,logTPM, "Poisson" for counts
                 verbose=T, 
                 mx.diff =TRUE,# 下游做limma得到差异通路
                 min.sz = 10, # gene sets 少于10个gene的过滤掉
                 method = "ssgsea"# method=c("gsva", "ssgsea", "zscore", "plage")
                 )

write.csv(gsva_mat,"gsva_go_matrix.csv")

# geneset 2
geneset <- kegg_list
gsva_mat <- gsva(expr=expr, 
                 gset.idx.list=geneset, 
                 kcdf="Gaussian" ,#"Gaussian" for logCPM,logRPKM,logTPM, "Poisson" for counts
                 verbose=T, 
                 mx.diff =TRUE,# 下游做limma得到差异通路
                 min.sz = 10, # gene sets 少于10个gene的过滤掉
                 method = "ssgsea"# method=c("gsva", "ssgsea", "zscore", "plage")
)

write.csv(gsva_mat,"gsva_kegg_matrix.csv")


相关推荐
鸡鸭扣2 天前
生信:TCGA学习(R、RStudio安装与下载、常用语法与常用快捷键)
生物信息学·r·生信·rstudio
99WOODYXIN12 天前
生物信息学R语言
r
GarsonW12 天前
R使用ggplot实现基础数据可视化
信息可视化·数据挖掘·数据分析·数据可视化·r
QH_ShareHub2 个月前
使用源代码编译R包的过程
编译·r·r包安装
临床数据科学和人工智能兴趣组3 个月前
R语言中的命名规则
r语言·r·命名
临床数据科学和人工智能兴趣组3 个月前
用R语言进行绝对值运算、平方根运算和三角函数运算
数据挖掘·数据分析·r语言·r·三角函数·运算
临床数据科学和人工智能兴趣组3 个月前
用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用
信息可视化·数据挖掘·数据分析·r语言·r·数据清理
临床数据科学和人工智能兴趣组3 个月前
4章7节:用R做数据重塑,数据去重和数据的匹配
数据清洗·数据科学·r·数据去重·数据重塑·数据匹配
临床数据科学和人工智能兴趣组3 个月前
R语言里认识机器学习
人工智能·笔记·机器学习·数据挖掘·数据分析·r语言·r
临床数据科学和人工智能兴趣组3 个月前
脱胎于 S 语言的R语言,Ross Ihaka 和 Robert Gentleman 和社区的力量让 R 在学术界与研究机构放光彩
r语言·r