跳转至

基因集变异分析GSVA(ssGSEA/GSVA/AUCell打分与免疫浸润估计)

一句话概述

基因集变异分析(GSVA)是一类将基因水平的表达数据转化为基因集/通路水平的活性评分的无监督方法,包括GSVA、ssGSEA、AUCell等算法,广泛应用于通路活性评估、免疫浸润估计、肿瘤微环境表征等生物信息学分析中。


核心知识点表格

知识点说明
GSVAGene Set Variation Analysis,基于密度估计的基因集变异分析
ssGSEAsingle-sample GSEA,单样本基因集富集分析
AUCellArea Under the Curve,基于排名曲线面积的打分方法
基因集打分将高维基因表达转为低维通路/模块活性分数
MSigDBMolecular Signatures Database,基因集数据库
HallmarkMSigDB中50条高质量标志性通路
免疫浸润利用基因集打分估计肿瘤中免疫细胞组成比例
ESTIMATEEstimation of STromal and Immune cells,用基因特征估计肿瘤纯度和免疫浸润
归一化不同算法输出的分数范围和含义不同,需注意可比性
基因集来源MSigDB/KEGG/GO/自定义/免疫细胞signature

各步骤详解

第一步:基因集打分方法的原理与对比

白话解释: 假设你有1000个学生(基因)的考试成绩(表达量),现在想知道每个班级(基因集/通路)的整体表现如何。基因集打分方法就是把单个基因的信息汇总成一个"班级分数",这样就可以比较不同班级(通路)在不同学校(样本)之间的差异。

技术细节:

方法原理输出范围特点
GSVA非参数密度估计+KS-like统计量约[-1, 1]最常用,适合微阵列和RNA-seq
ssGSEA基因排名的加权KS统计量无固定范围GSEA的单样本扩展
AUCell排名曲线下面积[0, 1]适合稀疏数据(单细胞)
z-score基因集内基因z分数的均值无固定范围最简单
PLAGESVD第一主成分无固定范围适合相关基因集

GSVA算法核心步骤: 1. 每个样本内对基因表达值排名 2. 用核密度估计转换为CDF(累积分布函数) 3. 计算基因集内基因的富集分数(类似GSEA的走步统计量) 4. 输出每个样本的每个基因集的分数

ssGSEA算法: 1. 每个样本内按表达值降序排列所有基因 2. 对每个基因集,计算加权的"走步"统计量 3. 权重与排名相关(排名靠前的基因贡献更大)

AUCell算法: 1. 每个细胞/样本内按表达值排名 2. 只看前X%的基因(如前5%或前1500个基因) 3. 计算基因集中基因在Top排名中的AUC 4. AUC高说明该基因集中有更多基因高度表达

第二步:基因集数据库准备

白话解释: 打分之前,需要准备"评分标准"——即定义好哪些基因属于哪个通路/功能模块。这些基因集可以来自公共数据库(如MSigDB),也可以根据文献自定义。

# ===== 安装和加载 =====
BiocManager::install(c("GSVA", "GSEABase", "msigdbr"))
library(GSVA)
library(GSEABase)
library(msigdbr)

# ===== 从MSigDB获取基因集 =====
# 获取Hallmark基因集(人类)
hallmark <- msigdbr(species = "Homo sapiens", category = "H")
# 转换为列表格式
hallmark_list <- split(hallmark$gene_symbol, hallmark$gs_name)
length(hallmark_list)  # 50个Hallmark通路
head(names(hallmark_list))

# 获取KEGG通路
kegg <- msigdbr(species = "Homo sapiens", category = "C2", subcategory = "CP:KEGG")
kegg_list <- split(kegg$gene_symbol, kegg$gs_name)

# 获取GO Biological Process
gobp <- msigdbr(species = "Homo sapiens", category = "C5", subcategory = "GO:BP")
gobp_list <- split(gobp$gene_symbol, gobp$gs_name)

# 获取免疫相关基因集(C7: immunologic signatures)
immuno <- msigdbr(species = "Homo sapiens", category = "C7")
immuno_list <- split(immuno$gene_symbol, immuno$gs_name)

