zenith performs gene set analysis on the result of differential expression using linear (mixed) modeling with dream by considering the correlation between gene expression traits. This package implements the camera method from the limma package proposed by Wu and Smyth (2012). zenith() is a simple extension of camera() to be compatible with linear (mixed) models implemented in dream().

Standard workflow

# Load packages
library(zenith)
library(edgeR)
library(variancePartition)
library(tweeDEseqCountData)
library(kableExtra)

# Load RNA-seq data from LCL's
data(pickrell)
geneCounts = exprs(pickrell.eset)
df_metadata = pData(pickrell.eset)

# Filter genes
# Note this is low coverage data, so just use as code example
dsgn = model.matrix(~ gender, df_metadata)
keep = filterByExpr(geneCounts, dsgn, min.count=5)

# Compute library size normalization
dge = DGEList(counts = geneCounts[keep,])
dge = calcNormFactors(dge)

# Estimate precision weights using voom
vobj = voomWithDreamWeights(dge, ~ gender, df_metadata)

# Apply dream analysis
fit = dream(vobj, ~ gender, df_metadata)
fit = eBayes(fit)

# Load get_MSigDB database, Hallmark genes
# use gene 'SYMBOL', or 'ENSEMBL' id
# use get_GeneOntology() to load Gene Ontology
msdb.gs = get_MSigDB("H", to="ENSEMBL")
   
# Run zenith analysis, and specific which coefficient to evaluate
res.gsa = zenith_gsa(fit, msdb.gs, 'gendermale', progressbar=FALSE )

# Show top gene sets: head(res.gsa)
kable_styling(kable(head(res.gsa), row.names=FALSE))
coef Geneset NGenes Correlation delta se p.less p.greater PValue Direction FDR
gendermale M5890_HALLMARK_TNFA_SIGNALING_VIA_NFKB 118 0.01 -0.9999389 0.1621467 0.0000000 1.0000000 0.0000000 Down 0.0000021
gendermale M5892_HALLMARK_CHOLESTEROL_HOMEOSTASIS 37 0.01 -1.0915363 0.2296170 0.0000055 0.9999945 0.0000110 Down 0.0002582
gendermale M5932_HALLMARK_INFLAMMATORY_RESPONSE 93 0.01 -0.7819360 0.1722474 0.0000120 0.9999880 0.0000241 Down 0.0003769
gendermale M5947_HALLMARK_IL2_STAT5_SIGNALING 105 0.01 -0.6493291 0.1672385 0.0001194 0.9998806 0.0002389 Down 0.0028066
gendermale M5930_HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION 53 0.01 -0.6136470 0.2031832 0.0017867 0.9982133 0.0035735 Down 0.0335905
gendermale M5925_HALLMARK_E2F_TARGETS 109 0.01 0.4817527 0.1659106 0.9975051 0.0024949 0.0049898 Up 0.0355160
# for each cell type select 3 genesets with largest t-statistic
# and 1 geneset with the lowest
# Grey boxes indicate the gene set could not be evaluted because
#    to few genes were represented
plotZenithResults(res.gsa)

Session Info

## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
## 
## Matrix products: default
## BLAS:   /media/volume/teran2_disk/biocbuild/bbs-3.20-bioc/R/lib/libRblas.so 
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_GB              LC_COLLATE=C              
##  [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: America/New_York
## 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.20.0       AnnotationDbi_1.68.0     
##  [3] IRanges_2.40.0            S4Vectors_0.44.0         
##  [5] msigdbr_7.5.1             kableExtra_1.4.0         
##  [7] tweeDEseqCountData_1.44.0 Biobase_2.66.0           
##  [9] BiocGenerics_0.52.0       variancePartition_1.36.1 
## [11] BiocParallel_1.40.0       ggplot2_3.5.1            
## [13] edgeR_4.4.0               zenith_1.8.0             
## [15] limma_3.62.1              knitr_1.48               
## 
## loaded via a namespace (and not attached):
##   [1] rstudioapi_0.17.1           jsonlite_1.8.9             
##   [3] magrittr_2.0.3              farver_2.1.2               
##   [5] nloptr_2.1.1                rmarkdown_2.29             
##   [7] zlibbioc_1.52.0             vctrs_0.6.5                
##   [9] memoise_2.0.1               minqa_1.2.8                
##  [11] RCurl_1.98-1.16             htmltools_0.5.8.1          
##  [13] S4Arrays_1.6.0              progress_1.2.3             
##  [15] curl_6.0.0                  broom_1.0.7                
##  [17] SparseArray_1.6.0           sass_0.4.9                 
##  [19] KernSmooth_2.23-24          bslib_0.8.0                
##  [21] pbkrtest_0.5.3              plyr_1.8.9                 
##  [23] cachem_1.1.0                lifecycle_1.0.4            
##  [25] iterators_1.0.14            pkgconfig_2.0.3            
##  [27] Matrix_1.7-1                R6_2.5.1                   
##  [29] fastmap_1.2.0               GenomeInfoDbData_1.2.13    
##  [31] rbibutils_2.3               MatrixGenerics_1.18.0      
##  [33] digest_0.6.37               numDeriv_2016.8-1.1        
##  [35] colorspace_2.1-1            GenomicRanges_1.58.0       
##  [37] RSQLite_2.3.7               labeling_0.4.3             
##  [39] filelock_1.0.3              RcppZiggurat_0.1.6         
##  [41] fansi_1.0.6                 httr_1.4.7                 
##  [43] abind_1.4-8                 compiler_4.4.1             
##  [45] withr_3.0.2                 bit64_4.5.2                
##  [47] aod_1.3.3                   backports_1.5.0            
##  [49] DBI_1.2.3                   highr_0.11                 
##  [51] gplots_3.2.0                MASS_7.3-61                
##  [53] DelayedArray_0.32.0         corpcor_1.6.10             
##  [55] gtools_3.9.5                caTools_1.18.3             
##  [57] tools_4.4.1                 remaCor_0.0.18             
##  [59] glue_1.8.0                  nlme_3.1-166               
##  [61] grid_4.4.1                  reshape2_1.4.4             
##  [63] generics_0.1.3              gtable_0.3.6               
##  [65] tidyr_1.3.1                 hms_1.1.3                  
##  [67] xml2_1.3.6                  utf8_1.2.4                 
##  [69] XVector_0.46.0              pillar_1.9.0               
##  [71] stringr_1.5.1               babelgene_22.9             
##  [73] splines_4.4.1               dplyr_1.1.4                
##  [75] BiocFileCache_2.14.0        lattice_0.22-6             
##  [77] bit_4.5.0                   annotate_1.84.0            
##  [79] tidyselect_1.2.1            locfit_1.5-9.10            
##  [81] Biostrings_2.74.0           SummarizedExperiment_1.36.0
##  [83] svglite_2.1.3               RhpcBLASctl_0.23-42        
##  [85] xfun_0.49                   statmod_1.5.0              
##  [87] matrixStats_1.4.1           KEGGgraph_1.66.0           
##  [89] stringi_1.8.4               UCSC.utils_1.2.0           
##  [91] yaml_2.3.10                 boot_1.3-31                
##  [93] evaluate_1.0.1              codetools_0.2-20           
##  [95] tibble_3.2.1                Rgraphviz_2.50.0           
##  [97] graph_1.84.0                cli_3.6.3                  
##  [99] RcppParallel_5.1.9          systemfonts_1.1.0          
## [101] xtable_1.8-4                Rdpack_2.6.1               
## [103] munsell_0.5.1               jquerylib_0.1.4            
## [105] Rcpp_1.0.13-1               GenomeInfoDb_1.42.0        
## [107] EnvStats_3.0.0              dbplyr_2.5.0               
## [109] png_0.1-8                   XML_3.99-0.17              
## [111] parallel_4.4.1              Rfast_2.1.0                
## [113] blob_1.2.4                  prettyunits_1.2.0          
## [115] bitops_1.0-9                lme4_1.1-35.5              
## [117] viridisLite_0.4.2           mvtnorm_1.3-2              
## [119] GSEABase_1.68.0             lmerTest_3.1-3             
## [121] scales_1.3.0                purrr_1.0.2                
## [123] crayon_1.5.3                fANCOVA_0.6-1              
## [125] rlang_1.1.4                 EnrichmentBrowser_2.36.0   
## [127] KEGGREST_1.46.0