Chapter 6 Enrichment analysis

TCMDATA provides functions for performing enrichment analysis on gene sets derived from herb–target interactions. It supports both Over-Representation Analysis (ORA) and Gene Set Enrichment Analysis (GSEA) methodologies via clusterProfiler, and offers a suite of visualization methods for interpreting enrichment results through enrichplot and other compatible packages.

6.1 Over Representation Analysis (ORA)

ORA evaluates whether a pre-defined gene set (e.g., KEGG pathways, GO terms, Reactome pathways) is statistically over-represented among a list of input genes, such as the intersection of DEGs and disease targets. For a comprehensive treatment of enrichment methods, refer to the Biomedical Knowledge Mining book.

6.1.1 KEGG enrichment analysis

KEGG (Kyoto Encyclopedia of Genes and Genomes) is a comprehensive database that maps genes to metabolic pathways, signaling cascades, and other molecular interaction networks. KEGG pathway enrichment analysis identifies which biological pathways are significantly over-represented in a given gene set, thereby revealing the functional mechanisms underlying the observed gene expression changes.

In this example, we randomly sampled 200 targets of Lingzhi (Ganoderma lucidum) as input for KEGG pathway enrichment. Since enrichKEGG() requires Entrez IDs by default, we first converted gene symbols using bitr():

library(TCMDATA)
set.seed(2026)

lz_targets <- search_herb("lingzhi", type = "Herb_pinyin_name")$target
query_genes <- sample(lz_targets, 200)

head(query_genes)
#> [1] "YES1"   "BCHE"   "CYP3A4" "STAT3"  "MMP3"   "PRKACA"
library(clusterProfiler)
library(org.Hs.eg.db)

## convert Symbol to Entrez ID
gene_id <- bitr(query_genes,
                fromType = "SYMBOL",
                toType   = "ENTREZID",
                OrgDb    = org.Hs.eg.db)

head(gene_id)
#>   SYMBOL ENTREZID
#> 1   YES1     7525
#> 2   BCHE      590
#> 3 CYP3A4     1576
#> 4  STAT3     6774
#> 5   MMP3     4314
#> 6 PRKACA     5566

Then, we performed KEGG pathway enrichment using enrichKEGG(), and applied setReadable() to convert enriched gene IDs back to symbols for better interpretability:

kegg_enrich <- enrichKEGG(gene     = gene_id$ENTREZID,
                          organism = "hsa",
                          keyType  = "kegg")

kegg_enrich <- setReadable(kegg_enrich, OrgDb = org.Hs.eg.db, keyType = "ENTREZID")

head(kegg_enrich)
#>                    category                     subcategory       ID
#> hsa05160     Human Diseases       Infectious disease: viral hsa05160
#> hsa04657 Organismal Systems                   Immune system hsa04657
#> hsa05219     Human Diseases          Cancer: specific types hsa05219
#> hsa05417     Human Diseases          Cardiovascular disease hsa05417
#> hsa01522     Human Diseases Drug resistance: antineoplastic hsa01522
#> hsa00910         Metabolism               Energy metabolism hsa00910
#>                        Description GeneRatio  BgRatio RichFactor FoldEnrichment
#> hsa05160               Hepatitis C    20/156 156/9260 0.12820513       7.610125
#> hsa04657   IL-17 signaling pathway    15/156  94/9260 0.15957447       9.472177
#> hsa05219            Bladder cancer    11/156  41/9260 0.26829268      15.925578
#> hsa05417 Lipid and atherosclerosis    21/156 216/9260 0.09722222       5.771011
#> hsa01522      Endocrine resistance    15/156  99/9260 0.15151515       8.993784
#> hsa00910       Nitrogen metabolism     8/156  17/9260 0.47058824      27.933635
#>            zScore       pvalue     p.adjust       qvalue
#> hsa05160 10.89893 1.182718e-12 3.311610e-10 1.232517e-10
#> hsa04657 10.80680 3.750864e-11 4.155521e-09 1.546604e-09
#> hsa05219 12.53746 4.452344e-11 4.155521e-09 1.546604e-09
#> hsa05417  9.28721 6.848868e-11 4.527151e-09 1.684917e-09
#> hsa01522 10.46711 8.084198e-11 4.527151e-09 1.684917e-09
#> hsa00910 14.54927 1.158830e-10 4.701066e-09 1.749645e-09
#>                                                                                                                            geneID
#> hsa05160         STAT3/MAPK1/CYCS/PIK3CD/EGFR/GSK3B/PPARA/TNF/TRAF6/CDKN1A/TP53/BRAF/CASP3/AKT2/CDK4/CFLAR/STAT2/NFKBIA/E2F1/FADD
#> hsa04657                                        MMP3/MAPK1/IL4/GSK3B/TNF/TRAF6/MMP9/CCL2/MMP1/CASP3/FOS/TNFAIP3/IL17A/NFKBIA/FADD
#> hsa05219                                                              MAPK1/ERBB2/EGFR/CDKN1A/TP53/MMP9/BRAF/MMP1/CDK4/DAPK1/E2F1
#> hsa05417 STAT3/MMP3/MAPK1/CYCS/PIK3CD/GSK3B/TNF/CAMK2B/TRAF6/TP53/CASP1/MMP9/CCL2/MMP1/CASP3/AKT2/CYP1A1/FOS/CYP2C8/PYCARD/NFKBIA
#> hsa01522                                      PRKACA/ADCY1/MAPK1/ERBB2/PIK3CD/EGFR/CDKN1A/TP53/MMP9/BRAF/AKT2/CDK4/FOS/IGF1R/E2F1
#> hsa00910                                                                                      CA2/CA4/CA5A/CA5B/CA7/CA14/CA13/CA9
#>          Count
#> hsa05160    20
#> hsa04657    15
#> hsa05219    11
#> hsa05417    21
#> hsa01522    15
#> hsa00910     8

