Author: Xiaoxi DongKovidh Vegesna, kvegesna (AT) uncc.eduWeijun Luo, luo_weijun (AT) yahoo.com

# SBGNview Based Pathway Analysis and Visualization Workflow

# Introduction

SBGNview has collected pathway data and gene sets from the following databases: Reactome, PANTHER Pathway, SMPDB, MetaCyc and MetaCrop. These gene sets can be used for pathway enrichment analysis.

In this vignette, we will show you a complete pathway analysis workflow based on GAGE + SBGNview. Similar workflows have been documented in the gage package using GAGE + Pathview.

# Citation

Please cite the following papers when using the open-source SBGNview package. This will help the project and our team:

Luo W, Brouwer C. Pathview: an R/Biocondutor package for pathway-based data integration and visualization. Bioinformatics, 2013, 29(14):1830-1831, doi: 10.1093/bioinformatics/btt285

Please also cite the GAGE paper when using the gage package:

Luo W, Friedman M, etc. GAGE: generally applicable gene set enrichment for pathway analysis. BMC Bioinformatics, 2009, 10, pp. 161, doi: 10.1186/1471-2105-10-161

# Installation and quick start

Please see the Quick Start tutorial for installation instructions and quick start examples.

# Complete pathway analysis + visualization workflow

In this example, we analyze a RNA-Seq dataset of IFNg KO mice vs wild type mice. It contains normalized RNA-seq gene expression data described in Greer, Renee L., Xiaoxi Dong, et al, 2016.

## Load the gene (RNA-seq) data

The RNA abundance data was quantile normalized and log2 transformed, stored in a “SummarizedExperiment” object. SBGNview input user data (gene.data or cpd.data) can be either a numeric matrix or a vector, like those in pathview. In addition, it can be a “SummarizedExperiment” object, which is commonly used in BioConductor packages.

    library(SBGNview)
    library(SummarizedExperiment)
    data("IFNg", "pathways.info")
    count.data <- assays(IFNg)$counts
    head(count.data)
    wt.cols <- which(IFNg$group == "wt")
    ko.cols <- which(IFNg$group == "ko")

## Gene sets from SBGNview pathway collection

### Load gene set for mouse with ENSEMBL gene IDs

    ensembl.pathway <- sbgn.gsets(id.type = "ENSEMBL",
                                  species = "mmu",
                                  mol.type = "gene",
                                  output.pathway.name = TRUE
                                  )
    head(ensembl.pathway[[2]])

### Pathway or gene set analysis using GAGE

    if(!requireNamespace("gage", quietly = TRUE)) {
      BiocManager::install("gage", update = FALSE)
    }

    library(gage)
    degs <- gage(exprs = count.data,
               gsets = ensembl.pathway,
               ref = wt.cols,
               samp = ko.cols,
               compare = "paired" #"as.group"
               )
    head(degs$greater)[,3:5]
    head(degs$less)[,3:5]
    down.pathways <- row.names(degs$less)[1:10]
    head(down.pathways)

## Visualize perturbations in top SBGN pathways

### Calculate fold changes or gene perturbations

The abundance values were log2 transformed. Here we calculate the fold change of IFNg KO group v.s. WT group.

    ensembl.koVsWt <- count.data[,ko.cols]-count.data[,wt.cols]
    head(ensembl.koVsWt)

    #alternatively, we can also calculate mean fold changes per gene, which corresponds to gage analysis above with compare="as.group"
    mean.wt <- apply(count.data[,wt.cols] ,1 ,"mean")
    head(mean.wt)
    mean.ko <- apply(count.data[,ko.cols],1,"mean")
    head(mean.ko)
    # The abundance values were on log scale. Hence fold change is their difference.
    ensembl.koVsWt.m <- mean.ko - mean.wt

### Visualize pathway perturbations by SBNGview

    #load the SBGNview pathway collection, which may takes a few seconds.
    data(sbgn.xmls)
    down.pathways <- sapply(strsplit(down.pathways,"::"), "[", 1)
    head(down.pathways)
    sbgnview.obj <- SBGNview(
        gene.data = ensembl.koVsWt,
        gene.id.type = "ENSEMBL",
        input.sbgn = down.pathways[1:2],#can be more than 2 pathways
        output.file = "ifn.sbgnview.less",
        show.pathway.name = TRUE,
        max.gene.value = 2,
        min.gene.value = -2,
        mid.gene.value = 0,
        node.sum = "mean",
        output.format = c("png"),

        font.size = 2.3,
        org = "mmu",

        text.length.factor.complex = 3,
        if.scale.compartment.font.size = TRUE,
        node.width.adjust.factor.compartment = 0.04
    )
    sbgnview.obj