# ===== 自定义基因集 =====
# 例如:免疫细胞标记基因集
immune_signatures <- list(
  CD8_T_cells = c("CD8A", "CD8B", "GZMK", "GZMA", "PRF1", "IFNG"),
  CD4_T_cells = c("CD4", "IL7R", "TCF7", "LEF1", "CCR7"),
  B_cells = c("CD19", "MS4A1", "CD79A", "CD79B", "BLK"),
  NK_cells = c("NKG7", "KLRD1", "KLRB1", "GNLY", "NCR1"),
  Macrophages = c("CD68", "CD163", "CSF1R", "MSR1", "MRC1"),
  Dendritic_cells = c("CD1C", "CLEC10A", "FCER1A", "ITGAX"),
  Tregs = c("FOXP3", "IL2RA", "CTLA4", "TNFRSF18", "IKZF2")
)

# ===== 从GMT文件读取 =====
# gmt_file <- getGmt("geneset.gmt")
# gmt_list <- geneIds(gmt_file)

第三步:GSVA分析

白话解释: 把准备好的基因集和表达矩阵一起交给GSVA算法,它会为每个样本计算每个通路的活性分数。得到的是一个"通路×样本"矩阵,可以像分析基因表达一样分析通路活性。

# ===== GSVA打分 =====
library(GSVA)

# 准备表达矩阵(行=基因,列=样本)
# RNA-seq counts数据建议先做log变换或使用vst
expr_matrix <- as.matrix(expr_data)  # 确保是矩阵

# 创建GSVA参数对象(GSVA v1.50+新接口,v1.52+旧接口已废弃不可用)
# 对于RNA-seq数据(log-CPM或TPM)
gsva_param <- gsvaParam(
  exprData = expr_matrix,
  geneSets = hallmark_list,
  kcdf = "Gaussian",          # 对连续数据用Gaussian核;v2.0+支持"auto"自动选择
  minSize = 10,               # 基因集最小基因数
  maxSize = 500,              # 基因集最大基因数
  maxDiff = TRUE              # TRUE=富集分数有方向性
)

# 对于counts数据(整数)
# gsva_param <- gsvaParam(exprData = count_matrix, geneSets = hallmark_list,
#                          kcdf = "Poisson")

# 运行GSVA
gsva_scores <- gsva(gsva_param)
dim(gsva_scores)  # 通路数 × 样本数

# ===== 旧版GSVA接口(GSVA v1.52+已废弃,v2.0+完全不可用) =====
# 以下写法在新版本中会报错,仅供参考旧代码迁移:
# gsva_scores <- gsva(expr_matrix, hallmark_list,
#                      method = "gsva", kcdf = "Gaussian",
#                      min.sz = 10, max.sz = 500,
#                      parallel.sz = 4)

# ===== 查看结果 =====
head(gsva_scores[, 1:5])

# 热图可视化
library(pheatmap)
# 按分组注释
annotation_col <- data.frame(
  Group = factor(sample_info$Group),
  row.names = colnames(gsva_scores)
)

pheatmap(gsva_scores,
         annotation_col = annotation_col,
         scale = "row",
         clustering_method = "ward.D2",
         show_colnames = FALSE,
         fontsize_row = 6,
         color = colorRampPalette(c("blue", "white", "red"))(100))

第四步:ssGSEA分析

白话解释: ssGSEA是GSEA方法的单样本版本。GSEA需要对比两组才能做,而ssGSEA可以给单个样本打分,因此更灵活。它计算的是每个基因集在该样本中的"富集程度"。

# ===== ssGSEA打分 =====
# 使用GSVA包
ssgseaParam <- ssgseaParam(
  exprData = expr_matrix,
  geneSets = hallmark_list,
  minSize = 10,
  maxSize = 500,
  normalize = TRUE           # 是否归一化分数到[0,1]
)
ssgsea_scores <- gsva(ssgseaParam)

# ===== 或使用旧接口 =====
# ssgsea_scores <- gsva(expr_matrix, hallmark_list,
#                        method = "ssgsea", ssgsea.norm = TRUE)

# ===== 免疫浸润打分(ssGSEA方法) =====
# 使用Charoentong et al. 2017 免疫细胞signature
# 这些signature在很多免疫浸润分析中使用
ssgsea_immune <- gsva(ssgseaParam(
  exprData = expr_matrix,
  geneSets = immune_signatures,
  normalize = TRUE
))

# 可视化免疫浸润模式
pheatmap(ssgsea_immune,
         annotation_col = annotation_col,
         scale = "row",
         clustering_distance_cols = "euclidean",
         main = "Immune Cell Infiltration (ssGSEA)")

