
1. 为什么你需要irGSEA这个神器如果你是做单细胞转录组分析的肯定遇到过这样的困扰明明做了差异表达分析但找出来的基因列表太长太杂根本看不出什么生物学意义。这时候就需要基因集富集分析GSEA来帮忙了。传统的GSEA方法有很多但每种方法都有局限性结果也不完全一致。irGSEA这个R包就厉害了它一次性整合了6种主流富集分析方法AUCell、UCell、singscore、ssGSEA、JASMINE和Viper再用RRA算法把结果汇总相当于让6个专家同时帮你把关最后只保留大家都认可的结果。我在实际项目中使用后发现相比单一方法irGSEA的结果更稳定可靠。比如去年分析一个肝癌单细胞数据集时单独用ssGSEA找到了50多个显著通路但用irGSEA整合分析后只有20多个通路在6种方法中都显著。后来实验验证发现确实就是这20多个通路最关键。2. 从零开始安装irGSEA2.1 基础环境准备安装irGSEA前需要先配置好R环境。建议使用R 4.0以上版本我测试时用的是R 4.2.3。首先安装CRAN上的基础包cran_packages - c(aplot,BiocManager,data.table,devtools, doParallel,doRNG,dplyr,ggfun,gghalves, ggplot2,ggplotify,ggridges,ggsci,irlba, magrittr,Matrix,msigdbr,pagoda2,pointr, purrr,RcppML,readr,reshape2,reticulate, rlang,RMTstat,RobustRankAggreg,roxygen2, Seurat,SeuratObject,stringr,tibble,tidyr, tidyselect,tidytree,VAM) for(pkg in cran_packages){ if(!requireNamespace(pkg, quietly TRUE)){ install.packages(pkg, ask F, update F) } }这里有个小技巧如果安装过程中出现网络问题可以尝试更换CRAN镜像源。我常用清华的镜像速度比较稳定options(repos c(CRAN https://mirrors.tuna.tsinghua.edu.cn/CRAN/))2.2 Bioconductor依赖包接下来安装Bioconductor的依赖包。这些包主要用于单细胞分析和富集计算bioconductor_packages - c(AUCell,BiocParallel,ComplexHeatmap, decoupleR,fgsea,ggtree,GSEABase, GSVA,Nebulosa,scde,singscore, SummarizedExperiment,UCell, viper,sparseMatrixStats) for(pkg in bioconductor_packages){ if(!requireNamespace(pkg, quietly TRUE)){ BiocManager::install(pkg, ask F, update F) } }2.3 安装irGSEA主包最后从GitHub安装irGSEA本体if(!requireNamespace(irGSEA, quietly TRUE)){ devtools::install_github(chuiqin/irGSEA, force T) }安装完成后建议重启R session避免一些奇怪的报错。我遇到过因为环境变量没更新导致的函数找不到的问题重启后就解决了。3. 数据准备与质控3.1 加载单细胞数据irGSEA支持Seurat对象作为输入。假设你已经有了处理好的单细胞数据library(irGSEA) library(Seurat) # 加载示例数据 sc_dataset - readRDS(sc_dataset.rds) # 检查细胞类型分布 UMAP_celltype - DimPlot(sc_dataset, reduction umap, group.by celltype, label TRUE) UMAP_celltype注意如果你的数据是Seurat V5格式需要先转换sc_dataset - SeuratObject::UpdateSeuratObject(sc_dataset) sc_dataset2 - CreateSeuratObject( counts CreateAssay5Object(GetAssayData(sc_dataset, assay RNA, slot counts)), meta.data sc_dataset[[]] )3.2 数据标准化进行富集分析前需要对数据进行标准化处理sc_dataset2 - NormalizeData(sc_dataset2)这一步很关键我遇到过因为跳过标准化导致富集分数全为0的情况。标准化后的数据应该检查下表达矩阵head(GetAssayData(sc_dataset2, assay RNA, slot data)[,1:5])4. 运行irGSEA分析4.1 计算富集分数核心函数是irGSEA.score参数很多但大部分用默认值就行sc_dataset2 - irGSEA.score( object sc_dataset2, assay RNA, slot data, seeds 123, min.cells 3, min.feature 0, custom F, geneset NULL, msigdb T, species Homo sapiens, category H, subcategory NULL, geneid symbol, method c(AUCell,UCell,singscore,ssgsea,JASMINE,viper), kcdf Gaussian )这里有几个参数需要特别注意min.cells3至少要在3个细胞中表达的基因才会被考虑categoryH使用MSigDB中的Hallmark基因集method参数可以选择部分方法但建议全选以获得更可靠的结果4.2 整合分析结果计算完成后用RRA算法整合6种方法的结果result.dge - irGSEA.integrate( object sc_dataset2, group.by celltype, method c(AUCell,UCell,singscore,ssgsea,JASMINE,viper) ) # 提取显著基因集 geneset.show - result.dge$RRA %% dplyr::filter(pvalue 0.05) %% dplyr::pull(Name) %% unique(.)如果数据量大时内存不足可以设置options(future.globals.maxSize 100000 * 1024^5)5. 结果可视化全攻略5.1 热图展示基础热图展示前10个通路heatmap.plot - irGSEA.heatmap( object result.dge, method RRA, top 10, show.geneset NULL ) heatmap.plot如果想展示特定通路可以用之前提取的geneset.showheatmap.plot - irGSEA.heatmap( object result.dge, method RRA, show.geneset geneset.show )5.2 气泡图气泡图能同时展示富集显著性和效应大小bubble.plot - irGSEA.bubble( object result.dge, method RRA, show.geneset geneset.show ) bubble.plot5.3 其他可视化方法Upset图展示不同方法的交集upset.plot - irGSEA.upset(object result.dge, method RRA) upset.plot半小提琴图展示特定通路在不同细胞类型中的分布Idents(sc_dataset2) - sc_dataset2$celltype halfvlnplot - irGSEA.halfvlnplot( object sc_dataset2, method AUCell, show.geneset HALLMARK-NOTCH-SIGNALING ) halfvlnplot6. 实战经验与避坑指南在实际使用中我总结了一些经验内存管理单细胞数据通常很大建议在服务器上运行至少32G内存基因集选择Hallmark基因集比较通用但也可以尝试其他类别如KEGG参数调整min.cells要根据数据量调整太小会增加假阳性结果解读不要只看p值要结合fold change和生物学意义常见报错解决方案报错object not found检查Seurat对象是否更新到最新版本报错memory exhausted增加内存或减少同时运行的方法数量报错geneset not found检查物种和基因ID类型设置是否正确