| Type: | Package | 
| Title: | Multiscale Graphical Lasso | 
| Version: | 0.1.2 | 
| Description: | Inference of Multiscale graphical models with neighborhood selection approach. The method is based on solving a convex optimization problem combining a Lasso and fused-group Lasso penalties. This allows to infer simultaneously a conditional independence graph and a clustering partition. The optimization is based on the Continuation with Nesterov smoothing in a Shrinkage-Thresholding Algorithm solver (Hadj-Selem et al. 2018) <doi:10.1109/TMI.2018.2829802> implemented in python. | 
| License: | MIT + file LICENSE | 
| Imports: | corpcor, ggplot2, ggrepel, gridExtra, Matrix, methods, R.utils, reticulate (≥ 1.25), rstudioapi | 
| Suggests: | knitr, mvtnorm, rmarkdown, testthat (≥ 3.0.0) | 
| VignetteBuilder: | knitr | 
| ByteCompile: | true | 
| Config/reticulate: | list( packages = list( list(package = "scipy", version = "1.7.1"), list(package = "numpy", version = "1.22.4"), list(package = "matplotlib"), list(package = "scikit-learn"), list(package = "six"), list(package = "pylearn-parsimony", version = "0.3.1", pip = TRUE) ) ) | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.2.1 | 
| URL: | https://desanou.github.io/mglasso/ | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2022-09-05 22:06:02 UTC; doedm | 
| Author: | Edmond Sanou [aut, cre], Tung Le [ctb], Christophe Ambroise [ths], Geneviève Robin [ths] | 
| Maintainer: | Edmond Sanou <doedmond.sanou@univ-evry.fr> | 
| Repository: | CRAN | 
| Date/Publication: | 2022-09-08 13:12:55 UTC | 
Adjacency matrix
Description
Adjacency matrix
Usage
adj_mat(mat, sym_rule = "and")
Arguments
| mat | matrix of regression coefficients | 
| sym_rule | symmetrization rule, either AND or OR | 
Value
adjacency matrix
Initialize regression matrix
Description
Initialize regression matrix
Usage
beta_ols(X)
Arguments
| X | data | 
Value
A zero-diagonal matrix of regression vectors.
Transform a matrix of regression coefficients to vector removing the diagonal
Description
Transform a matrix of regression coefficients to vector removing the diagonal
Usage
beta_to_vector(beta_mat)
Arguments
| beta_mat | matrix of regressions vectors | 
Value
A numeric vector of all regression coefficients.
CONESTA solver.
Description
Solve the MGLasso optimization problem using CONESTA algorithm. Interface to the pylearn.parsimony python library.
Usage
conesta(
  X,
  lam1,
  lam2,
  beta_warm = c(0),
  type_ = "initial",
  W_ = NULL,
  mean_ = FALSE,
  max_iter_ = 10000,
  prec_ = 0.01
)
Arguments
| X | Data matrix nxp. | 
| lam1 | Sparsity penalty. | 
| lam2 | Total variation penalty. | 
| beta_warm | Warm initialization vector. | 
| type_ | Character scalar. By default set to initial version which doesn't use weights | 
| W_ | Weights matrix for total variation penalties. | 
| mean_ | Logical scalar. If TRUE weights the optimization function by the inverse of sample size. | 
| max_iter_ | Numeric scalar. Maximum number of iterations. | 
| prec_ | Numeric scalar. Tolerance for the stopping criterion (duality gap). | 
Details
COntinuation with NEsterov smoothing in a Shrinkage-Thresholding Algorithm (CONESTA, Hadj-Selem et al. 2018) doi:10.1109/TMI.2018.2829802 is an algorithm design for solving optimization problems including group-wise penalties. This function is an interface with the python solver. The MGLasso problem is first reformulated in a problem of the form
argmin 1/2 ||Y -
\tilde{X} \tilde{\beta}||_2^2 + \lambda_1 ||\tilde{\beta}||_1 + \lambda_2
\sum_{i<j} ||\boldsymbol A_{ij} \tilde{\beta}||_2
 where vector Y is
the vectorized form of matrix X.
Value
Numeric matrix of size pxp. Line k of the matrix represents
the coefficients obtained from the L1-L2 penalized regression of variable
k on the others.
See Also
mglasso() for the MGLasso model estimation.
Examples
## Not run: # because of installation of external packages during checks
mglasso::install_pylearn_parsimony(envname = "rmglasso", method = "conda")
reticulate::use_condaenv("rmglasso", required = TRUE)
reticulate::py_config()
n = 30
K = 2
p = 4
rho = 0.85
blocs <- list()
for (j in 1:K) {
 bloc <- matrix(rho, nrow = p/K, ncol = p/K)
   for(i in 1:(p/K)) { bloc[i,i] <- 1 }
   blocs[[j]] <- bloc
   }
