This tuning function is inspired by the tuning function of PMACCA. The code can be found in: tuning-c1-for-sgcca The method is also compared with tuning parameter with cross validation

1 Load library

library(RGCCA)
library(MASS)
library(tidyverse)
library(purrr)

2 Simulation two datasets with common latent variables

\[ \begin{aligned} X&=u w_1^{T}+\epsilon_1, \\ Y&=u w_2^{T}+\epsilon_2 \end{aligned} \]

set.seed(510)
sim.dat <- sim.linear2(n = 100, p = 150, psel = 30)$X

We selected the first 30 features as non-zero features.

3 Tuning function

set.seed(510)
system.time({
  tune.sgcca <- sgcca_tune(sim.dat, scheme = "centroid", nperms = 10)
})
##    user  system elapsed 
##  13.952   2.163   3.284
tune.sgcca
sgcca.m <- sgcca(sim.dat, c1 = rep(tune.sgcca$best_l1))

Here we calculated the first canonical correlations with the tuned penalized parameter c1. We can see that most of the zero loadings are shrink to 0.

4 Using CV to tue c1

set.seed(510)
system.time({
  cv.sgcca <- sgcca_cv(sim.dat, scheme = "centroid", K = 10)
})
##    user  system elapsed 
##  24.201   3.025   3.914
print(cv.sgcca)
##           l1       cor
## 12 0.6816497 0.9768444
sgcca.m <- sgcca(sim.dat, c1 = rep(cv.sgcca$l1))

5 Without tuning c1

sgcca.m2 <- sgcca(sim.dat)
get_corr(sgcca.m2$Y, scheme = "centroid")
##           comp1
## comp1 0.9794492
par(mfrow = c(1,2))
plot(sgcca.m2$a$X1, ylab = "loading for X1", pch = 20, col = c(rep("red",30), rep("black",170)))
plot(sgcca.m2$a$X2, ylab = "loading for X2", pch = 20, col = c(rep("red",30), rep("black",170)))