The enrichplot package is fully compatible with clusterProfiler and provides a rich set of visualization methods. Below we demonstrated several common plot types (dot plot, bar plot, and concept network plot):

p1 <- dotplot(kegg_enrich)
p2 <- barplot(kegg_enrich)
p3 <- cnetplot(kegg_enrich)

plot_list(p1, p2, p3, ncol = 1)

6.2 GO enrichment analysis

Gene Ontology (GO) is a widely used framework that provides a structured, controlled vocabulary for annotating gene functions. It consists of three orthogonal ontologies:

  • BP (Biological Process): biological objectives to which a gene contributes (e.g., apoptosis, signal transduction).
  • CC (Cellular Component): cellular locations where a gene product is active (e.g., nucleus, membrane).
  • MF (Molecular Function): molecular activities of a gene product (e.g., kinase activity, DNA binding).

GO enrichment analysis tests whether GO terms are over-represented in a gene set relative to the genome background, thereby revealing the biological functions and cellular contexts associated with the input genes.

Here, we reused the gene set and Entrez IDs prepared in the KEGG section above. Unlike enrichKEGG(), enrichGO() also supports keyType = "SYMBOL" directly via the OrgDb annotation, but for consistency we continued to use Entrez IDs.

go_bp <- enrichGO(gene     = gene_id$ENTREZID,
                  OrgDb    = org.Hs.eg.db,
                  ont      = "BP",
                  keyType  = "ENTREZID",
                  readable = TRUE)
head(go_bp)
#>                    ID                                   Description GeneRatio
#> GO:0009410 GO:0009410               response to xenobiotic stimulus    31/176
#> GO:0043434 GO:0043434                   response to peptide hormone    31/176
#> GO:0032868 GO:0032868                           response to insulin    25/176
#> GO:0071375 GO:0071375 cellular response to peptide hormone stimulus    26/176
#> GO:0032496 GO:0032496                response to lipopolysaccharide    25/176
#> GO:0050727 GO:0050727           regulation of inflammatory response    27/176
#>              BgRatio RichFactor FoldEnrichment   zScore       pvalue
#> GO:0009410 453/18805 0.06843267       7.311798 13.21743 3.003553e-18
#> GO:0043434 494/18805 0.06275304       6.704948 12.48952 3.519275e-17
#> GO:0032868 324/18805 0.07716049       8.244336 12.78483 4.542069e-16
#> GO:0071375 369/18805 0.07046070       7.528486 12.31059 1.007449e-15
#> GO:0032496 357/18805 0.07002801       7.482254 12.01911 4.333062e-15
#> GO:0050727 442/18805 0.06108597       6.526828 11.42883 9.112708e-15
#>                p.adjust       qvalue
#> GO:0009410 1.149760e-14 6.547745e-15
#> GO:0043434 6.735893e-14 3.836010e-14
#> GO:0032868 5.795680e-13 3.300570e-13
#> GO:0071375 9.641287e-13 5.490597e-13
#> GO:0032496 3.317392e-12 1.889215e-12
#> GO:0050727 5.813908e-12 3.310951e-12
#>                                                                                                                                                                               geneID
#> GO:0009410 BCHE/CYP3A4/ADCY1/AOX1/ABL1/EGFR/ADAM17/TNF/GSTA1/NQO1/CDKN1A/TP53/EHMT2/BRAF/IL10/CASP3/PRKCB/CDK4/XPC/FBP1/CYP1A1/FOS/CAT/ADORA2A/CYP2C8/CA9/NOS2/TOP1/SREBF1/E2F1/CBR3
#> GO:0043434     STAT3/PRKACA/MAPK1/AGTR2/ERBB2/CA2/PKLR/EGFR/GSK3B/PKM/PPARA/INSR/PRKCD/GPT/ERBB4/BRAF/CTSD/IL10/LEP/NR1H4/PRKCB/MET/AKT2/FBP1/FOS/CFLAR/IGF1R/CAT/STAT2/NCOA2/SREBF1
#> GO:0032868                                       MAPK1/ERBB2/PKLR/EGFR/GSK3B/PKM/PPARA/INSR/PRKCD/GPT/ERBB4/CTSD/IL10/LEP/NR1H4/PRKCB/MET/AKT2/FBP1/FOS/CFLAR/IGF1R/CAT/NCOA2/SREBF1
#> GO:0071375                               STAT3/PRKACA/MAPK1/AGTR2/ERBB2/CA2/PKLR/EGFR/GSK3B/PKM/INSR/PRKCD/GPT/ERBB4/CTSD/LEP/NR1H4/PRKCB/MET/AKT2/FBP1/FOS/CFLAR/IGF1R/NCOA2/SREBF1
#> GO:0032496                           MMP3/MAPK1/ABL1/ADAM17/TNF/CTSG/NQO1/MAPKAPK2/TRAF6/XIAP/CASP1/MMP9/CCL2/IL10/NR1H4/CASP3/CDK4/CYP1A1/FOS/TNFAIP3/NOS2/PYCARD/PPARD/NFKBIA/E2F1
#> GO:0050727           YES1/STAT3/MMP3/SYK/IL4/PPARA/TNF/PRKCD/XIAP/PIK3CG/CASP1/MMP9/IL10/NR1H4/CASP3/FYN/PBK/ADORA1/PLA2G2D/TNFAIP3/ADORA2A/PYCARD/ALOX15/ADORA2B/IL17A/PPARD/NFKBIA
#>            Count
#> GO:0009410    31
#> GO:0043434    31
#> GO:0032868    25
#> GO:0071375    26
#> GO:0032496    25
#> GO:0050727    27

