*BOSO* is an R package to perform feature selection in linear regression models.

BOSO can be installed from CRAN repository:

`install.packages("BOSO")`

Note that it is necessary to have IBM ILOG CPLEX installed, with a version greater than 12.1, and the *cplexAPI* package, which is used to invoke CPLEX from R environment.

Furthermore, check if packages are installed. Check if bestsubset is installed. If not, source necessary functions from bestsubset.

```
if (!requireNamespace('cplexAPI', quietly = TRUE)) {
testthat::skip('Package cplexAPI not installed (required for this vignette)!\n
Install it from CRAN: https://cran.r-project.org/web/packages/cplexAPI/index.html')
stop('Package cplexAPI not installed (required for this vignette)!\n
Install it from CRAN: https://cran.r-project.org/web/packages/cplexAPI/index.html', call. = FALSE)
}
```

```
if (!requireNamespace('bestsubset', quietly = TRUE)) {
devtools::source_url("https://raw.githubusercontent.com/ryantibs/best-subset/master/bestsubset/R/fs.R")
devtools::source_url("https://raw.githubusercontent.com/ryantibs/best-subset/master/bestsubset/R/lasso.R")
devtools::source_url("https://raw.githubusercontent.com/ryantibs/best-subset/master/bestsubset/R/sim.R")
enlist <- function (...)
{
result <- list(...)
if ((nargs() == 1) & is.character(n <- result[[1]])) {
result <- as.list(seq(n))
names(result) <- n
for (i in n) result[[i]] <- get(i)
} else {
n <- sys.call()
n <- as.character(n)[-1]
if (!is.null(n2 <- names(result))) {
which <- n2 != ""
n[which] <- n2[which]
}
names(result) <- n
}
result
}
} else {require("bestsubset")}
```

`## i SHA-1 hash of file is cc12499ddd2cc538f318f3ee14ad4a3911945a27`

`## i SHA-1 hash of file is e7c4bf157a3c33b0a11179541be100c0037a4fea`

`## i SHA-1 hash of file is 531fcc6ad06024eae37afaa3e15d83e0ea3ece89`

The package is designed to run the BOSO algorithm in one single function, which comprises two steps: block strategy and final problem.

The block strategy is a pre-processing step in which the BOSO MILP (Mixed-Integer Liner Programming) is applied to random subproblems of small dimension, aiming to discard variables for the final problem. The usual block size is 10 variables. This process is done iteratively until convergence.

Final problem applies the BOSO MILP with all the remaining variables from the block strategy.