## SBGNview with SummarizedExperiment object

The ‘cancer.ds’ is a microarray dataset from a breast cancer study. The dataset was adopted from gage package and processed into a SummarizedExperiment object. It is used to demo SBGNview’s visualization ability.

    data("cancer.ds")
    sbgnview.obj <- SBGNview(
        gene.data = cancer.ds,
        gene.id.type = "ENTREZID",
        input.sbgn = "R-HSA-877300",
        output.file = "demo.SummarizedExperiment",
        show.pathway.name = TRUE,
        max.gene.value = 1,
        min.gene.value = -1,
        mid.gene.value = 0,
        node.sum = "mean",
        output.format = c("png"),

        font.size = 2.3,
        org = "hsa",

        text.length.factor.complex = 3,
        if.scale.compartment.font.size = TRUE,
        node.width.adjust.factor.compartment = 0.04
       )
    sbgnview.obj

SBGNview of a cancer dataset gse16873

# Session Info

    sessionInfo()

    ## R version 4.6.0 (2026-04-24)
    ## Platform: x86_64-pc-linux-gnu
    ## Running under: Ubuntu 24.04.4 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: Etc/UTC
    ## tzcode source: system (glibc)
    ##
    ## attached base packages:
    ## [1] stats4    stats     graphics  grDevices utils     datasets  methods
    ## [8] base
    ##
    ## other attached packages:
    ##  [1] knitr_1.51                  gage_2.62.0
    ##  [3] SummarizedExperiment_1.42.0 Biobase_2.72.0
    ##  [5] GenomicRanges_1.64.0        Seqinfo_1.2.0
    ##  [7] IRanges_2.46.0              S4Vectors_0.50.0
    ##  [9] BiocGenerics_0.58.0         generics_0.1.4
    ## [11] MatrixGenerics_1.24.0       matrixStats_1.5.0
    ## [13] SBGNview_1.26.0             SBGNview.data_1.24.0
    ## [15] pathview_1.52.0             bookdown_0.46
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] KEGGREST_1.52.0      xfun_0.57            bslib_0.10.0
    ##  [4] lattice_0.22-9       vctrs_0.7.3          tools_4.6.0
    ##  [7] Rdpack_2.6.6         bitops_1.0-9         AnnotationDbi_1.74.0
    ## [10] RSQLite_2.4.6        blob_1.3.0           pkgconfig_2.0.3
    ## [13] Matrix_1.7-5         graph_1.90.0         lifecycle_1.0.5
    ## [16] compiler_4.6.0       Biostrings_2.80.0    htmltools_0.5.9
    ## [19] sys_3.4.3            buildtools_1.0.0     sass_0.4.10
    ## [22] RCurl_1.98-1.18      yaml_2.3.12          GO.db_3.22.0
    ## [25] crayon_1.5.3         jquerylib_0.1.4      cachem_1.1.0
    ## [28] DelayedArray_0.38.1  org.Hs.eg.db_3.22.0  abind_1.4-8
    ## [31] digest_0.6.39        maketools_1.3.2      rsvg_2.7.0
    ## [34] fastmap_1.2.0        grid_4.6.0           cli_3.6.6
    ## [37] SparseArray_1.12.0   magrittr_2.0.5       S4Arrays_1.12.0
    ## [40] XML_3.99-0.23        bit64_4.8.0          rmarkdown_2.31
    ## [43] XVector_0.52.0       httr_1.4.8           igraph_2.3.0
    ## [46] bit_4.6.0            png_0.1-9            memoise_2.0.1
    ## [49] evaluate_1.0.5       rbibutils_2.4.1      rlang_1.2.0
    ## [52] DBI_1.3.0            Rgraphviz_2.56.0     xml2_1.5.2
    ## [55] KEGGgraph_1.72.0     jsonlite_2.0.0       R6_2.6.1