To perform enrichment for Cellular Component (CC), Molecular Function (MF), or all three categories simultaneously, simply change the ont parameter:

## Cellular Component (CC)
go_cc <- enrichGO(gene = gene_id$ENTREZID, OrgDb = org.Hs.eg.db,
                  ont = "CC", keyType = "ENTREZID", readable = TRUE)

## Molecular Function (MF)
go_mf <- enrichGO(gene = gene_id$ENTREZID, OrgDb = org.Hs.eg.db,
                  ont = "MF", keyType = "ENTREZID", readable = TRUE)

## All GO categories (ALL)
go_all <- enrichGO(gene = gene_id$ENTREZID, OrgDb = org.Hs.eg.db,
                   ont = "ALL", keyType = "ENTREZID", readable = TRUE)

Similarly, GO enrichment results can be visualized with enrichplot (for further details, refer to the enrichplot documentation). For the combined ont = "ALL" result, a faceted bar plot provides a convenient comparison across BP, CC, and MF:

p_all <- barplot(
  go_all,
  x = "Count",
  showCategory = 10,
  split = "ONTOLOGY"
) +
  aes(fill = ONTOLOGY) +
  scale_fill_brewer(palette = "Set2") +
  enrichplot::autofacet(by = "row", scales = "free")

p_all + scale_y_discrete()

6.3 Advanced visualization

TCMDATA provides several publication-ready visualization functions tailored for enrichment results in network pharmacology research.

6.3.1 Lollipop plot

The lollipop plot offers an alternative to the standard dot/bar plot, combining line segments with terminal points to display enrichment significance and gene counts. gglollipop() is built on top of enrichplot and shares compatible grammar:

p_lollipop <- gglollipop(go_bp, line.col = "skyblue", 
                         line.type = "dashed", 
                         palette = "Spectral", top_n = 10) + 
  theme(strip.text.y = element_text(angle = 0)) 

p_lollipop

For the combined ont = "ALL" result, lollipop plots can be faceted by ontology to compare enriched terms across BP, CC, and MF:

p_lollipop_all <- gglollipop(go_all, line.col = "orange", 
                             split = "ONTOLOGY",line.type = "dashed", 
                             palette = "PiYG", top_n = 5, show_count = FALSE) + 
  facet_grid(ONTOLOGY ~ ., scales = "free_y") +
  theme(strip.text.y = element_text(angle = 0)) 

p_lollipop_all

6.3.2 Dot-sankey plot

The dot-sankey plot combines a Sankey diagram (showing gene–pathway alluvial flows) with a dot plot (encoding significance and gene count) in a single panel. This dual-view layout facilitates simultaneous inspection of which genes contribute to each pathway and how significant each enrichment is:

ggdot_sankey(kegg_enrich, n = 8, dot_x_var = "GeneRatio")

6.3.3 GO bar plot

go_barplot() provides a colored bar chart specifically designed for enrichGO(ont = "ALL") results, where bars are grouped and colored by ontology category (BP, CC, MF). These figures are commonly used in network pharmacology publications for presenting GO enrichment results:

go_barplot(go_all)

6.3.4 GO circle plot

gocircle_plot() renders a multi-ring circular plot using circlize and ComplexHeatmap, encoding four layers of information in a compact layout: ontology category, term size with \(-\log_{10}(p_{\text{adjust}})\), up/down-regulated gene counts, and RichFactor:

gocircle_plot(go_all, top = 5)

6.4 Gene Set Enrichment Analysis (GSEA)

