Nothing
#'
#' Plot the path obtained from \code{\link{MLGL}} function
#'
#' @param x \code{\link{MLGL}} object
#' @param log.lambda If TRUE, use log(lambda) instead of lambda in abscissa
#' @param lambda.lines if TRUE, add vertical lines at lambda values
#' @param ... Other parameters for plot function
#'
#' @examples
#' # Simulate gaussian data with block-diagonal variance matrix containing 12 blocks of size 5
#' set.seed(42)
#' X <- simuBlockGaussian(50, 12, 5, 0.7)
#' # Generate a response variable
#' y <- X[, c(2, 7, 12)] %*% c(2, 2, -2) + rnorm(50, 0, 0.5)
#' # Apply MLGL method
#' res <- MLGL(X, y)
#' # Plot the solution path
#' plot(res)
#' @method plot MLGL
#'
#' @seealso \link{MLGL}
#'
#' @export
plot.MLGL <- function(x, log.lambda = FALSE, lambda.lines = FALSE, ...) {
# check log
if (length(log.lambda) != 1) {
stop("log must be a boolean.")
}
if (!is.logical(log.lambda)) {
stop("log must be a boolean.")
}
# check log
if (length(lambda.lines) != 1) {
stop("lambda.lines must be a boolean.")
}
if (!is.logical(lambda.lines)) {
stop("lambda.lines must be a boolean.")
}
bet <- listToMatrix(x, "lambda")
# abscissa: log or not ?
absc <- x$lambda
if (log.lambda) {
absc <- log(absc)
}
# plot
matplot(absc, bet,
type = "l", lty = 1, xlab = ifelse(log.lambda, expression(paste("log(", lambda, ")")), expression(lambda)),
ylab = "Coefficients", main = "Solution path", ...
)
# add vertical lines for lambda values
if (lambda.lines) {
abline(v = absc, col = "blue", lty = "dotted", lwd = 0.5)
}
}
#'
#' Plot the cross-validation obtained from \code{\link{cv.MLGL}} function
#'
#' @param x \code{\link{cv.MLGL}} object
#' @param log.lambda If TRUE, use log(lambda) instead of lambda in abscissa
#' @param ... Other parameters for plot function
#'
#' @examples
#' set.seed(42)
#' # Simulate gaussian data with block-diagonal variance matrix containing 12 blocks of size 5
#' X <- simuBlockGaussian(50, 12, 5, 0.7)
#' # Generate a response variable
#' y <- X[, c(2, 7, 12)] %*% c(2, 2, -2) + rnorm(50, 0, 0.5)
#' # Apply cv.MLGL method
#' res <- cv.MLGL(X, y)
#' # Plot the cv error curve
#' plot(res)
#' @method plot cv.MLGL
#'
#' @seealso \link{cv.MLGL}
#'
#' @export
plot.cv.MLGL <- function(x, log.lambda = FALSE, ...) {
# check log
if (length(log.lambda) != 1) {
stop("log must be a boolean.")
}
if (!is.logical(log.lambda)) {
stop("log must be a boolean.")
}
# abscissa: log or not ?
absc <- x$lambda
lam <- c(x$lambda.min, x$lambda.1se)
if (log.lambda) {
absc <- log(absc)
lam <- log(lam)
}
# plot
matplot(absc, cbind(x$cvm, x$cvupper, x$cvlower),
type = "l", lty = c(1, 2, 2), col = c(1, 2, 2),
xlab = ifelse(log.lambda, expression(paste("log(", lambda, ")")), expression(lambda)), ylab = "Error", ...
)
abline(v = lam, col = "blue", lty = "dashed")
}
#'
#' Plot the stability path obtained from \code{\link{stability.MLGL}} function
#'
#' @param x \code{\link{stability.MLGL}} object
#' @param log.lambda If TRUE, use log(lambda) instead of lambda in abscissa
#' @param threshold Threshold for selection frequency
#' @param ... Other parameters for plot function
#'
#' @return A list containing:
#' \describe{
#' \item{var}{Index of selected variables for the given threshold.}
#' \item{group}{Index of the associated group.}
#' \item{threshold}{Value of threshold}
#' }
#'
#' @examples
#' \donttest{
#' set.seed(42)
#' # Simulate gaussian data with block-diagonal variance matrix containing 12 blocks of size 5
#' X <- simuBlockGaussian(50, 12, 5, 0.7)
#'
#' # Generate a response variable
#' y <- X[, c(2, 7, 12)] %*% c(2, 2, -2) + rnorm(50, 0, 0.5)
#'
#' # Apply stability.MLGL method
#' res <- stability.MLGL(X, y)
#' selected <- plot(res)
#' print(selected)
#' }
#'
#' @method plot stability.MLGL
#'
#' @seealso \link{stability.MLGL}
#'
#' @export
plot.stability.MLGL <- function(x, log.lambda = FALSE, threshold = 0.75, ...) {
# check log
if (length(log.lambda) != 1) {
stop("log must be a boolean.")
}
if (!is.logical(log.lambda)) {
stop("log must be a boolean.")
}
# threshold
if (!is.numeric(threshold) | (length(threshold) != 1)) {
stop("threshold must be a positive real lesser than 1.")
}
if ((threshold < 0) | (threshold > 1)) {
stop("threshold must be a positive real lesser than 1.")
}
# abscissa: log or not ?
absc <- x$lambda
if (log.lambda) {
absc <- log(absc)
}
# determine color according to threshold
col <- apply(x$stability, 2, FUN = function(x) {
ifelse(any(x > threshold), 2, 1)
})
# plot
matplot(absc, x$stability,
type = "l", lty = 1, col = col,
xlab = ifelse(log.lambda, expression(paste("log(", lambda, ")")), expression(lambda)), ylab = "Probability selection", ...
)
abline(h = threshold, col = "blue", lty = "dashed")
# determine selected groups and variables
selectedGroup <- which(col == 2)
indsel <- x$group %in% selectedGroup
return(invisible(list(var = x$var[indsel], group = x$group[indsel], threshold = threshold)))
}
#'
#' Plot the path obtained from \code{\link{fullProcess}} function
#'
#' @param x \code{\link{fullProcess}} object
#' @param log.lambda If TRUE, use log(lambda) instead of lambda in abscissa
#' @param lambda.lines If TRUE, add vertical lines at lambda values
#' @param lambda.opt If there is several optimal lambdas, which one to print "min", "max" or "both"
#' @param ... Other parameters for plot function
#'
#' @examples
#' set.seed(42)
#' # Simulate gaussian data with block-diagonal variance matrix containing 12 blocks of size 5
#' X <- simuBlockGaussian(50, 12, 5, 0.7)
#' # Generate a response variable
#' y <- X[, c(2, 7, 12)] %*% c(2, 2, -2) + rnorm(50, 0, 0.5)
#' # Apply MLGL method
#' res <- fullProcess(X, y)
#' # Plot the solution path
#' plot(res)
#' @method plot fullProcess
#'
#' @seealso \link{fullProcess}
#'
#' @export
plot.fullProcess <- function(x, log.lambda = FALSE, lambda.lines = FALSE, lambda.opt = c("min", "max", "both"), ...) {
lambda.opt <- match.arg(lambda.opt)
lambdaOpt <- switch(lambda.opt,
"min" = x$lambdaOpt[1],
"max" = x$lambdaOpt[length(x$lambdaOpt)],
"both" = c(1, x$lambdaOpt[length(x$lambdaOpt)])
)
par(mfrow = c(2, 1))
plot(x$res, ...)
abline(v = ifelse(log.lambda, log(lambdaOpt), lambdaOpt), col = "red", lty = "dotted")
text(ifelse(log.lambda, log(lambdaOpt), lambdaOpt), 0, labels = expression(lambda[opt]), col = "red", pos = 1)
abscissa <- x$res$lambda
if (log.lambda) {
abscissa <- log(abscissa)
}
matplot(abscissa, cbind(x$res$nGroup, sapply(x$reject, length)),
type = "l", col = c(1, 4), xlab = ifelse(log.lambda, expression(paste("log(", lambda, ")")), expression(lambda)),
ylab = "Number of groups", main = "Number of groups in MLGL path", ...
)
abline(v = ifelse(log.lambda, log(lambdaOpt), lambdaOpt), col = "red", lty = "dotted")
text(ifelse(log.lambda, log(lambdaOpt), lambdaOpt), 0, labels = expression(lambda[opt]), col = "red", pos = 2)
legend("topright", c("before testing", "after testing"), col = c(1, 4), lty = 1:2, cex = 0.6)
}
#'
#' Plot the path obtained from \code{\link{HMT}} function
#'
#' @param x \code{\link{fullProcess}} object
#' @param log.lambda If TRUE, use log(lambda) instead of lambda in abscissa
#' @param lambda.lines If TRUE, add vertical lines at lambda values
#' @param lambda.opt If there is several optimal lambdas, which one to print "min", "max" or "both"
#' @param ... Other parameters for plot function
#'
#' @examples
#' set.seed(42)
#' # Simulate gaussian data with block-diagonal variance matrix containing 12 blocks of size 5
#' X <- simuBlockGaussian(50, 12, 5, 0.7)
#' # Generate a response variable
#' y <- X[, c(2, 7, 12)] %*% c(2, 2, -2) + rnorm(50, 0, 0.5)
#' # Apply MLGL method
#' res <- MLGL(X, y)
#'
#' out <- HMT(res, X, y)
#' plot(out)
#' @method plot HMT
#'
#' @seealso \link{HMT}
#'
#' @export
plot.HMT <- function(x, log.lambda = FALSE, lambda.lines = FALSE, lambda.opt = c("min", "max", "both"), ...) {
lambda.opt <- match.arg(lambda.opt)
lambdaOpt <- switch(lambda.opt,
"min" = x$lambdaOpt[1],
"max" = x$lambdaOpt[length(x$lambdaOpt)],
"both" = c(1, x$lambdaOpt[length(x$lambdaOpt)])
)
abscissa <- x$lambda
if (log.lambda) {
abscissa <- log(abscissa)
}
matplot(abscissa, cbind(x$nGroup, x$nSelectedGroup),
type = "l", col = c(1, 4), xlab = ifelse(log.lambda, expression(paste("log(", lambda, ")")), expression(lambda)),
ylab = "Number of groups", main = "Number of groups in MLGL path", ...
)
abline(v = ifelse(log.lambda, log(lambdaOpt), lambdaOpt), col = "red", lty = "dotted")
text(ifelse(log.lambda, log(lambdaOpt), lambdaOpt), 0, labels = expression(lambda[opt]), col = "red", pos = 2)
legend("topright", c("before testing", "after testing"), col = c(1, 4), lty = 1:2, cex = 0.6)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.