spls
:
Sparse Partial Least Squares (SPLS) Regression and ClassificationThe package spls
Provides functions for fitting a sparse
partial least squares (SPLS) regression and classification (Chun and
Keles (2010) doi:10.1111/j.1467-9868.2009.00723.x).
The spls
package is on CRAN (The Comprehensive R Archive
Network) and the latest release can be easily installed using the
command
install.packages("spls")
library(spls)
To install the latest stable development version from GitHub, you can pull this repository and install it using
## install.packages("remotes")
remotes::install_github("valentint/spls", build_opts = c("--no-build-vignettes"))
Of course, if you have already installed remotes
, you
can skip the first line (I have commented it out).
library(spls)
#> Sparse Partial Least Squares (SPLS) Regression and
#> Classification (version 2.3-0)
data(yeast)
$x[1:5, 1:5]
yeast#> ABF1_YPD ACE2_YPD ADR1_YPD ARG80_YPD ARG81_YPD
#> 21 -0.2722730 0.21932294 0.9238359567 -0.4755756 -0.10389318
#> 41 0.1691280 0.53831198 0.0097604993 -0.3219534 -0.19750606
#> 71 -0.1388962 0.02636382 0.0877516229 -0.2234093 0.10307741
#> 78 -0.2865169 -0.31409427 -0.0454998435 0.3262217 0.27757502
#> 102 -0.4950561 -0.14827419 0.0002987512 -0.2179458 -0.02539585
$y[1:5, 1:5]
yeast#> alpha0 alpha7 alpha14 alpha21 alpha28
#> 1 -0.36 -0.42 0.29 -0.14 -0.19
#> 2 1.04 0.19 0.47 -1.03 -0.63
#> 5 -0.30 -0.45 0.75 0.37 0.27
#> 8 -0.46 0.12 -0.06 -0.76 -0.70
#> 9 -1.35 -0.86 -0.22 -0.38 -0.65
## Tuning parameters
set.seed(1)
<- cv.spls( yeast$x, yeast$y, eta = seq(0.1,0.9,0.1), K = c(5:10) )
cv #> eta = 0.1
#> eta = 0.2
#> eta = 0.3
#> eta = 0.4
#> eta = 0.5
#> eta = 0.6
#> eta = 0.7
#> eta = 0.8
#> eta = 0.9
#>
#> Optimal parameters: eta = 0.6, K = 8
## SPLS fit
<- spls( yeast$x, yeast$y, eta = cv$eta.opt, K = cv$K.opt )
f print(f)
#>
#> Sparse Partial Least Squares for multivariate responses
#> ----
#> Parameters: eta = 0.6, K = 8, kappa = 0.5
#> PLS algorithm:
#> pls2 for variable selection, simpls for model fitting
#>
#> SPLS chose 56 variables among 106 variables
#>
#> Selected variables:
#> ACE2_YPD ARG80_YPD ARG81_YPD ASH1_YPD AZF1_YPD
#> BAS1_YPD CBF1_YPD CHA4_YPD CRZ1_YPD FHL1_YPD
#> FKH1_YPD FKH2_YPD FZF1_YPD GAT1_YPD GAT3_YPD
#> GCN4_YPD GCR2_YPD GLN3_YPD HAA1_YPD HAP2_YPD
#> HAP5_YPD HIR1_YPD HIR2_YPD IME4_YPD INO4_YPD
#> A1..MATA1._YPD MBP1_YPD MCM1_YPD MET4_YPD MSN2_YPD
#> NDD1_YPD NRG1_YPD PHD1_YPD PHO2_YPD PUT3_YPD
#> RCS1_YPD REB1_YPD RFX1_YPD RIM101_YPD RME1_YPD
#> RTG1_YPD RTG3_YPD SIP4_YPD SOK2_YPD STB1_YPD
#> STE12_YPD STP2_YPD SWI4_YPD SWI5_YPD SWI6_YPD
#> THI2_YPD YAP1_YPD YAP6_YPD YAP7_YPD YFL044C_YPD
#> YJL206C_YPD
plot.spls( f, yvar=1 )
coefplot.spls( f, nwin=c(2,2), xvar=c(1:4) )
If you experience any bugs or issues or if you have any suggestions for additional features, please submit an issue via the Issues tab of this repository. Please have a look at existing issues first to see if your problem or feature request has already been discussed.
If you want to contribute to the package, you can fork this repository and create a pull request after implementing the desired functionality.
If you need help using the package, or if you are interested in collaborations related to this project, please get in touch with the package maintainer.