Unlike ORA, which requires a pre-defined list of significant genes, Gene Set Enrichment Analysis (GSEA) uses the entire ranked gene list to detect coordinated changes in gene sets. This approach avoids arbitrary significance cutoffs and is more sensitive to subtle but consistent expression shifts across a pathway.

The typical GSEA workflow requires a named numeric vector (e.g., log2 fold change or Wald statistic), sorted in decreasing order, with gene identifiers as names. Here, we use the built-in deg_earlydn dataset from TCMDATA to construct such a ranked list.

6.4.1 Prepare ranked gene list

data(deg_earlydn)

## convert gene symbols to Entrez IDs
deg_ids <- bitr(deg_earlydn$names,
                fromType  = "SYMBOL",
                toType    = "ENTREZID",
                OrgDb     = org.Hs.eg.db)

## merge with DESeq2 results and build ranked list
deg_merged <- merge(deg_earlydn, deg_ids, by.x = "names", by.y = "SYMBOL")
gene_rank  <- sort(setNames(deg_merged$log2FoldChange, deg_merged$ENTREZID),
                   decreasing = TRUE)

head(gene_rank)
#>      9370 100874095      1149      4633      4625 100189286 
#>  8.517210  7.070620  5.368624  5.256895  4.874813  4.793894

6.4.2 KEGG GSEA analysis

gsea_kegg <- gseKEGG(geneList = gene_rank,
                     organism = "hsa",
                     eps      = 0,
                     pvalueCutoff = 0.05)

gsea_kegg <- setReadable(gsea_kegg, OrgDb = org.Hs.eg.db, keyType = "ENTREZID")
head(gsea_kegg)
#>                ID                            Description setSize
#> hsa00970 hsa00970            Aminoacyl-tRNA biosynthesis     136
#> hsa04380 hsa04380             Osteoclast differentiation     132
#> hsa04668 hsa04668                  TNF signaling pathway     117
#> hsa04657 hsa04657                IL-17 signaling pathway      82
#> hsa05323 hsa05323                   Rheumatoid arthritis      88
#> hsa04060 hsa04060 Cytokine-cytokine receptor interaction     244
#>          enrichmentScore       NES       pvalue     p.adjust       qvalue rank
#> hsa00970       0.7812747  3.088860 2.452704e-30 8.633517e-28 6.093032e-28  734
#> hsa04380      -0.6513337 -2.546759 1.345775e-14 2.368564e-12 1.671594e-12 2855
#> hsa04668      -0.6777418 -2.604701 4.909992e-14 5.761058e-12 4.065818e-12 1129
#> hsa04657      -0.7364961 -2.699637 7.287049e-14 6.234807e-12 4.400163e-12 1767
#> hsa05323      -0.7173842 -2.648602 8.856260e-14 6.234807e-12 4.400163e-12 2438
#> hsa04060      -0.5366194 -2.299662 7.115359e-13 4.174344e-11 2.946008e-11 2557
#>                            leading_edge
#> hsa00970  tags=32%, list=3%, signal=32%
#> hsa04380 tags=25%, list=11%, signal=22%
#> hsa04668  tags=21%, list=4%, signal=20%
#> hsa04657  tags=30%, list=6%, signal=29%
#> hsa05323  tags=34%, list=9%, signal=31%
#> hsa04060  tags=25%, list=9%, signal=23%
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                core_enrichment
#> hsa00970 TRP-TGG1-1/TRR-CCG2-1/TRH-GTG1-8/TRK-TTT3-1/TRH-GTG1-9/TRE-TTC2-1/TRR-CCT3-1/TRS-GCT6-1/TRR-TCG1-1/TRP-AGG2-6/TRR-TCG3-1/TRF-GAA2-1/TRH-GTG1-7/TRL-TAG2-1/TRQ-CTG6-1/TRK-TTT5-1/TRY-GTA2-1/TRL-TAG3-1/TRY-GTA5-1/TRL-CAG2-1/TRC-GCA11-1/TRL-CAA1-1/TRI-AAT5-5/TRE-CTC1-3/TRE-CTC1-4/TRI-AAT2-1/TRC-GCA8-1/TRE-CTC1-5/TRG-GCC2-4/TRC-GCA2-4/TRG-GCC1-5/TRY-GTA5-5/TRD-GTC2-10/TRT-AGT1-1/TRR-ACG1-2/TRA-TGC4-1/TRG-TCC2-6/TRS-AGA2-2/TRV-CAC1-5/TRK-CTT2-2/TRK-CTT3-1/TRS-GCT3-1/TRC-GCA3-1/TRG-GCC3-1
#> hsa04380                                                                                                                                                                                                                                                                                           PLCG2/CALCR/MAP3K14/IFNGR1/PPP3R1/FCGR2A/LILRB2/PIK3CA/FCGR3A/TGFB2/FOSL1/NFKBIA/NFATC1/IL1A/LILRA6/LILRB4/RELB/TNFSF11/LILRB3/TREM2/NFKB2/OSCAR/JUND/PPP3R2/FOSL2/FCGR3B/IFNG/IL1B/JUN/SOCS3/JUNB/FOS/FOSB
#> hsa04668                                                                                                                                                                                                                                                                                                                                                                  CXCL6/VCAM1/IL18R1/CEBPB/TRAF1/ICAM1/TNFAIP3/CCL2/BCL3/MMP9/BIRC3/LIF/PTGS2/CXCL1/CXCL3/IL1B/SELE/JUN/SOCS3/CCL20/JUNB/CXCL2/IL6/FOS
#> hsa04657                                                                                                                                                                                                                                                                                                                                                     MUC5AC/HSP90AA1/FOSL1/NFKBIA/CXCL6/CEBPB/CSF3/TNFAIP3/S100A9/JUND/CCL2/MMP9/PTGS2/CXCL1/S100A8/CXCL3/IFNG/CXCL8/IL1B/JUN/CCL20/CXCL2/IL6/FOS/FOSB
#> hsa05323                                                                                                                                                                                                                                                                                                                        ITGB2/IL11/VEGFA/TGFB3/ATP6V1G3/ATP6V0D2/ATP6V1D/TLR2/TGFB2/IL1A/FLT1/IL18/CXCL6/TNFSF11/CD86/ICAM1/CCL2/CXCL1/CTLA4/CXCL3/IFNG/CCL3L3/CXCL8/IL1B/JUN/CCL20/CXCL2/IL6/CCL3/FOS
#> hsa04060                                                                                                             OSMR/IFNGR1/GDF3/IL10/CX3CL1/TNFRSF10B/IL11/TGFB3/CCL16/IL2RG/RELT/CRLF2/TGFB2/TNFRSF12A/IL24/TNFRSF9/IL1A/CLCF1/IL18/CCL18/CD70/CCL23/CCR7/CXCL6/IL1RL1/TNFSF11/TNFSF10/PPBP/IL18R1/IL18RAP/CSF3R/CCR3/CCL22/IL7R/TNFRSF13C/CSF3/CCL2/CXCR1/CXCR4/CXCR2/PF4V1/LIF/TNFRSF13B/CXCL1/IL1RN/CCL8/CXCL13/CXCL3/IFNG/CCL3L3/INHBB/TNFSF9/CCL4/OSM/CXCL8/IL1B/GDF15/CCL20/CCL4L2/CXCL2/IL6/CCL3