mat.covariance <- Matrix::bdiag(blocs)
mat.covariance
set.seed(11)
X <- mvtnorm::rmvnorm(n, mean = rep(0,p), sigma = as.matrix(mat.covariance))
X <- scale(X)
res <- conesta(X, 0.1, 0.1)
## End(Not run)
Mglasso cost function
Description
cost computes the cost function of Mglasso method.
Usage
cost(beta, x, lambda1 = 0, lambda2 = 0)
Arguments
| beta | p by p numeric matrix. In rows, regression vectors coefficients after node-wise regression.  | 
| x | n by p numeric matrix. Data with variables in columns. | 
| lambda1 | numeric scalar. Lasso penalization parameter. | 
| lambda2 | numeric scalar. Fused-group Lasso penalization parameter. | 
Value
numeric scalar. The cost.
Compute distance matrix between regression vectors
Description
Compute distance matrix between regression vectors
Usage
dist_beta(beta, distance = "euclidean")
Arguments
| beta | matrix of regression vectors | 
| distance | euclidean or relative distance | 
Value
A numeric matrix of distances.
weighted sum/difference of two regression vectors
Description
fun_lines applies function fun to regression vectors while reordering the coefficients,
such that the j-th coefficient in beta[j, ] is permuted with the i-th coefficient.
Usage
fun_lines(i, j, beta, fun = `-`, ni = 1, nj = 1)
Arguments
| i | integer scalar. Index of the first vector. | 
| j | integer scalar. Index of the second vector. | 
| beta | p by p numeric matrix. In rows, regression vectors coefficients after node-wise regression.  | 
| fun | function. Applied on lines. | 
| ni | integer scalar. Weight for vector  | 
| nj | integer scalar. Weight for vector  | 
Value
numeric vector
Examples
beta <- matrix(round(rnorm(9),2), ncol = 3)
diag(beta) <- 0
beta
fun_lines(1, 2, beta)
fun_lines(2, 1, beta)
Plot the image of a matrix
Description
Plot the image of a matrix
Usage
image_sparse(matrix, main_ = "", sub_ = "", col_names = FALSE)
Arguments
| matrix | matrix of regression coefficients | 
| main_ | title | 
| sub_ | subtitle | 
| col_names | columns names | 
Value
No return value.
Install the python library pylearn-parsimony and other required libraries
Description
pylearn-parsimony contains the solver CONESTA used for the mglasso problem and is available on github at https://github.com/neurospin/pylearn-parsimony It is advised to use a python version ">=3.7,<3.10". Indeed, the latest version of scipy under which mglasso was developped is scipy 1.7.1 which is based on python ">=3.7,<3.10". In turn, this version of scipy can only be associated with a version of numpy ">=1.16.5,<1.23.0"
Usage
install_pylearn_parsimony(
  method = c("auto", "virtualenv", "conda"),
  conda = "auto",
  extra_pack = c("scipy == 1.7.1", "scikit-learn", "numpy == 1.22.4", "six",
    "matplotlib"),
  python_version = "3.8",
  restart_session = TRUE,
  envname = NULL,
  ...
)
Arguments
| method | Installation method. By default, "auto" automatically finds a method that will work in the local environment. Change the default to force a specific installation method. Note that the "virtualenv" method is not available on Windows. | 
| conda | The path to a  | 
| extra_pack | Character vector. Extra-packages to be installed. | 
| python_version | The requested Python version. Ignored when attempting to install with a Python virtual environment. | 
| restart_session | Restart R session after installing (note this will only occur within RStudio) | 
| envname | The name, or full path, of the environment in which Python
packages are to be installed. When  | 
| ... | additionnal arguments passed to  | 
Value
No return value.
compute clusters partition from pairs of variables to merge
Description
compute clusters partition from pairs of variables to merge
Usage
merge_clusters(pairs_to_merge, clusters)
Arguments
| pairs_to_merge | table of the indices of variables to be merge | 
| clusters | numeric vector. By default 1:p where p is the number of variables | 
Value
A numeric vector.
Inference of Multiscale Gaussian Graphical Model.
Description
Cluster variables using L2 fusion penalty and simultaneously estimates a gaussian graphical model structure with the addition of L1 sparsity penalty.
Usage
mglasso(
  x,
  lambda1 = 0,
  fuse_thresh = 0.001,
  maxit = NULL,
  distance = c("euclidean", "relative"),
  lambda2_start = 1e-04,
  lambda2_factor = 1.5,
  precision = 0.01,
  weights_ = NULL,
  type = c("initial"),
  compact = TRUE,
  verbose = FALSE
)
Arguments
| x | Numeric matrix ( | 
| lambda1 | Positive numeric scalar. Lasso penalty. | 
| fuse_thresh | Positive numeric scalar. Threshold for clusters fusion. | 
| maxit | Integer scalar. Maximum number of iterations. | 
| distance | Character. Distance between regression vectors with permutation on symmetric coefficients. | 
| lambda2_start | Numeric scalar. Starting value for fused-group Lasso penalty (clustering penalty). | 
| lambda2_factor | Numeric scalar. Step used to update fused-group Lasso penalty in a multiplicative way.. | 
| precision | Tolerance for the stopping criterion (duality gap). | 
| weights_ | Matrix of weights. | 
| type | If "initial" use classical version of MGLasso without weights. | 
| compact | Logical scalar. If TRUE, only save results when previous clusters are different from current. | 
| verbose | Logical scalar. Print trace. Default value is FALSE. | 
Details
Estimates a gaussian graphical model structure while hierarchically grouping
variables by optimizing a pseudo-likelihood function combining Lasso and
fuse-group Lasso penalties. The problem is solved via the COntinuation
with NEsterov smoothing in a Shrinkage-Thresholding Algorithm (Hadj-Selem et
al. 2018). Varying the fusion penalty \lambda_2 in a multiplicative
fashion allow to uncover a seemingly hierarchical clustering structure. For
\lambda_2 = 0, the approach is theoretically equivalent to the
Meinshausen-Bühlmann (2006) neighborhood selection as resuming to the
optimization of pseudo-likelihood function with \ell_1 penalty
(Rocha et al., 2008). The algorithm stops when all the variables have merged
into one cluster. The criterion used to merge clusters is the
\ell_2-norm distance between regression vectors.
For each iteration of the algorithm, the following function is optimized :
1/2 \sum_{i=1}^p || X^i - X^{\ i} \beta^i ||_2 ^2  + \lambda_1 \sum_{i
= 1}^p || \beta^i ||_1 + \lambda_2 \sum_{i < j} || \beta^i -
\tau_{ij}(\beta^j) ||_2.
where \beta^i is the vector of coefficients obtained after regression
X^i on the others and \tau_{ij} is a permutation exchanging
\beta_j^i with \beta_i^j.
Value
A list-like object of class mglasso is returned.
| out | List of lists. Each element of the list corresponds to a
clustering level. An element named  | 
| l1 | the sparsity penalty  | 
See Also
conesta() for the problem solver,
plot_mglasso() for plotting the output of mglasso.
Examples
## Not run: 
reticulate::use_condaenv("rmglasso", required = TRUE)
n = 50
K = 3
p = 9
rho = 0.85
blocs <- list()
for (j in 1:K) {
  bloc <- matrix(rho, nrow = p/K, ncol = p/K)
  for(i in 1:(p/K)) { bloc[i,i] <- 1 }
  blocs[[j]] <- bloc
}
mat.covariance <- Matrix::bdiag(blocs)
mat.covariance
set.seed(11)
X <- mvtnorm::rmvnorm(n, mean = rep(0,p), sigma = as.matrix(mat.covariance))
X <- scale(X)
res <- mglasso(X, 0.1, lambda2_start = 0.1)
res$out[[1]]$clusters
res$out[[1]]$beta
## End(Not run)
Plot MGLasso Clusterpath
Description
Plot MGLasso Clusterpath
Usage
plot_clusterpath(X, mglasso_res, colnames_ = NULL)
Arguments
| X | numeric matrix | 
| mglasso_res | object of class  | 
| colnames_ | columns labels | 
Details
This function plot the clustering path of mglasso method on the 2 principal components axis of X. As the centroids matrices are not of the same dimension as X, we choose to plot the predicted X matrix path.
Value
no return value.
Plot mglasso function output.
Description
Plot the object returned by the mglasso function.
Usage
plot_mglasso(mglasso_, levels_ = NULL)
Arguments
| mglasso_ | Object of class  | 
| levels_ | Character vector. Selected levels for which estimated matrices will be plot. If NULL plot all levels. | 
Value
No return value.
Compute precision matrix from regression vectors
Description
Compute precision matrix from regression vectors
Usage
precision_to_regression(K)
Arguments
| K | precision matrix | 
Value
A numeric matrix.
Apply symmetrization on estimated graph
Description
Apply symmetrization on estimated graph
Usage
symmetrize(mat, rule = "and")
Arguments
| mat | graph or precision matrix | 
| rule | "and" or "or" rule | 
Value
A numeric matrix.