selectKSigs: a package for selecting the number of mutational signatures

Introduction

The R package HiLDA is developed under the Bayesian framework to select the number of mutational signatures based on perplexity and cross-validation. The mutation signature is defined based on the independent model proposed by Shiraishi’s et al. 

Paper

  • Shiraishi et al. A simple model-based approach to inferring and visualizing cancer mutation signatures, bioRxiv, doi: http://dx.doi.org/10.1101/019901.

  • Zhi Yang, Paul Marjoram, Kimberly D. Siegmund. Selecting the number of mutational signatures using a perplexity-based measure and cross-validation.

Installing and loading the package

Installation

Bioconductor

selectKSigs requires several CRAN and Bioconductor R packages to be installed. Dependencies are usually handled automatically, when installing the package using the following commands:

install.packages("BiocManager")
BiocManager::install("selectKSigs")

[NOTE: Ignore the first line if you already have installed the BiocManager.]

You can also download the newest version from the GitHub using devtools:

devtools::install_github("USCbiostats/selectKSigs")

Input data

selectKSigs is a package built on some basic functions from pmsignature including how to read the input data. Here is an example from pmsignature on the input data, mutation features are elements used for categorizing mutations such as:

  • 6 substitutions (C>A, C>G, C>T, T>A, T>C and T>G)
  • 2 flanking bases (A, C, G and T)
  • transcription direction.

Mutation Position Format

sample1 chr1  100   A   C   
sample1 chr1    200 A   T   
sample1 chr2    100 G   T   
sample2 chr1    300 T   C   
sample3 chr3    400 T   C   
  • The 1st column shows the name of samples
  • The 2nd column shows the name of chromosome
  • The 3rd column shows the coordinate in the chromosome
  • The 4th column shows the reference base (A, C, G, or T).
  • The 5th colum shows the alternate base (A, C, G, or T).

Workflow

Get input data

Here, inputFile is the path for the input file. numBases is the number of flanking bases to consider including the central base (if you want to consider two 5’ and 3’ bases, then set 5). Also, you can add transcription direction information using trDir. numSig sets the number of mutation signatures estimated from the input data. You will see a warning message on some mutations are being removed.

library(HiLDA)
## Loading required package: ggplot2
library(tidyr)
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
inputFile <- system.file("extdata/esophageal.mp.txt.gz", package="HiLDA")
G <- hildaReadMPFile(inputFile, numBases=5, trDir=TRUE)
## Warning: multiple methods tables found for 'intersect'
## Warning: multiple methods tables found for 'union'
## Warning: multiple methods tables found for 'intersect'
## Warning: multiple methods tables found for 'setdiff'
## Warning: multiple methods tables found for 'intersect'
## Warning in hildaReadMPFile(inputFile, numBases = 5, trDir = TRUE): Out of 24861
## mutations, we could obtaintranscription direction information for 24728
## mutation. Other mutations are removed.

Also, we also provided a small simulated dataset which contains 10 mutational catalogs and used it for demonstrating the key functions in selectKSigs. We start with loading the sample dataset G stored as extdata/sample.rdata.

library(selectKSigs)
load(system.file("extdata/sample.rdata", package = "selectKSigs"))

Perform the selecting process

After we read in the sample data G, we can run the process from selectKSigs. Here, we specify the inputG as G, the number of cross-validation folds, kfold to be 3, the number of replications, nRep, to be 3, and the upper limit of the K values for exploration to be 7.

Visualizing the results

After we obtained the results, we can plot each measure by the range of K values that were refitted during the calculation. The optimal value of K is achieved at its minimum value highlighted in grey.

results$Kvalue <- seq_len(nrow(results)) + 1
results_df <- gather(results, Method, value, -Kvalue) %>% 
  group_by(Method) %>%
  mutate(xmin = which.min(value) + 1 - 0.1,
         xmax = which.min(value) + 1 + 0.1)

ggplot(results_df) +
  geom_point(aes(x = Kvalue, y = value, color = Method), size = 2) +
  facet_wrap(~ Method, scales = "free") + 
  geom_rect(mapping = aes(xmin = xmin, xmax = xmax, 
                          ymin = -Inf, ymax = Inf),
            fill = 'grey', alpha = 0.05) +
  theme_bw()+
  xlab("Number of signatures")

Session info

Here is the output of sessionInfo() for reproducibility in the future.