The classic GSEA running-score plot visualizes the enrichment profile of selected pathways. gseaplot2() from enrichplot supports displaying multiple gene sets simultaneously:

gseaplot2(gsea_kegg, geneSetID = 1:3, pvalue_table = TRUE)

6.4.3 GO GSEA analysis

gsea_go <- gseGO(geneList = gene_rank,
                 OrgDb    = org.Hs.eg.db,
                 ont      = "BP",
                 eps      = 0,
                 pvalueCutoff = 0.05)

gsea_go <- setReadable(gsea_go, OrgDb = org.Hs.eg.db, keyType = "ENTREZID")
head(gsea_go)
#>                    ID
#> GO:0002460 GO:0002460
#> GO:0002443 GO:0002443
#> GO:0002449 GO:0002449
#> GO:0019724 GO:0019724
#> GO:0016064 GO:0016064
#> GO:0035195 GO:0035195
#>                                                                                                                          Description
#> GO:0002460 adaptive immune response based on somatic recombination of immune receptors built from immunoglobulin superfamily domains
#> GO:0002443                                                                                               leukocyte mediated immunity
#> GO:0002449                                                                                              lymphocyte mediated immunity
#> GO:0019724                                                                                                  B cell mediated immunity
#> GO:0016064                                                                                   immunoglobulin mediated immune response
#> GO:0035195                                                                        miRNA-mediated post-transcriptional gene silencing
#>            setSize enrichmentScore       NES       pvalue     p.adjust
#> GO:0002460     367      -0.5962006 -2.649126 7.191799e-27 4.421518e-23
#> GO:0002443     446      -0.5540426 -2.507669 2.307337e-25 7.092755e-22
#> GO:0002449     352      -0.5705852 -2.526617 2.865721e-21 5.872818e-18
#> GO:0019724     187      -0.6650901 -2.711805 1.080066e-20 1.660061e-17
#> GO:0016064     184      -0.6704404 -2.728365 1.781633e-20 2.190697e-17
#> GO:0035195     296       0.5648152  2.477770 4.576711e-19 4.689603e-16
#>                  qvalue rank                   leading_edge
#> GO:0002460 3.618611e-23 3405 tags=34%, list=13%, signal=30%
#> GO:0002443 5.804775e-22 3899 tags=34%, list=14%, signal=30%
#> GO:0002449 4.806367e-18 3144 tags=35%, list=12%, signal=32%
#> GO:0019724 1.358609e-17 2665 tags=40%, list=10%, signal=36%
#> GO:0016064 1.792886e-17 2665 tags=40%, list=10%, signal=37%
#> GO:0035195 3.838014e-16 1814  tags=31%, list=7%, signal=30%
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      core_enrichment
#> GO:0002460                                                                                                                                                                                   IL23R/IL6R/ZBTB1/STAT4/EXO1/SLC11A1/C5/SERPING1/GATA3/ANXA1/CR1/CD1E/WAS/MYO1G/MEF2C/TLR8/SLAMF6/TNFRSF1B/FCER1G/KLRC1/CD19/LIG4/PRF1/CEACAM1/HSPD1/IL10/IGHV3-66/CD7/SLAMF1/SCART1/FCMR/FCGR2A/IGHV4-61/CLU/BCL6/TFRC/FCGR3A/IGLL5/IGLC1/HLX/PTPRC/C9/IGHV3-73/ARID5A/IGHV3-43/KMT5C/IGHV1-18/CLCF1/IL18/MIR21/CD70/LILRB4/BACH2/IGHV3-48/IGHV3-15/IGHG4/RELB/IL1RL1/IGKC/C3/LY9/KLHL6/TREM2/CFI/IGHV5-10-1/IGHV3-49/IGHV4-39/IL18R1/NFKB2/CD1A/IGHV1-69/IGHV3-74/IGHV7-4-1/IGLC6/IGHV6-1/IGHE/CD55/IGLC2/IGHV1-3/CLC/IGHV3-11/ICAM1/IL7R/ULBP1/IGHV3-64D/IGHG2/KLRD1/IGHG1/IGHV1-69D/IGHG3/IGHV3-23/TNFAIP3/IGHV1-58/CD1B/IGHA1/C2/IGHV3-16/IGLC3/BCL3/FCGR3B/IGHD/IGHV3-13/ZC3H12A/IGHA2/IGHV3-7/NFKBID/PSG9/CR2/IGHV3-53/NFKBIZ/IGHV3-33/IGHV5-51/IGHV3-20/IGHV3-30/IGLC7/IGHV3-72/CXCL13/CD69/IGHV4-28/IL1B/SOCS3/JUNB/IGHV4-4/IL6
#> GO:0002443 CD46/CD84/PTAFR/IL2RB/NKG7/NOS2/IL13RA2/NBN/CLEC7A/RNF19B/CYRIB/NLRP3/SCNN1B/IL23R/IL6R/ZBTB1/EXO1/RAC2/DHX36/C5/SERPING1/GATA3/CR1/KLRB1/CD1E/WAS/MYO1G/PLCG2/TLR8/SLAMF6/GZMB/VAMP7/TNFRSF1B/KLRC2/FCER1G/KLRC1/STXBP1/FGR/CD19/LIG4/PRF1/RAB44/PIK3R6/CEACAM1/HSPD1/ITGB2/IL10/IGHV3-66/CD7/TICAM1/SLAMF1/SCART1/SERPINB9/ADGRE2/ARL8B/STXBP3/FCMR/FCGR2A/ANXA3/IGHV4-61/CD96/KIT/CLU/BCL6/TFRC/FCGR3A/IGLL5/IGLC1/PTPRC/C9/IGHV3-73/ARID5A/IGHV3-43/DNASE1L3/KMT5C/SLAMF7/IGHV1-18/CLCF1/SLC18A2/IL18/CLNK/CD70/LILRB4/IGHV3-48/IGHV3-15/IGHG4/CXCL6/IGKC/C3/TREM2/CFI/IGHV5-10-1/STAP1/IGHV3-49/NCR1/IGHV4-39/IL18R1/CD1A/IGHV1-69/IL18RAP/SH2D1B/IGHV3-74/IGHV7-4-1/IGLC6/IGHV6-1/IGHE/CD55/IGLC2/CD177/IGHV1-3/CLC/IGHV3-11/ICAM1/KLRC3/IL7R/ULBP1/IGHV3-64D/IGHG2/KLRD1/IGHG1/IGHV1-69D/IGHG3/IGHV3-23/IGHV1-58/CD1B/FOXF1/IGHA1/C2/IGHV3-16/IGLC3/BCL3/FCGR3B/IGHD/IGHV3-13/IGHA2/IGHV3-7/CR2/IGHV3-53/NFKBIZ/IGHV3-33/IGHV5-51/IGHV3-20/IGHV3-30/IGLC7/IGHV3-72/FCAR/IGHV4-28/TREM1/IL1B/IGHV4-4/IL6/CCL3/NR4A3
#> GO:0002449                                                                                                                                                                               IL2RB/NKG7/IL13RA2/NBN/RNF19B/CYRIB/NLRP3/IL23R/ZBTB1/EXO1/C5/SERPING1/GATA3/CR1/KLRB1/CD1E/WAS/MYO1G/TLR8/SLAMF6/GZMB/VAMP7/TNFRSF1B/KLRC2/FCER1G/KLRC1/CD19/LIG4/PRF1/PIK3R6/CEACAM1/HSPD1/IL10/IGHV3-66/CD7/SLAMF1/SCART1/SERPINB9/ARL8B/FCMR/FCGR2A/IGHV4-61/CD96/CLU/BCL6/TFRC/FCGR3A/IGLL5/IGLC1/PTPRC/C9/IGHV3-73/ARID5A/IGHV3-43/KMT5C/SLAMF7/IGHV1-18/CLCF1/IL18/CLNK/CD70/LILRB4/IGHV3-48/IGHV3-15/IGHG4/IGKC/C3/TREM2/CFI/IGHV5-10-1/IGHV3-49/NCR1/IGHV4-39/IL18R1/CD1A/IGHV1-69/IL18RAP/SH2D1B/IGHV3-74/IGHV7-4-1/IGLC6/IGHV6-1/IGHE/CD55/IGLC2/IGHV1-3/CLC/IGHV3-11/ICAM1/KLRC3/IL7R/ULBP1/IGHV3-64D/IGHG2/KLRD1/IGHG1/IGHV1-69D/IGHG3/IGHV3-23/IGHV1-58/CD1B/IGHA1/C2/IGHV3-16/IGLC3/BCL3/FCGR3B/IGHD/IGHV3-13/IGHA2/IGHV3-7/CR2/IGHV3-53/NFKBIZ/IGHV3-33/IGHV5-51/IGHV3-20/IGHV3-30/IGLC7/IGHV3-72/IGHV4-28/IL1B/IGHV4-4/IL6
#> GO:0019724                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    C5/SERPING1/CR1/TLR8/FCER1G/CD19/LIG4/HSPD1/IL10/IGHV3-66/FCMR/FCGR2A/IGHV4-61/CLU/BCL6/TFRC/FCGR3A/IGLL5/IGLC1/PTPRC/C9/IGHV3-73/IGHV3-43/KMT5C/IGHV1-18/CLCF1/CD70/IGHV3-48/IGHV3-15/IGHG4/IGKC/C3/TREM2/CFI/IGHV5-10-1/IGHV3-49/IGHV4-39/IGHV1-69/IGHV3-74/IGHV7-4-1/IGLC6/IGHV6-1/IGHE/CD55/IGLC2/IGHV1-3/IGHV3-11/IGHV3-64D/IGHG2/IGHG1/IGHV1-69D/IGHG3/IGHV3-23/IGHV1-58/IGHA1/C2/IGHV3-16/IGLC3/BCL3/FCGR3B/IGHD/IGHV3-13/IGHA2/IGHV3-7/CR2/IGHV3-53/NFKBIZ/IGHV3-33/IGHV5-51/IGHV3-20/IGHV3-30/IGLC7/IGHV3-72/IGHV4-28/IGHV4-4
#> GO:0016064                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         C5/SERPING1/CR1/TLR8/FCER1G/CD19/LIG4/HSPD1/IL10/IGHV3-66/FCMR/FCGR2A/IGHV4-61/CLU/BCL6/TFRC/FCGR3A/IGLL5/IGLC1/PTPRC/C9/IGHV3-73/IGHV3-43/KMT5C/IGHV1-18/CLCF1/IGHV3-48/IGHV3-15/IGHG4/IGKC/C3/TREM2/CFI/IGHV5-10-1/IGHV3-49/IGHV4-39/IGHV1-69/IGHV3-74/IGHV7-4-1/IGLC6/IGHV6-1/IGHE/CD55/IGLC2/IGHV1-3/IGHV3-11/IGHV3-64D/IGHG2/IGHG1/IGHV1-69D/IGHG3/IGHV3-23/IGHV1-58/IGHA1/C2/IGHV3-16/IGLC3/BCL3/FCGR3B/IGHD/IGHV3-13/IGHA2/IGHV3-7/CR2/IGHV3-53/NFKBIZ/IGHV3-33/IGHV5-51/IGHV3-20/IGHV3-30/IGLC7/IGHV3-72/IGHV4-28/IGHV4-4
#> GO:0035195                                                                                                                                                                                                                                                                               MIR30D/MIR29A/MIRLET7G/MIR181B1/MIR362/MIR503/MIR425/MIR195/MIR103A2/MIRLET7A3/MIRLET7A1/MIRLET7B/MIRLET7D/MIR708/MIR148B/MIR99A/MIR345/MIRLET7C/MIR130A/MIR27B/MIR30B/MIR193A/MIR30C1/MIR107/MIR190A/MIR29B2/MIR501/MIR331/MIR23B/MIR326/MIR1251/MIR125B2/MIR98/MIR204/MIR532/MIR126/MIR3184/MIR24-1/MIR497/MIR188/MIRLET7F2/MIR29C/LIN28A/MIR455/MIRLET7F1/MIR101-1/MIRLET7I/MIR106B/MIR339/MIR191/MIR194-2/MIR93/MIR3074/MIR135A2/MIR30E/MIR500A/MIR196B/MIR152/MIR187/MIR125B1/MIR575/MIR10A/MIR224/MIR143/MIR219A1/MIR135B/MIRLET7A2/MIR500B/MIR25/MIR657/MIR574/MIR200B/MIR185/MIR378A/MIR3619/MIR214/MIRLET7E/MIR423/MIR26A1/MIR197/MIR28/MIR9-2HG/MIR615/MIR3120/MIR940/MIR26B/MIR1306/MIR1207/MIR192/MIR1225/MIR10B/MIR589/MIR365A

