Exploratory, statistical and survival analysis of cancer genomic data is extremely important and can lead to new discoveries, such as the identification of novel genomic prognostic markers, that have the potential to advance our understanding of cancer and ultimately benefit patients. These analyses are often performed on data available from a number of consortia websites, such as cBio Cancer Genomics Portal (cBioPortal), which is one of the best known and commonly used consolidated curations that hosts data from large consortium efforts. While cBioPortal provides both graphical user interface (GUI)-based and representational state transfer mediated means for researchers to explore and analyse clinical and genomics data, its capabilities have their limitations and oftentimes, to explore specific hypotheses, users need to perform a more sophisticated ‘off site’ analysis that typically requires users to have some prior programming experience.
To overcome these limitations and provide a GUI that facilitates the visualisation and interrogation of cancer genomics data, particularly cBioPortal-hosted data, using standard biostatistical methodologies, we developed an R Shiny app called GeNomics explOrer using StatistIcal and Survival analysis in R (GNOSIS). GNOSIS was initially developed as part of our study, using the METABRIC data, to investigate whether survival outcomes are associated with genomic instability in luminal breast cancers and was further developed to enable the exploration, analysis and incorporation of a diverse range of genomic features with clinical data in a research or clinical setting.
GNOSIS leverages a number of R packages and provides an intuitive GUI with multiple tab panels supporting a range of functionalities, including data upload and initial exploration, data recoding and subsetting, data visualisations, statistical analysis, mutation analysis and, in particular, survival analysis to identify prognostic markers. In addition, GNOSIS also helps researchers carry out reproducible research by providing downloadable input logs (Shiny_Log.txt) from each session.
GNOSIS has been submitted to Bioconductor to aid researchers in carrying out a reproducable, comprehensive statistical and survival analysis using data obtained from cBioPortal, or otherwise.
if (!requireNamespace("BiocManager", quietly = TRUE)) {
install.packages("BiocManager")
}
BiocManager::install("GNOSIS")
library(GNOSIS)
GNOSIS()
The GNOSIS GUI has 4 main elements: (1) A sidebar where each analysis tab can be selected, the Exploratory Tables tab is selected and displayed. (2) Tab panels within each tab, allowing multiple operations to be carried out and viewed in the one tab. (3) A box sidebar allowing users to select inputs, alter arguments and customise and export visualisations. (4) Main viewing panel displaying output.
Users can upload their own clinical, CNA or mutation data stored on their local machine, or select a cBioPortal study to upload:
A preview of the uploaded/selected data is provided in the GNOSIS viewing panel to ensure that the data has been read in correctly:
In the case where a cBioPortal study does not contain CNA and/or MAF data, a warning will be produced alerting users to this.
In addition, users can select specific columns of each dataframe to inspect:
To prepare the data for downstream analysis a number a things can be done. Firstly users can change the type of variables to numeric or factors using the box sidebar, which contains a space to select relevant variables:
Subsequently, users can subset the data based on up to three categorical variables and carry out survival variable recoding.
Here we filter the data to only include patients who received chemotherapy:
We also recode the overall and disease-specific survival to 0/1:
In cases where CNA data is uploaded, users may produce and segment CNA metrics for each patient, as well as select and extract specific genes for further analysis:
Users can produce a range of visualisations including boxplots, scatterplots, barplots, histograms and density plots.
Here is an example of a customisable boxplot, that can also be downloaded:
The primary function offered by GNOSIS is statistically robust survival analysis. GNOSIS contains several step-wise tabs to provide a complete survival analysis of the data under investigation.
Users can produce KM survival curves and the corresponding logrank tests to identify survival-associated categorical variables, both visually and statistically.
Users can perform a selection of association tests to identify variables that are associated with each other. This enables users to identify potential confounding variables in the analysis.
Statistical association tests available include the Chi-squared test, Fisher’s exact test, simulated Fisher’s exact test, ANOVA, Kruskal-Wallis test, pairwise t-test and Dunn’s test.
Users can produce both univariate and multivariable Cox models to identify survival-associated variables, and test the assumptions of these models using graphical diagnostics based on the scaled Schoenfeld residuals:
The corresponding adjusted survival curves, survival curves adjusted for the covariates in the multivariable Cox model, can also be produced and customised:
In the case where the PH assumption of the multivariable Cox model is violated, users can apply recursive partitioning survival trees:
An additional function of GNOSIS is the ability to summarise, analyse and visualise mutation annotation format (MAF) files using maftools.
GNOSIS facilitates reproducible research by allowing users to download an input log containing information on all the inputs selected throughout the session:
For details on the implementation, layout and application of GNOSIS see the corresponding publication. Demonstration videos providing a walkthrough of GNOSIS are also provided on Zenodo.
sessionInfo()
## R version 4.4.0 beta (2024-04-15 r86425)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 22.04.4 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.19-bioc/R/lib/libRblas.so
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.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: America/New_York
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] GNOSIS_1.2.0 maftools_2.20.0 operator.tools_1.6.3
## [4] lubridate_1.9.3 forcats_1.0.0 stringr_1.5.1
## [7] dplyr_1.1.4 purrr_1.0.2 readr_2.1.5
## [10] tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.1
## [13] tidyverse_2.0.0 shinymeta_0.2.0.3 shinyWidgets_0.8.6
## [16] dashboardthemes_1.1.6 shinydashboardPlus_2.0.4 shinydashboard_0.7.2
## [19] shiny_1.8.1.1 BiocStyle_2.32.0
##
## loaded via a namespace (and not attached):
## [1] matrixStats_1.3.0 bitops_1.0-7
## [3] fontawesome_0.5.2 httr_1.4.7
## [5] RColorBrewer_1.1-3 GenomicDataCommons_1.28.0
## [7] tools_4.4.0 backports_1.4.1
## [9] utf8_1.2.4 R6_2.5.1
## [11] DT_0.33 jomo_2.7-6
## [13] withr_3.0.0 gridExtra_2.3
## [15] TCGAutils_1.24.0 cli_3.6.2
## [17] Biobase_2.64.0 textshaping_0.3.7
## [19] formatR_1.14 shinyjs_2.1.0
## [21] officer_0.6.5 sass_0.4.9
## [23] survMisc_0.5.6 mvtnorm_1.2-4
## [25] proxy_0.4-27 askpass_1.2.0
## [27] rapiclient_0.1.4 Rsamtools_2.20.0
## [29] systemfonts_1.0.6 svglite_2.1.3
## [31] gfonts_0.2.0 R.utils_2.12.3
## [33] sourcetools_0.1.7-1 styler_1.10.3
## [35] readxl_1.4.3 httpcode_0.3.0
## [37] rstudioapi_0.16.0 RSQLite_2.3.6
## [39] generics_0.1.3 shape_1.4.6.1
## [41] BiocIO_1.14.0 car_3.1-2
## [43] zip_2.3.1 Matrix_1.7-0
## [45] futile.logger_1.4.3 fansi_1.0.6
## [47] DescTools_0.99.54 S4Vectors_0.42.0
## [49] abind_1.4-5 R.methodsS3_1.8.2
## [51] lifecycle_1.0.4 yaml_2.3.8
## [53] inum_1.0-5 carData_3.0-5
## [55] SummarizedExperiment_1.34.0 RaggedExperiment_1.28.0
## [57] SparseArray_1.4.0 BiocFileCache_2.12.0
## [59] grid_4.4.0 blob_1.2.4
## [61] promises_1.3.0 crayon_1.5.2
## [63] mitml_0.4-5 miniUI_0.1.1.1
## [65] lattice_0.22-6 AnVIL_1.16.0
## [67] GenomicFeatures_1.56.0 chromote_0.2.0
## [69] KEGGREST_1.44.0 pillar_1.9.0
## [71] knitr_1.46 GenomicRanges_1.56.0
## [73] rjson_0.2.21 boot_1.3-30
## [75] gld_2.6.6 codetools_0.2-20
## [77] cBioPortalData_2.16.0 compareGroups_4.8.0
## [79] pan_1.9 glue_1.7.0
## [81] fontLiberation_0.1.0 data.table_1.15.4
## [83] MultiAssayExperiment_1.30.0 vctrs_0.6.5
## [85] png_0.1-8 cellranger_1.1.0
## [87] gtable_0.3.5 cachem_1.0.8
## [89] xfun_0.43 S4Arrays_1.4.0
## [91] mime_0.12 libcoin_1.0-10
## [93] survival_3.6-4 RTCGAToolbox_2.34.0
## [95] iterators_1.0.14 KMsurv_0.1-5
## [97] nlme_3.1-164 RcppCCTZ_0.2.12
## [99] bit64_4.0.5 fontquiver_0.2.1
## [101] filelock_1.0.3 GenomeInfoDb_1.40.0
## [103] R.cache_0.16.0 bslib_0.7.0
## [105] rpart_4.1.23 colorspace_2.1-0
## [107] BiocGenerics_0.50.0 DBI_1.2.2
## [109] nnet_7.3-19 DNAcopy_1.78.0
## [111] Exact_3.2 tidyselect_1.2.1
## [113] processx_3.8.4 bit_4.0.5
## [115] compiler_4.4.0 curl_5.2.1
## [117] chron_2.3-61 glmnet_4.1-8
## [119] rvest_1.0.4 HardyWeinberg_1.7.8
## [121] flextable_0.9.5 mice_3.16.0
## [123] expm_0.999-9 xml2_1.3.6
## [125] nanotime_0.3.7 fontBitstreamVera_0.1.1
## [127] DelayedArray_0.30.0 bookdown_0.39
## [129] rtracklayer_1.64.0 scales_1.3.0
## [131] rappdirs_0.3.3 digest_0.6.35
## [133] minqa_1.2.6 rmarkdown_2.26
## [135] XVector_0.44.0 htmltools_0.5.8.1
## [137] pkgconfig_2.0.3 lme4_1.1-35.3
## [139] MatrixGenerics_1.16.0 highr_0.10
## [141] dbplyr_2.5.0 fastmap_1.1.1
## [143] rlang_1.1.3 htmlwidgets_1.6.4
## [145] UCSC.utils_1.0.0 jquerylib_0.1.4
## [147] zoo_1.8-12 jsonlite_1.8.8
## [149] BiocParallel_1.38.0 R.oo_1.26.0
## [151] RCurl_1.98-1.14 magrittr_2.0.3
## [153] Formula_1.2-5 kableExtra_1.4.0
## [155] GenomeInfoDbData_1.2.12 munsell_0.5.1
## [157] Rcpp_1.0.12 shinycssloaders_1.0.0
## [159] gdtools_0.3.7 partykit_1.2-20
## [161] stringi_1.8.3 rootSolve_1.8.2.4
## [163] RJSONIO_1.3-1.9 zlibbioc_1.50.0
## [165] MASS_7.3-60.2 plyr_1.8.9
## [167] parallel_4.4.0 shinylogs_0.2.1
## [169] lmom_3.0 survminer_0.4.9
## [171] Biostrings_2.72.0 splines_4.4.0
## [173] hms_1.1.3 anytime_0.3.9
## [175] ps_1.7.6 ggpubr_0.6.0
## [177] uuid_1.2-0 ggsignif_0.6.4
## [179] reshape2_1.4.4 stats4_4.4.0
## [181] futile.options_1.0.1 crul_1.4.2
## [183] XML_3.99-0.16.1 evaluate_0.23
## [185] lambda.r_1.2.4 BiocManager_1.30.22
## [187] fabricatr_1.0.2 nloptr_2.0.3
## [189] tzdb_0.4.0 foreach_1.5.2
## [191] httpuv_1.6.15 openssl_2.1.2
## [193] km.ci_0.5-6 BiocBaseUtils_1.6.0
## [195] broom_1.0.5 xtable_1.8-4
## [197] restfulr_0.0.15 e1071_1.7-14
## [199] rstatix_0.7.2 Rsolnp_1.16
## [201] later_1.3.2 viridisLite_0.4.2
## [203] class_7.3-22 ragg_1.3.0
## [205] truncnorm_1.0-9 websocket_1.4.1
## [207] memoise_2.0.1 AnnotationDbi_1.66.0
## [209] GenomicAlignments_1.40.0 IRanges_2.38.0
## [211] writexl_1.5.0 timechange_0.3.0