Contents

#library(TDbasedUFEadv)

1 Introduction

Since TDbasedUFEadv is an advanced package from TDbasedUFE (Taguchi 2023), please master the contents in TDbasedUFE prior to the trial of this package.

1.1 Motivations

Since the publication of the book (Taguchi 2020) describing the methodology, I have published numerous papers using this method. In spite of that, very limited number of researcher used this method, possibly because of unfamiliarity with the mathematical concepts used in this methodology, tensors. Thus I decided to develop the packages by which users can use the methods without detailed knowledge about the tensor.

2 Integrated analysis of two omics data sets

2.1 When features are shared.

2.1.1 Full tensor

Tensor decomposition towards tensor generated from two matrices

Suppose we have two omics profiles \[ x_{ij} \in \mathbb{R}^{N \times M} \\ x_{ik} \in \mathbb{R}^{N \times K} \] that represent values of \(i\)th feature of \(j\)th and \(k\)th objects, respectively (i.r., these two profiles share the features). In this case, we generate a tensor, \(x_{ijk}\), by the product of two profiles as \[ x_{ijk} = x_{ij}x_{ik} \in \mathbb{R}^{N \times M \times K} \]

and HOSVD was applied to \(x_{ijk}\) to get \[ x_{ijk} = \sum_{\ell_1} \sum_{\ell_2} \sum_{ell_3} G(\ell_1 \ell_2 \ell_3) u_{\ell_1 i} u_{\ell_2 j} u_{\ell_3 k} \] After that we can follow the standard procedure to select features \(i\)s associated with the desired properties represented by the selected singular value vectors, \(u_{\ell_2 j}\) and \(u_{\ell_3 k}\), attributed to objects, \(j\)s and \(k\)s.

2.1.2 Matrix generated by partial summation

After partial summation of tensor

In the above, we dealt with full tensor. It is often difficult to treat full tensor, since it is as large as \(N \times M times K\). In this case, we can take the alternative approach. In order that we define reduced matrix with taking partial summation \[ x_{jk} = \sum_i x_{ijk} \] and apply SVD to \(x_{jk}\) as \[ x_{jk} = \sum_\ell \lambda_\ell u_{\ell j} v_{\ell k} \] and singular value vectors attributed to samples as \[ u^{(j)}_{\ell i} = \sum_j u_{\ell j} x_{ij} \\ u^{(k)}_{\ell i} = \sum_k v_{\ell k} x_{ik} \] In this case, singular value vectors are attributed separately to features associated with objects \(j\) and \(k\), respectively.

The feature selection can be done using these singular value vectors associated with selected singular value vectors attributed to samples, \(j\) and \(k\).

2.2 When samples are shared.

2.2.1 Full tensor

Tensor decomposition towards tensor generated from two matrices

In the case where not features but samples are shared between two omics data, we can do something similar. \[ x_{ij} \in \mathbb{R}^{N \times M} \\ x_{kj} \in \mathbb{R}^{K \times M} \]

In this case, we generate a tensor, \(x_{ijk}\), by the product of two profiles as \[ x_{ijk} = x_{ij}x_{kj} \in \mathbb{R}^{N \times M \times K} \]

and HOSVD was applied to \(x_{ijk}\) to get \[ x_{ijk} = \sum_{\ell_1} \sum_{\ell_2} \sum_{ell_3} G(\ell_1 \ell_2 \ell_3) u_{\ell_1 i} u_{\ell_2 j} u_{\ell_3 k} \] After that we can follow the standard procedure to select features \(i\)s and \(k\)s associated with the desired properties represented by the selected singular value vectors, \(u_{\ell_2 j}\), attributed to objects, \(j\)s.

2.2.2 Matrix generated from partial summation

After partial summation of tensor

In the above, we dealt with full tensor. It is often difficult to treat full tensor, since it is as large as \(N \times M times K\). In this case, we can take the alternative approach. In order that we define reduced matrix with taking partial summation \[ x_{ik} = \sum_j x_{ijk} \] and apply SVD to \(x_{jk}\) as \[ x_{ik} = \sum_\ell \lambda_\ell u_{\ell i} v_{\ell k} \] \(i\)s and \(k\)s are selected with \(u_{\ell i}\) and \(v_{\ell k}\), respectively. Singular value vectors attributed to samples can be computed as \[ u^{(i)}_{\ell j} = \sum_i u_{\ell i} x_{ij} \\ u^{(k)}_{\ell j} = \sum_k v_{\ell k} x_{kj} \]