A ridge plot provides a density overview of enrichment score distributions across top GO terms:

ridgeplot(gsea_go, showCategory = 15)

6.5 Session information

sessionInfo()
#> R version 4.5.2 (2025-10-31)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] org.Hs.eg.db_3.22.0    AnnotationDbi_1.72.0   IRanges_2.44.0        
#>  [4] S4Vectors_0.48.0       Biobase_2.70.0         BiocGenerics_0.56.0   
#>  [7] generics_0.1.4         clusterProfiler_4.18.4 aplot_0.2.9           
#> [10] ggrepel_0.9.7          ggtangle_0.1.1         igraph_2.2.2          
#> [13] ggplot2_4.0.2          dplyr_1.2.0            aplotExtra_0.0.4      
#> [16] ivolcano_0.0.5         enrichplot_1.30.5      TCMDATA_0.0.0.9000    
#> 
#> loaded via a namespace (and not attached):
#>   [1] RColorBrewer_1.1-3      shape_1.4.6.1           rstudioapi_0.18.0      
#>   [4] jsonlite_2.0.0          tidydr_0.0.6            magrittr_2.0.4         
#>   [7] farver_2.1.2            rmarkdown_2.30          GlobalOptions_0.1.3    
#>  [10] fs_1.6.7                vctrs_0.7.1             memoise_2.0.1          
#>  [13] paletteer_1.7.0         ggtree_4.0.4            htmltools_0.5.9        
#>  [16] forcats_1.0.1           gridGraphics_0.5-1      sass_0.4.10            
#>  [19] bslib_0.10.0            htmlwidgets_1.6.4       plyr_1.8.9             
#>  [22] cachem_1.1.0            iterators_1.0.14        lifecycle_1.0.5        
#>  [25] pkgconfig_2.0.3         Matrix_1.7-4            R6_2.6.1               
#>  [28] fastmap_1.2.0           gson_0.1.0              clue_0.3-67            
#>  [31] digest_0.6.39           colorspace_2.1-2        ggnewscale_0.5.2       
#>  [34] rematch2_2.1.2          patchwork_1.3.2         maftools_2.26.0        
#>  [37] RSQLite_2.4.6           labeling_0.4.3          httr_1.4.8             
#>  [40] polyclip_1.10-7         compiler_4.5.2          bit64_4.6.0-1          
#>  [43] fontquiver_0.2.1        withr_3.0.2             doParallel_1.0.17      
#>  [46] S7_0.2.1                BiocParallel_1.44.0     DBI_1.3.0              
#>  [49] ggforce_0.5.0           R.utils_2.13.0          MASS_7.3-65            
#>  [52] rappdirs_0.3.4          rjson_0.2.23            DNAcopy_1.84.0         
#>  [55] tools_4.5.2             ape_5.8-1               scatterpie_0.2.6       
#>  [58] R.oo_1.27.1             glue_1.8.0              nlme_3.1-168           
#>  [61] GOSemSim_2.36.0         grid_4.5.2              ggvenn_0.1.19          
#>  [64] cluster_2.1.8.1         reshape2_1.4.5          fgsea_1.36.2           
#>  [67] gtable_0.3.6            R.methodsS3_1.8.2       tidyr_1.3.2            
#>  [70] data.table_1.18.2.1     XVector_0.50.0          foreach_1.5.2          
#>  [73] pillar_1.11.1           stringr_1.6.0           yulab.utils_0.2.4      
#>  [76] circlize_0.4.17         splines_4.5.2           tweenr_2.0.3           
#>  [79] treeio_1.34.0           lattice_0.22-7          survival_3.8-3         
#>  [82] bit_4.6.0               tidyselect_1.2.1        fontLiberation_0.1.0   
#>  [85] GO.db_3.22.0            ComplexHeatmap_2.26.1   Biostrings_2.78.0      
#>  [88] knitr_1.51              fontBitstreamVera_0.1.1 gridExtra_2.3          
#>  [91] bookdown_0.46           Seqinfo_1.0.0           xfun_0.56              
#>  [94] matrixStats_1.5.0       stringi_1.8.7           lazyeval_0.2.2         
#>  [97] ggfun_0.2.0             yaml_2.3.12             evaluate_1.0.5         
#> [100] codetools_0.2-20        gdtools_0.5.0           tibble_3.3.1           
#> [103] qvalue_2.42.0           ggplotify_0.1.3         cli_3.6.5              
#> [106] systemfonts_1.3.2       jquerylib_0.1.4         Rcpp_1.1.1             
#> [109] png_0.1-8               parallel_4.5.2          blob_1.3.0             
#> [112] ggalluvial_0.12.6       DOSE_4.4.0              ggstar_1.0.6           
#> [115] tidytree_0.4.7          ggiraph_0.9.6           ggridges_0.5.7         
#> [118] scales_1.4.0            purrr_1.2.1             crayon_1.5.3           
#> [121] GetoptLong_1.1.0        rlang_1.1.7             cowplot_1.2.0          
#> [124] fastmatch_1.1-8         KEGGREST_1.50.0