SelectSim package provides functions to generate the
background model and other utility functions.We will process LUAD MAF dataset from TCGA provided with the package.
We will also use oncokb v3.9 cancer genes and mutations to filter the maf to create the gam provided with the package.
NOTE: This is an example to process the MAF file. To know more about how we processed the MAF file to run_data object, please refer to SelectSim_analysis repository.
library(SelectSim)
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
if (requireNamespace("tictoc", quietly = TRUE)) library(tictoc)
## Load the data provided with the package
data(luad_maf, package = "SelectSim")
data(oncokb_genes, package = "SelectSim")
data(oncokb_truncating_genes, package = "SelectSim")
data(variant_catalogue, package = "SelectSim")input_maf <- luad_maf
print(paste('##### Number of lines ####',nrow(input_maf),sep="->"))
#> [1] "##### Number of lines ####->220734"
genes_to_consider = oncokb_genes
print(paste('##### Number of genes ####',length(genes_to_consider),sep="->"))
#> [1] "##### Number of genes ####->396"mutation_type = list(
'ignore' = c("Silent","Intron","RNA","3'UTR","5'UTR","5'Flank","3'Flank","IGR"),
'truncating'= c('Frame_Shift_Del','Frame_Shift_Ins','In_Frame_Del','In_Frame_Ins','Nonsense_Mutation','Nonstop_Mutation','Splice_Region','Splice_Site','Translation_Start_Site'),
'missense' = c('Missense_Mutation')
)
custom_maf_schema = list(
'name' = 'custom_maf',
'column' = list(
'gene' = 'Hugo_Symbol'
, 'gene.name' = 'Hugo_Symbol'
, 'sample' = 'sample'
, 'sample.name' = 'sample'
, 'mutation.type' = 'Variant_Classification'
, 'mutation' = 'HGVSp_Short'
),
'mutation.type' = mutation_type
)mut_samples = unique(input_maf[, custom_maf_schema$column$sample])
print(paste('##### Number of samples ####',length(mut_samples),sep="->"))
#> [1] "##### Number of samples ####->502"maf_genes = filter_maf_gene.name(input_maf, genes = genes_to_consider, gene.col = custom_maf_schema$column$gene)
print(paste('##### Number of lines ####',nrow(maf_genes),sep="->"))
#> [1] "##### Number of lines ####->6708"# Creating Truncating GAM
if (requireNamespace("tictoc", quietly = TRUE)) tictoc::tic('##### Creating Truncating GAM ####')
maf_trunc = filter_maf_truncating(maf_genes,genes=oncokb_truncating_genes, custom_maf_schema)
input_maf_trunc<-filter_maf_truncating(input_maf, custom_maf_schema)
truncating_tmb <- data.frame('sample'=mut_samples,'mutation'=rep(0,length(mut_samples)))
rownames(truncating_tmb)<-mut_samples
temp <- input_maf_trunc %>% count(sample)
rownames(temp)<-temp$sample
truncating_tmb[intersect(truncating_tmb$sample,temp$sample),]$mutation <-temp[intersect(truncating_tmb$sample,temp$sample),'n']
tcga_truc_gam = maf2gam(maf_trunc,
sample.col = custom_maf_schema$column$sample,
gene.col = custom_maf_schema$column$gene,
value.var = 'Variant_Classification',
samples = mut_samples,
genes = genes_to_consider,
fun.aggregate = length,
binarize=TRUE,
fill=0)
truncating_data <- list('gam'=tcga_truc_gam,
'tmb'=truncating_tmb)
if (requireNamespace("tictoc", quietly = TRUE)) tictoc::toc()
#> ##### Creating Truncating GAM ####: 0.069 sec elapsed# Creating Missense GAM
if (requireNamespace("tictoc", quietly = TRUE)) tictoc::tic('##### Creating Missense GAM ####')
maf_valid = filter_maf_schema(input_maf,
schema = custom_maf_schema,
column = 'mutation.type',
values = custom_maf_schema[['mutation.type']][['ignore']],
inclusive = FALSE)
missense_maf<-filter_maf_mutation.type(input_maf,
variants = 'Missense_Mutation',
variant.col = custom_maf_schema$column$mutation.type)
missense_tmb <- data.frame('sample'=mut_samples,'mutation'=rep(0,length(mut_samples)))
rownames(missense_tmb)<-mut_samples
temp <- missense_maf %>% count(sample)
rownames(temp)<-temp$sample
missense_tmb[intersect(missense_tmb$sample,temp$sample),]$mutation <-temp[intersect(missense_tmb$sample,temp$sample),'n']
t_m = substr(maf_valid[[custom_maf_schema$column$mutation]],3,1000)
t_m1 = gsub('[A-Z]*$', '', t_m)
maf_valid$HGVSp_Short_fixed = t_m1
maf_hotspot = filter_maf_mutations(maf_valid,
variant_catalogue,
maf.col = c(custom_maf_schema$column$gene, 'HGVSp_Short_fixed'),
values.col = c('gene', 'mut'))
missense_tcga_gam = maf2gam(maf_hotspot,
sample.col = custom_maf_schema$column$sample,
gene.col = custom_maf_schema$column$gene,
value.var = 'Variant_Classification',
samples = mut_samples,
genes = genes_to_consider,
fun.aggregate = length,
binarize=TRUE,
fill=0)
missesne_data <- list('gam'=missense_tcga_gam,
'tmb'=missense_tmb)
if (requireNamespace("tictoc", quietly = TRUE)) tictoc::toc()
#> ##### Creating Missense GAM ####: 0.578 sec elapsedgene_to_take <- colnames(missesne_data$gam)
order <- rownames(missesne_data$gam)
data <-list('M'=list('missense'=t(missesne_data$gam[order,gene_to_take]),
'truncating'=t(truncating_data$gam[rownames(missesne_data$gam[order,]),gene_to_take])),
'tmb'=list('missense'=missesne_data$tmb[order,],
'truncating'=truncating_data$tmb[order,]))
alteration_covariates <- rep('MUT',ncol(missesne_data$gam[order,gene_to_take]))
names(alteration_covariates)<-colnames(missesne_data$gam[order,gene_to_take])
sample_covariates<-rep('LUAD',length(order))
names(sample_covariates)<-order
run_data <- list('M'=data,'sample.class' = sample_covariates,'alteration.class' = alteration_covariates)
str(run_data)
#> List of 3
#> $ M :List of 2
#> ..$ M :List of 2
#> .. ..$ missense : num [1:396, 1:502] NA NA NA NA NA NA NA NA NA NA ...
#> .. .. ..- attr(*, "dimnames")=List of 2
#> .. .. .. ..$ : chr [1:396] "AKT1" "ATM" "BRAF" "CDKN2A" ...
#> .. .. .. ..$ : chr [1:502] "TCGA-05-4244-01" "TCGA-05-4249-01" "TCGA-05-4250-01" "TCGA-05-4382-01" ...
#> .. ..$ truncating: num [1:396, 1:502] 0 NA NA NA NA NA NA NA NA 0 ...
#> .. .. ..- attr(*, "dimnames")=List of 2
#> .. .. .. ..$ : chr [1:396] "AKT1" "ATM" "BRAF" "CDKN2A" ...
#> .. .. .. ..$ : chr [1:502] "TCGA-05-4244-01" "TCGA-05-4249-01" "TCGA-05-4250-01" "TCGA-05-4382-01" ...
#> ..$ tmb:List of 2
#> .. ..$ missense :'data.frame': 502 obs. of 2 variables:
#> .. .. ..$ sample : chr [1:502] "TCGA-05-4244-01" "TCGA-05-4249-01" "TCGA-05-4250-01" "TCGA-05-4382-01" ...
#> .. .. ..$ mutation: num [1:502] 163 253 270 1328 100 ...
#> .. ..$ truncating:'data.frame': 502 obs. of 2 variables:
#> .. .. ..$ sample : chr [1:502] "TCGA-05-4244-01" "TCGA-05-4249-01" "TCGA-05-4250-01" "TCGA-05-4382-01" ...
#> .. .. ..$ mutation: num [1:502] 24 45 40 206 17 18 73 31 176 108 ...
#> $ sample.class : Named chr [1:502] "LUAD" "LUAD" "LUAD" "LUAD" ...
#> ..- attr(*, "names")= chr [1:502] "TCGA-05-4244-01" "TCGA-05-4249-01" "TCGA-05-4250-01" "TCGA-05-4382-01" ...
#> $ alteration.class: Named chr [1:396] "MUT" "MUT" "MUT" "MUT" ...
#> ..- attr(*, "names")= chr [1:396] "AKT1" "ATM" "BRAF" "CDKN2A" ...run_data and check the introduction vignette
to see how to run selectX to discover EDs.# Print the sessionInfo
sessionInfo()
#> R version 4.5.3 (2026-03-11)
#> Platform: aarch64-apple-darwin20.0.0
#> Running under: macOS Sequoia 15.7.3
#>
#> Matrix products: default
#> BLAS/LAPACK: /Users/arvindiyer/micromamba/envs/r_env/lib/libopenblas.0.dylib; LAPACK version 3.12.0
#>
#> locale:
#> [1] C/en_IN.UTF-8/en_IN.UTF-8/C/en_IN.UTF-8/en_IN.UTF-8
#>
#> time zone: America/Toronto
#> tzcode source: system (macOS)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] tictoc_1.2.1 dplyr_1.2.1 SelectSim_0.1.6
#>
#> loaded via a namespace (and not attached):
#> [1] sass_0.4.10 generics_0.1.4 tidyr_1.3.2
#> [4] rstatix_1.0.0 lattice_0.22-9 digest_0.6.39
#> [7] magrittr_2.0.5 evaluate_1.0.5 grid_4.5.3
#> [10] RColorBrewer_1.1-3 iterators_1.0.14 fastmap_1.2.0
#> [13] foreach_1.5.2 doParallel_1.0.17 jsonlite_2.0.0
#> [16] Matrix_1.7-5 backports_1.5.1 Formula_1.2-5
#> [19] purrr_1.2.2 doRNG_1.8.6.3 scales_1.4.0
#> [22] codetools_0.2-20 jquerylib_0.1.4 abind_1.4-8
#> [25] cli_3.6.6 zigg_0.0.2 rlang_1.3.0
#> [28] cachem_1.1.0 yaml_2.3.12 otel_0.2.0
#> [31] tools_4.5.3 parallel_4.5.3 ggsignif_0.6.4
#> [34] ggplot2_4.0.3 ggpubr_1.0.0 rngtools_1.5.2
#> [37] Rfast_2.1.5.2 broom_1.0.13 vctrs_0.7.3
#> [40] R6_2.6.1 ggridges_0.5.7 lifecycle_1.0.5
#> [43] car_3.1-5 pkgconfig_2.0.3 RcppParallel_5.1.11-2
#> [46] pillar_1.11.1 bslib_0.11.0 gtable_0.3.6
#> [49] Rcpp_1.1.2 glue_1.8.1 xfun_0.59
#> [52] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51
#> [55] farver_2.1.2 htmltools_0.5.9 rmarkdown_2.31
#> [58] carData_3.0-6 compiler_4.5.3 S7_0.2.2