sessionInfo()
## R version 4.4.2 (2024-10-31)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 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=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: Etc/UTC
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] selectKSigs_1.19.0 dplyr_1.1.4        tidyr_1.3.1        HiLDA_1.21.0      
## [5] ggplot2_3.5.1      BiocStyle_2.35.0  
## 
## loaded via a namespace (and not attached):
##   [1] tidyselect_1.2.1                       
##   [2] farver_2.1.2                           
##   [3] blob_1.2.4                             
##   [4] rjags_4-16                             
##   [5] Biostrings_2.75.1                      
##   [6] bitops_1.0-9                           
##   [7] fastmap_1.2.0                          
##   [8] RCurl_1.98-1.16                        
##   [9] GenomicAlignments_1.43.0               
##  [10] XML_3.99-0.17                          
##  [11] digest_0.6.37                          
##  [12] lifecycle_1.0.4                        
##  [13] R2jags_0.8-9                           
##  [14] KEGGREST_1.47.0                        
##  [15] RSQLite_2.3.7                          
##  [16] magrittr_2.0.3                         
##  [17] compiler_4.4.2                         
##  [18] rlang_1.1.4                            
##  [19] sass_0.4.9                             
##  [20] tools_4.4.2                            
##  [21] utf8_1.2.4                             
##  [22] yaml_2.3.10                            
##  [23] rtracklayer_1.67.0                     
##  [24] knitr_1.49                             
##  [25] labeling_0.4.3                         
##  [26] S4Arrays_1.7.1                         
##  [27] bit_4.5.0                              
##  [28] curl_6.0.1                             
##  [29] DelayedArray_0.33.2                    
##  [30] abind_1.4-8                            
##  [31] BiocParallel_1.41.0                    
##  [32] withr_3.0.2                            
##  [33] purrr_1.0.2                            
##  [34] BiocGenerics_0.53.3                    
##  [35] sys_3.4.3                              
##  [36] grid_4.4.2                             
##  [37] stats4_4.4.2                           
##  [38] fansi_1.0.6                            
##  [39] colorspace_2.1-1                       
##  [40] gtools_3.9.5                           
##  [41] scales_1.3.0                           
##  [42] SummarizedExperiment_1.37.0            
##  [43] cli_3.6.3                              
##  [44] rmarkdown_2.29                         
##  [45] crayon_1.5.3                           
##  [46] generics_0.1.3                         
##  [47] httr_1.4.7                             
##  [48] rjson_0.2.23                           
##  [49] DBI_1.2.3                              
##  [50] cachem_1.1.0                           
##  [51] stringr_1.5.1                          
##  [52] zlibbioc_1.52.0                        
##  [53] parallel_4.4.2                         
##  [54] AnnotationDbi_1.69.0                   
##  [55] BiocManager_1.30.25                    
##  [56] XVector_0.47.0                         
##  [57] restfulr_0.0.15                        
##  [58] matrixStats_1.4.1                      
##  [59] vctrs_0.6.5                            
##  [60] boot_1.3-31                            
##  [61] Matrix_1.7-1                           
##  [62] jsonlite_1.8.9                         
##  [63] IRanges_2.41.1                         
##  [64] S4Vectors_0.45.2                       
##  [65] bit64_4.5.2                            
##  [66] GenomicFeatures_1.59.1                 
##  [67] maketools_1.3.1                        
##  [68] jquerylib_0.1.4                        
##  [69] R2WinBUGS_2.1-22.1                     
##  [70] glue_1.8.0                             
##  [71] codetools_0.2-20                       
##  [72] cowplot_1.1.3                          
##  [73] stringi_1.8.4                          
##  [74] gtable_0.3.6                           
##  [75] GenomeInfoDb_1.43.0                    
##  [76] BiocIO_1.17.0                          
##  [77] GenomicRanges_1.59.0                   
##  [78] UCSC.utils_1.3.0                       
##  [79] munsell_0.5.1                          
##  [80] tibble_3.2.1                           
##  [81] pillar_1.9.0                           
##  [82] htmltools_0.5.8.1                      
##  [83] BSgenome.Hsapiens.UCSC.hg19_1.4.3      
##  [84] GenomeInfoDbData_1.2.13                
##  [85] BSgenome_1.75.0                        
##  [86] R6_2.5.1                               
##  [87] evaluate_1.0.1                         
##  [88] lattice_0.22-6                         
##  [89] Biobase_2.67.0                         
##  [90] png_0.1-8                              
##  [91] Rsamtools_2.23.0                       
##  [92] memoise_2.0.1                          
##  [93] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
##  [94] bslib_0.8.0                            
##  [95] Rcpp_1.0.13-1                          
##  [96] coda_0.19-4.1                          
##  [97] SparseArray_1.7.2                      
##  [98] xfun_0.49                              
##  [99] MatrixGenerics_1.19.0                  
## [100] forcats_1.0.0                          
## [101] buildtools_1.0.0                       
## [102] pkgconfig_2.0.3