3 Integrated analysis using projection

Here we would like to propose an alternative strategy to integrate multiple tensors using projection with SVD.

3.1 When samples are shared.

Projection when samples are shared

Suppose we have multiomics data as \[ x_{ijk} \in \mathbb{R}^{N_k \times M \times K} \] for \(i\)th feature of \(j\)th sample at \(k\)th omics data.

In order to bundle them into a tensor, we applied SVD to them as \[ x_{ijk} = \sum_{\ell} \lambda^{(k)}_\ell u_{\ell i_k} v^{(k)}_{\ell j} \]

Then apply HOSVD to \(v^{(k)}_{\ell j}\) as \[ v^{(k)}_{\ell j} = \sum_{\ell_1} \sum_{\ell_2} \sum_{\ell_3} G(\ell_1 \ell_2 \ell_3) u_{\ell_1 \ell } u_{\ell_2 j} u_{\ell_3 k} \] After identifying the \(u_{\ell_2j}\) and \(u_{\ell_3 k}\) of interest, we can compute \(u_{\ell i_k}\) as \[ u_{\ell_2 i_k} = \sum_j u_{\ell_2 j} x_{i_k j k} \] Then \(i_k\) can be selected as usual.

3.2 When features are shared.

Projection when features are shared

Suppose we have multiple sets of samples as \[ x_{ij_k k} \in \mathbb{R}^{N \times M_k \times K} \]

In order to bundle them into a tensor, we apply SVD to \(x_{i j_k k}\) as \[ x_{i j_k k} = \sum_\ell \lambda^{(k)}_\ell u^{(k)}_{\ell i} u_{\ell j_k} \] HOSVD is applied to \(u^{(k)}_{\ell i}\) as \[ u^{(k)}_{\ell i} = \sum_{\ell_1} \sum_{\ell_2} \sum_{\ell_3} G(\ell_1 \ell_2 \ell_3) u_{\ell_1 \ell} u_{\ell_2 i} u_{\ell_3 k} \] \(u_{\ell_2 j_k}\) is generated as \[ u_{\ell_2 j_k} = \sum_i u_{\ell_2 i}x_{i j_k k} \]

After identifying \(u_{\ell_2 j_k}\)s of interest, we select \(i\)s using \(u_{\ell_2 i}\).