# ===== 组间比较 =====
library(limma)
group <- factor(sample_info$Group)
design <- model.matrix(~ 0 + group)
colnames(design) <- levels(group)
contrast <- makeContrasts(Disease - Control, levels = design)

fit <- lmFit(ssgsea_immune, design)
fit2 <- contrasts.fit(fit, contrast)
fit3 <- eBayes(fit2)
results <- topTable(fit3, number = Inf)
sig_pathways <- results[results$adj.P.Val < 0.05, ]
print(sig_pathways)

第五步:AUCell分析(单细胞适用)

白话解释: AUCell特别适合单细胞数据——因为单细胞数据很稀疏(大量零值),传统方法容易受零值影响。AUCell只看表达最高的那一小部分基因中有多少属于目标基因集,因此对零值不敏感。

# ===== AUCell(单细胞场景) =====
BiocManager::install("AUCell")
library(AUCell)

# 准备单细胞表达矩阵(稀疏矩阵也支持)
# sc_matrix: 行=基因, 列=细胞
# 假设sc_matrix已准备好

# 步骤1:构建排名矩阵
cells_rankings <- AUCell_buildRankings(sc_matrix,
                                        nCores = 4,
                                        plotStats = TRUE)

# 步骤2:计算AUC分数
cells_AUC <- AUCell_calcAUC(
  geneSets = immune_signatures,
  rankings = cells_rankings,
  aucMaxRank = nrow(sc_matrix) * 0.05  # 前5%的基因
)

# 步骤3:探索阈值并分配细胞
cells_assignment <- AUCell_exploreThresholds(
  cells_AUC,
  plotHist = TRUE,
  assign = TRUE
)

# 提取AUC分数矩阵
auc_matrix <- getAUC(cells_AUC)
dim(auc_matrix)  # 基因集数 × 细胞数

# 可视化(与Seurat整合)
library(Seurat)
# 假设seurat_obj已创建
for (sig_name in rownames(auc_matrix)) {
  seurat_obj[[sig_name]] <- auc_matrix[sig_name, colnames(seurat_obj)]
}
FeaturePlot(seurat_obj, features = names(immune_signatures), ncol = 3)

# ===== UCell(AUCell的优化版) =====
# UCell更快且直接兼容Seurat
BiocManager::install("UCell")
library(UCell)

# 直接在Seurat对象上打分
seurat_obj <- AddModuleScore_UCell(seurat_obj, features = immune_signatures)
FeaturePlot(seurat_obj, features = paste0(names(immune_signatures), "_UCell"))

第六步:ESTIMATE免疫/基质打分

白话解释: ESTIMATE是一种利用特征基因集估计肿瘤样本中免疫细胞和基质细胞含量的方法。它输出三个分数:免疫分数、基质分数和肿瘤纯度估计,常用于肿瘤微环境分析。

# ===== ESTIMATE =====
# 安装
# install.packages("estimate") 或从GitHub安装
library(estimate)

# 输入需要是GCT格式文件或表达矩阵
# 方法1:使用函数
filterCommonGenes(
  input.f = "expression_matrix.txt",
  output.f = "expression_filtered.gct",
  id = "GeneSymbol"
)

estimateScore(
  input.ds = "expression_filtered.gct",
  output.ds = "estimate_scores.gct",
  platform = "illumina"       # 或 "affymetrix"
)

# 方法2:直接在R中计算(手动实现)
# 读取ESTIMATE基因集
immune_genes <- read.table("immune_signature.txt", header = TRUE)$Gene
stromal_genes <- read.table("stromal_signature.txt", header = TRUE)$Gene

# 或使用已发表的基因集
# ESTIMATE基因集包含141个immune基因和141个stromal基因

# ssGSEA方法计算ESTIMATE分数
estimate_sigs <- list(
  ImmuneScore = immune_genes,
  StromalScore = stromal_genes
)
estimate_scores <- gsva(ssgseaParam(
  exprData = expr_matrix,
  geneSets = estimate_sigs
))

# 肿瘤纯度估计(基于ESTIMATE score)
# ESTIMATE score = ImmuneScore + StromalScore
# 纯度公式:cos(0.6049872018 + 0.0001467884 * ESTIMATE_score)
estimate_total <- colSums(estimate_scores)
tumor_purity <- cos(0.6049872018 + 0.0001467884 * estimate_total)

第七步:差异通路活性分析