6 Session Information

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.2.1 (2022-06-23)
##  os       macOS Big Sur ... 10.16
##  system   x86_64, darwin17.0
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       America/New_York
##  date     2023-04-12
##  pandoc   2.19.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version  date (UTC) lib source
##  bslib         0.4.2    2022-12-16 [1] CRAN (R 4.2.0)
##  cachem        1.0.7    2023-02-24 [1] CRAN (R 4.2.0)
##  callr         3.7.3    2022-11-02 [1] CRAN (R 4.2.0)
##  cli           3.6.0    2023-01-09 [1] CRAN (R 4.2.0)
##  codetools     0.2-18   2020-11-04 [1] CRAN (R 4.2.1)
##  colorspace    2.1-0    2023-01-23 [1] CRAN (R 4.2.0)
##  crayon        1.5.2    2022-09-29 [1] CRAN (R 4.2.0)
##  devtools      2.4.5    2022-10-11 [1] CRAN (R 4.2.0)
##  digest        0.6.31   2022-12-11 [1] CRAN (R 4.2.0)
##  doParallel    1.0.17   2022-02-07 [1] CRAN (R 4.2.0)
##  dplyr       * 1.1.0    2023-01-29 [1] CRAN (R 4.2.0)
##  ellipsis      0.3.2    2021-04-29 [1] CRAN (R 4.2.0)
##  evaluate      0.20     2023-01-17 [1] CRAN (R 4.2.0)
##  fansi         1.0.4    2023-01-22 [1] CRAN (R 4.2.0)
##  fastmap       1.1.1    2023-02-24 [1] CRAN (R 4.2.0)
##  forcats     * 1.0.0    2023-01-29 [1] CRAN (R 4.2.0)
##  foreach       1.5.2    2022-02-02 [1] CRAN (R 4.2.0)
##  fs            1.6.1    2023-02-06 [1] CRAN (R 4.2.0)
##  generics      0.1.3    2022-07-05 [1] CRAN (R 4.2.0)
##  ggplot2     * 3.4.1    2023-02-10 [1] CRAN (R 4.2.0)
##  glue          1.6.2    2022-02-24 [1] CRAN (R 4.2.0)
##  gtable        0.3.2    2023-03-17 [1] CRAN (R 4.2.0)
##  highr         0.10     2022-12-22 [1] CRAN (R 4.2.0)
##  hms           1.1.2    2022-08-19 [1] CRAN (R 4.2.0)
##  htmltools     0.5.4    2022-12-07 [1] CRAN (R 4.2.0)
##  htmlwidgets   1.6.1    2023-01-07 [1] CRAN (R 4.2.0)
##  httpuv        1.6.8    2023-01-12 [1] CRAN (R 4.2.0)
##  iterators     1.0.14   2022-02-05 [1] CRAN (R 4.2.0)
##  jquerylib     0.1.4    2021-04-26 [1] CRAN (R 4.2.0)
##  jsonlite      1.8.4    2022-12-06 [1] CRAN (R 4.2.0)
##  knitr         1.42     2023-01-25 [1] CRAN (R 4.2.1)
##  later         1.3.0    2021-08-18 [1] CRAN (R 4.2.0)
##  lifecycle     1.0.3    2022-10-07 [1] CRAN (R 4.2.0)
##  lubridate   * 1.9.2    2023-02-10 [1] CRAN (R 4.2.0)
##  magrittr      2.0.3    2022-03-30 [1] CRAN (R 4.2.0)
##  MASS        * 7.3-58.2 2023-01-23 [1] CRAN (R 4.2.0)
##  memoise       2.0.1    2021-11-26 [1] CRAN (R 4.2.0)
##  mime          0.12     2021-09-28 [1] CRAN (R 4.2.0)
##  miniUI        0.1.1.1  2018-05-18 [1] CRAN (R 4.2.0)
##  munsell       0.5.0    2018-06-12 [1] CRAN (R 4.2.0)
##  pillar        1.8.1    2022-08-19 [1] CRAN (R 4.2.0)
##  pkgbuild      1.4.0    2022-11-27 [1] CRAN (R 4.2.0)
##  pkgconfig     2.0.3    2019-09-22 [1] CRAN (R 4.2.0)
##  pkgload       1.3.2    2022-11-16 [1] CRAN (R 4.2.1)
##  plyr          1.8.8    2022-11-11 [1] CRAN (R 4.2.0)
##  prettyunits   1.1.1    2020-01-24 [1] CRAN (R 4.2.0)
##  processx      3.8.0    2022-10-26 [1] CRAN (R 4.2.0)
##  profvis       0.3.7    2020-11-02 [1] CRAN (R 4.2.0)
##  promises      1.2.0.1  2021-02-11 [1] CRAN (R 4.2.0)
##  ps            1.7.2    2022-10-26 [1] CRAN (R 4.2.0)
##  purrr       * 1.0.1    2023-01-10 [1] CRAN (R 4.2.0)
##  R6            2.5.1    2021-08-19 [1] CRAN (R 4.2.0)
##  Rcpp          1.0.10   2023-01-22 [1] CRAN (R 4.2.0)
##  readr       * 2.1.4    2023-02-10 [1] CRAN (R 4.2.0)
##  remotes       2.4.2    2021-11-30 [1] CRAN (R 4.2.0)
##  RGCCA       * 2.1.2    2017-05-11 [1] CRAN (R 4.2.0)
##  rlang         1.1.0    2023-03-14 [1] CRAN (R 4.2.0)
##  rmarkdown     2.20     2023-01-19 [1] CRAN (R 4.2.0)
##  rstudioapi    0.14     2022-08-22 [1] CRAN (R 4.2.0)
##  sass          0.4.5    2023-01-24 [1] CRAN (R 4.2.0)
##  scales        1.2.1    2022-08-20 [1] CRAN (R 4.2.0)
##  sessioninfo   1.2.2    2021-12-06 [1] CRAN (R 4.2.0)
##  shiny         1.7.4    2022-12-15 [1] CRAN (R 4.2.1)
##  stringi       1.7.12   2023-01-11 [1] CRAN (R 4.2.0)
##  stringr     * 1.5.0    2022-12-02 [1] CRAN (R 4.2.0)
##  tibble      * 3.2.1    2023-03-20 [1] CRAN (R 4.2.1)
##  tidyr       * 1.3.0    2023-01-24 [1] CRAN (R 4.2.0)
##  tidyselect    1.2.0    2022-10-10 [1] CRAN (R 4.2.0)
##  tidyverse   * 2.0.0    2023-02-22 [1] CRAN (R 4.2.0)
##  timechange    0.2.0    2023-01-11 [1] CRAN (R 4.2.0)
##  tzdb          0.3.0    2022-03-28 [1] CRAN (R 4.2.0)
##  urlchecker    1.0.1    2021-11-30 [1] CRAN (R 4.2.0)
##  usethis       2.1.6    2022-05-25 [1] CRAN (R 4.2.0)
##  utf8          1.2.3    2023-01-31 [1] CRAN (R 4.2.0)
##  vctrs         0.6.0    2023-03-16 [1] CRAN (R 4.2.1)
##  withr         2.5.0    2022-03-03 [1] CRAN (R 4.2.0)
##  xfun          0.37     2023-01-31 [1] CRAN (R 4.2.0)
##  xtable        1.8-4    2019-04-21 [1] CRAN (R 4.2.0)
##  yaml          2.3.7    2023-01-23 [1] CRAN (R 4.2.0)
## 
##  [1] /Library/Frameworks/R.framework/Versions/4.2/Resources/library
## 
## ──────────────────────────────────────────────────────────────────────────────