sessionInfo()
#> 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:   /home/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] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] STRINGdb_2.18.0              enrichR_3.2                 
#>  [3] RTCGA.clinical_20151101.35.0 RTCGA.rnaseq_20151101.35.0  
#>  [5] RTCGA_1.36.0                 enrichplot_1.26.0           
#>  [7] DOSE_4.0.0                   TDbasedUFEadv_1.6.0         
#>  [9] TDbasedUFE_1.6.0             BiocStyle_2.34.0            
#> 
#> loaded via a namespace (and not attached):
#>   [1] rTensor_1.4.8           splines_4.4.1           later_1.3.2            
#>   [4] bitops_1.0-9            ggplotify_0.1.2         tibble_3.2.1           
#>   [7] R.oo_1.26.0             XML_3.99-0.17           lifecycle_1.0.4        
#>  [10] rstatix_0.7.2           processx_3.8.4          lattice_0.22-6         
#>  [13] backports_1.5.0         magrittr_2.0.3          sass_0.4.9             
#>  [16] rmarkdown_2.28          jquerylib_0.1.4         yaml_2.3.10            
#>  [19] plotrix_3.8-4           ggtangle_0.0.3          httpuv_1.6.15          
#>  [22] cowplot_1.1.3           chromote_0.3.1          DBI_1.2.3              
#>  [25] RColorBrewer_1.1-3      abind_1.4-8             MOFAdata_1.21.0        
#>  [28] zlibbioc_1.52.0         rvest_1.0.4             GenomicRanges_1.58.0   
#>  [31] purrr_1.0.2             R.utils_2.12.3          BiocGenerics_0.52.0    
#>  [34] RCurl_1.98-1.16         hash_2.2.6.3            yulab.utils_0.1.7      
#>  [37] WriteXLS_6.7.0          GenomeInfoDbData_1.2.13 IRanges_2.40.0         
#>  [40] KMsurv_0.1-5            S4Vectors_0.44.0        ggrepel_0.9.6          
#>  [43] tidytree_0.4.6          proto_1.0.0             codetools_0.2-20       
#>  [46] xml2_1.3.6              tximportData_1.33.0     tidyselect_1.2.1       
#>  [49] aplot_0.2.3             UCSC.utils_1.2.0        farver_2.1.2           
#>  [52] viridis_0.6.5           stats4_4.4.1            jsonlite_1.8.9         
#>  [55] Formula_1.2-5           survival_3.7-0          tools_4.4.1            
#>  [58] chron_2.3-61            treeio_1.30.0           Rcpp_1.0.13            
#>  [61] glue_1.8.0              gridExtra_2.3           xfun_0.48              
#>  [64] qvalue_2.38.0           ggthemes_5.1.0          GenomeInfoDb_1.42.0    
#>  [67] websocket_1.4.2         dplyr_1.1.4             withr_3.0.2            
#>  [70] BiocManager_1.30.25     fastmap_1.2.0           fansi_1.0.6            
#>  [73] caTools_1.18.3          digest_0.6.37           R6_2.5.1               
#>  [76] mime_0.12               gridGraphics_0.5-1      colorspace_2.1-1       
#>  [79] GO.db_3.20.0            gtools_3.9.5            RSQLite_2.3.7          
#>  [82] R.methodsS3_1.8.2       utf8_1.2.4              tidyr_1.3.1            
#>  [85] generics_0.1.3          data.table_1.16.2       httr_1.4.7             
#>  [88] sqldf_0.4-11            pkgconfig_2.0.3         gtable_0.3.6           
#>  [91] blob_1.2.4              XVector_0.46.0          survMisc_0.5.6         
#>  [94] htmltools_0.5.8.1       carData_3.0-5           bookdown_0.41          
#>  [97] fgsea_1.32.0            scales_1.3.0            Biobase_2.66.0         
#> [100] png_0.1-8               ggfun_0.1.7             knitr_1.48             
#> [103] km.ci_0.5-6             tzdb_0.4.0              reshape2_1.4.4         
#> [106] rjson_0.2.23            nlme_3.1-166            curl_5.2.3             
#> [109] cachem_1.1.0            zoo_1.8-12              stringr_1.5.1          
#> [112] KernSmooth_2.23-24      parallel_4.4.1          AnnotationDbi_1.68.0   
#> [115] pillar_1.9.0            grid_4.4.1              vctrs_0.6.5            
#> [118] gplots_3.2.0            promises_1.3.0          ggpubr_0.6.0           
#> [121] car_3.1-3               xtable_1.8-4            tximport_1.34.0        
#> [124] evaluate_1.0.1          readr_2.1.5             gsubfn_0.7             
#> [127] cli_3.6.3               compiler_4.4.1          rlang_1.1.4            
#> [130] crayon_1.5.3            ggsignif_0.6.4          labeling_0.4.3         
#> [133] survminer_0.4.9         ps_1.8.1                plyr_1.8.9             
#> [136] fs_1.6.4                stringi_1.8.4           viridisLite_0.4.2      
#> [139] BiocParallel_1.40.0     assertthat_0.2.1        munsell_0.5.1          
#> [142] Biostrings_2.74.0       lazyeval_0.2.2          GOSemSim_2.32.0        
#> [145] Matrix_1.7-1            hms_1.1.3               patchwork_1.3.0        
#> [148] bit64_4.5.2             ggplot2_3.5.1           KEGGREST_1.46.0        
#> [151] shiny_1.9.1             highr_0.11              igraph_2.1.1           
#> [154] broom_1.0.7             memoise_2.0.1           bslib_0.8.0            
#> [157] ggtree_3.14.0           fastmatch_1.1-4         bit_4.5.0              
#> [160] ape_5.8

Taguchi, Y-H. 2020. Unsupervised Feature Extraction Applied to Bioinformatics. Springer International Publishing. https://doi.org/10.1007/978-3-030-22456-1.

———. 2023. TDbasedUFE: Tensor Decomposition Bassed Unsupervised Feature Extraction. https://github.com/tagtag/TDbasedUFE.