白话解释: 拿到GSVA/ssGSEA分数后,可以像分析差异基因一样分析"差异通路"——哪些通路在疾病组和对照组之间活性显著不同?

# ===== limma差异通路分析 =====
library(limma)

# 使用GSVA分数
group <- factor(sample_info$Group, levels = c("Control", "Disease"))
design <- model.matrix(~ group)

fit <- lmFit(gsva_scores, design)
fit <- eBayes(fit)
pathway_results <- topTable(fit, coef = 2, number = Inf)

# 显著差异通路
sig_pathways <- pathway_results[pathway_results$adj.P.Val < 0.05, ]
cat("显著上调通路:", sum(sig_pathways$logFC > 0), "\n")
cat("显著下调通路:", sum(sig_pathways$logFC < 0), "\n")

# ===== 可视化 =====
library(ggplot2)

# 棒棒糖图(lollipop plot)
sig_pathways$pathway <- gsub("HALLMARK_", "", rownames(sig_pathways))
sig_pathways$direction <- ifelse(sig_pathways$logFC > 0, "Activated", "Suppressed")

ggplot(sig_pathways, aes(x = reorder(pathway, logFC), y = logFC, fill = direction)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_fill_manual(values = c("Activated" = "red", "Suppressed" = "blue")) +
  theme_minimal() +
  labs(x = "", y = "GSVA Score Difference (logFC)", title = "Differential Pathway Activity")

# 箱线图展示具体通路
library(ggpubr)
pathway_of_interest <- "HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION"
plot_data <- data.frame(
  score = gsva_scores[pathway_of_interest, ],
  group = sample_info$Group
)
ggboxplot(plot_data, x = "group", y = "score", fill = "group") +
  stat_compare_means(method = "t.test") +
  labs(y = "GSVA Score", title = pathway_of_interest)

第八步:与临床特征关联分析

白话解释: 通路活性分数可以和临床变量(分期、预后等)做关联——看哪些通路活性与患者的临床结局相关,帮助理解疾病机制和寻找生物标志物。

# ===== 生存分析 =====
library(survival)
library(survminer)

# 对每条通路做生存分析
surv_results <- data.frame()
for (i in 1:nrow(gsva_scores)) {
  pathway_name <- rownames(gsva_scores)[i]
  median_score <- median(gsva_scores[i, ])
  group <- ifelse(gsva_scores[i, ] > median_score, "High", "Low")

  surv_data <- data.frame(
    time = clinical$OS_time,
    status = clinical$OS_status,
    group = factor(group)
  )

  cox <- coxph(Surv(time, status) ~ group, data = surv_data)
  p <- summary(cox)$coefficients[, "Pr(>|z|)"]
  hr <- exp(coef(cox))

  surv_results <- rbind(surv_results, data.frame(
    pathway = pathway_name, HR = hr, pvalue = p
  ))
}
surv_results$FDR <- p.adjust(surv_results$pvalue, method = "BH")
sig_surv <- surv_results[surv_results$FDR < 0.05, ]

# ===== 相关性分析 =====
# GSVA分数与临床分期的相关性
cor_results <- apply(gsva_scores, 1, function(x) {
  cor.test(x, as.numeric(clinical$Stage), method = "spearman")
})
cor_pval <- sapply(cor_results, function(x) x$p.value)
cor_rho <- sapply(cor_results, function(x) x$estimate)

实战命令(可复制)

完整GSVA+免疫浸润分析流程

# ============================================
# GSVA + ssGSEA 免疫浸润综合分析
# ============================================

# 1. 环境准备
BiocManager::install(c("GSVA", "msigdbr", "limma", "pheatmap", "ggpubr"))
library(GSVA); library(msigdbr); library(limma)
library(pheatmap); library(ggplot2); library(ggpubr)

# 2. 加载表达数据
expr <- as.matrix(read.csv("expression_matrix.csv", row.names = 1))
sample_info <- read.csv("sample_info.csv")

# 3. 获取基因集
hallmark_list <- split(
  msigdbr(species = "Homo sapiens", category = "H")$gene_symbol,
  msigdbr(species = "Homo sapiens", category = "H")$gs_name
)

# 4. GSVA打分
gsva_res <- gsva(gsvaParam(expr, hallmark_list, kcdf = "Gaussian", minSize = 10))

# 5. 差异通路
group <- factor(sample_info$Group)
design <- model.matrix(~ 0 + group)
colnames(design) <- levels(group)
fit <- eBayes(contrasts.fit(lmFit(gsva_res, design),
              makeContrasts(Disease - Control, levels = design)))
diff_pathways <- topTable(fit, number = Inf)

# 6. ssGSEA免疫浸润
immune_sigs <- list(
  CD8_Tcell = c("CD8A","CD8B","GZMK","PRF1","IFNG","GZMA","GZMB"),
  CD4_Tcell = c("CD4","IL7R","TCF7","LEF1","CCR7","SELL"),
  Treg = c("FOXP3","IL2RA","CTLA4","TNFRSF18","IKZF2"),
  B_cell = c("CD19","MS4A1","CD79A","CD79B","BLK","PAX5"),
  NK_cell = c("NKG7","KLRD1","KLRB1","GNLY","NCR1","FCGR3A"),
  Macrophage_M1 = c("NOS2","IL1B","TNF","IL6","CD80","CD86"),
  Macrophage_M2 = c("CD163","MRC1","MSR1","ARG1","IL10","TGFB1"),
  DC = c("CD1C","CLEC10A","FCER1A","ITGAX","HLA-DRA"),
  Neutrophil = c("FCGR3B","CSF3R","CXCR1","CXCR2","S100A8")
)

immune_scores <- gsva(ssgseaParam(expr, immune_sigs, normalize = TRUE))

# 7. 可视化
pheatmap(immune_scores, annotation_col = data.frame(Group = group,
         row.names = colnames(immune_scores)), scale = "row")

# 8. 组间免疫差异
fit_immune <- eBayes(contrasts.fit(lmFit(immune_scores, design),
                     makeContrasts(Disease - Control, levels = design)))
immune_diff <- topTable(fit_immune, number = Inf)
print(immune_diff[immune_diff$adj.P.Val < 0.05, ])

面试常问点

Q1: GSVA和GSEA有什么区别?

A: GSEA是有监督方法,需要预先定义两组样本进行比较,输出一个通路是否在两组间差异富集的结果。GSVA是无监督方法,对每个样本独立打分,输出每个样本的通路活性分数矩阵,可以后续用limma等方法做任意组间比较。GSVA的优势是:(1)适合多组比较和连续变量相关分析;(2)可以整合到其他分析框架(如Cox回归);(3)不局限于两组对比。

Q2: GSVA中的kcdf参数如何选择?

A: kcdf控制核密度估计的核函数:(1) "Gaussian"适用于连续数据(log-CPM、TPM、微阵列表达值);(2) "Poisson"适用于整数counts数据(原始RNA-seq counts);(3) "none"跳过密度估计,直接用排名。如果数据已经做过log变换或归一化,用Gaussian;如果是原始counts,用Poisson。用错会导致分数分布异常。GSVA v2.0+新增kcdf="auto"选项,可根据输入数据自动选择合适的核函数,推荐在新版本中使用。

Q3: ssGSEA和GSVA结果有什么不同?如何选择?

A: GSVA的分数反映基因集内基因相对于基因集外基因的"相对富集"(有正有负),更适合检测通路在样本间的变异。ssGSEA的分数反映基因集内基因的绝对富集程度(通常为正值),更适合计算免疫浸润打分。对于免疫浸润估计,ssGSEA用得更多(如TIMER2.0中的ssGSEA);对于通路活性差异分析,GSVA更合适。

Q4: AUCell为什么更适合单细胞数据?

A: 单细胞数据有dropout现象(真实表达的基因检测为0),导致大量假零值。AUCell只看表达排名最高的前X%基因,完全不受零值影响。而GSVA/ssGSEA使用所有基因的排名,零值会干扰排名估计。此外AUCell计算快,适合处理几十万细胞的大规模单细胞数据。UCell是AUCell的改进版,计算效率更高。

Q5: 基因集打分可以代替反卷积方法(如CIBERSORT)估计免疫浸润吗?

A: 不完全等价。反卷积方法(CIBERSORT/MCP-counter)输出的是细胞比例或绝对含量的估计,有明确的生物学含义。基因集打分输出的是一个"活性分数",反映相关基因的整体表达水平,不能直接解读为细胞比例。打分方法更灵活(可自定义signature),但精度不如专门的反卷积算法。实践中两者常互补使用并交叉验证。

Q6: GSVA结果可以做聚类分析吗?

A: 可以且很常见。基于GSVA分数矩阵做层次聚类或一致性聚类(ConsensusClusterPlus),可以发现具有不同通路活性模式的样本亚型。这在肿瘤分子分型中很有用——如根据免疫通路活性将肿瘤分为"热肿瘤"和"冷肿瘤"。但需注意基因集之间可能高度相关(共享基因),影响聚类稳定性。

Q7: 自定义基因集时需要注意什么?

A: (1) 基因集大小通常15-500个基因,太小统计不稳定,太大失去特异性;(2) 基因间应有功能相关性(不能随机组合);(3) 检查基因集与表达矩阵的基因ID一致性(SYMBOL vs ENSEMBL);(4) 确认目标物种正确;(5) 基因集中的基因应在表达矩阵中有足够覆盖(通常要求≥50%的基因能匹配到)。


易错点

1. 输入数据未做log变换直接跑GSVA

问题: RNA-seq的TPM/FPKM值跨度很大(0到几十万),不做log变换直接用Gaussian kcdf会导致密度估计失败,分数分布异常。 解决: 对TPM/FPKM/CPM数据做log2(x+1)变换后再运行GSVA(kcdf="Gaussian")。如果用原始counts,设kcdf="Poisson"。

2. 基因ID不匹配导致打分失败

问题: 表达矩阵用ENSEMBL ID,基因集用Gene Symbol,匹配不上导致大量基因集被过滤(minSize不满足)。 解决: 打分前统一ID类型。使用biomaRt或org.Hs.eg.db进行ID转换,并检查匹配率(建议>80%)。

3. 把GSVA分数直接当作比例/百分比解读

问题: GSVA分数约在[-1,1]范围,有人误解为"通路激活了80%"。ssGSEA分数也不是细胞比例。 解决: GSVA/ssGSEA分数是相对的富集评分,只能做样本间相对比较(谁更高/低),不能做绝对定量解读。如需细胞比例估计,应使用CIBERSORT等反卷积方法。

4. 忽略基因集大小的影响

问题: 不同大小的基因集分数方差不同——大基因集(几百个基因)的分数方差通常小于小基因集。直接比较不同大小基因集的分数可能有偏。 解决: 设置合理的minSize和maxSize参数过滤极端大小的基因集;比较不同通路活性时关注统计显著性而非原始分数差异。

5. 不做多重检验校正就报告结果

问题: 对50条Hallmark通路分别做t检验比较组间差异,不校正P值会产生大量假阳性。 解决: 使用limma做统计并报告adjusted P-value(BH校正),或使用topTable自带的多重校正。

6. 混淆不同方法的分数含义

问题: 在同一分析中混用GSVA分数和ssGSEA分数进行比较,或者比较不同归一化参数的结果。 解决: 在一个分析中保持方法一致。GSVA分数(约[-1,1])、ssGSEA分数(归一化后[0,1]或未归一化的任意范围)不可直接比较。


补充知识

方法选择决策树

你的数据是:
├── bulk RNA-seq/microarray → 你想做什么?
│   ├── 组间通路差异比较 → GSVA (推荐)
│   ├── 免疫浸润估计 → ssGSEA 或 CIBERSORT
│   └── 通路活性与临床关联 → GSVA + Cox/Correlation
└── 单细胞RNA-seq → AUCell / UCell

与其他免疫浸润方法的对比

方法类型输出特点
ssGSEA打分相对活性分数灵活,可自定义signature
CIBERSORT反卷积细胞比例22种免疫细胞,需要参考矩阵
xCell打分+校正相对丰度64种细胞类型
MCP-counter打分绝对丰度估计10种细胞类型,简单快速
ESTIMATE打分免疫/基质/纯度分数肿瘤纯度估计
TIMER反卷积细胞比例6种免疫细胞

GSVA版本变迁

  • GSVA v1.48(Bioc 3.17):仅旧接口,无gsvaParam
  • GSVA v1.50(Bioc 3.18):引入新参数对象API(gsvaParam/ssgseaParam/plageParam/zscoreParam),旧接口deprecated
  • GSVA v1.52(Bioc 3.19):旧接口defunct(调用会报错)
  • GSVA v2.0+(Bioc 3.20):新增kcdf="auto",旧接口完全移除

相关R包生态

  • immunedeconv:整合多种免疫浸润方法的R包
  • IOBR:肿瘤免疫微环境分析综合R包
  • MCPcounter:MCP-counter的R实现
  • xCell:xCell的R实现
  • ConsensusTME:肿瘤微环境估计的共识方法