Nothing
##' Class "cv.fa"
##'
##' Class of object returned by a cross-validation performed through
##' the \code{cv.fa} method.
##'
##' @section Slots: \describe{
##' \item{\code{byvariable}:}{list (for each variable) of list
##' containing a data frame (containing the cross validation error and its
## associated value of standard error for each value of \code{lambda}) and the
##' min \code{lambda}}
##' \item{\code{global}:}{almost identical to byvariable although it contains
##' only one list containing a dataframe (of the mean error across all variables and
##' its associated standard error for each lambda ) and the lambda min}
##' \item{\code{lambdalist}:}{vector of \eqn{\lambda}
##' for which each cross-validation has been performed.}
##' \item{\code{folds}:}{list of \code{K} vectors indicating the folds
##' used for cross-validation.}
##' \item{\code{algorithm}:}{Indicates which of the two algorithms was used.}
##' }
##'
##' The specific \code{\link{plot}} method is documented.
##'
##' @docType class
##'
##' @keywords class
##'
##' @seealso See also \code{\link{plot,cv.fa-method}} and
##' \code{\link{cv.fa}}.
##'
##' @name cv.fa-class
##'
##' @rdname cv.fa-class
##'
##' @exportClass cv.fa
##'
setClass("cv.fa",
representation = representation(
byvariable = "list",
global = "list",
lambdalist = "numeric",
folds = "list",
algorithm = "character"
# global and variable contains one list for each gene or one global list containing :
# cv.error = "numeric", lambda.min = "numeric", cv.sd ="numeric" and beta.min = "numeric"
)
)
##' Plot method for cross validated error of a \code{fusedanova} model
##'
##' Produce a plot of the cross validated error of a \code{fusedanova}
##' model.
##'
##' @usage \\S4method{plot}{cv.fa}(x, y, varvect = NULL, plotting=TRUE,
##' lambdamins=TRUE, log.scale=TRUE, reverse=FALSE,main = "Cross-validation error",...)
##' @param x output of a \code{crossval} run (must be of class
##' \code{cv.fa}).
##' @param y used for S4 compatibility.
##' @param varvect integer vector; give the index of all variables to plot separately.
##' By default, varvect is NULL and the plot returns the plot of the \code{global} attribute
##' of a \code{cv.fa} instance.
##' @param plotting logical; indicates if the graph should be plotted. Default is \code{TRUE}.
##' @param lambdamins logical; should the distribution of lambdamin be plotted ?
##' @param log.scale logical; indicates if a log-scale should be used
##' @param reverse logical; should the X-axis by reversed when \code{xvar=lambda}? Default is FALSE. Ignored for 2D cross-validation plot.
##' @param main the main title, with a hopefully appropriate default definition.
##' @param ... used for S4 compatibility.
##'
##' @return a \pkg{ggplot2} object or a list of \pkg{ggplot2} objects
##' (if a list of variable was provided) which can be plotted via the
##' \code{print} method
##' @name plot,cv.fa-method
##' @aliases plot,cv.fa-method
##' @aliases plot.cv.fa
##' @docType methods
##' @rdname plot.cv.fa
##'
##' @seealso \code{\linkS4class{cv.fa}}.
##'
##' @examples \dontrun{
##' data(aves)
##' cv.out <- cv.fa(aves$weight, aves$family)
##' V100.cv.out <- cv.fa(aves$weight, aves$family, V=50)
##' plot(cv.out)
##' plot(V100.cv.out)
##' }
##'
##' @exportMethod plot
##' @export
setMethod("plot", "cv.fa", definition =
function(x, y, varvect = NULL, plotting=TRUE, lambdamins=TRUE, log.scale=TRUE, reverse=FALSE,main = "Cross-validation error",...) {
K <- length(x@folds)
n <- length(unlist(x@folds))
## GLOBAL CROSS-VALIDATION GRAPH
if (is.null(varvect)){
if (log.scale) {
x@global$cv.error$lambdalist <- log10(x@global$cv.error$lambdalist)
}
d <- ggplot(x@global$cv.error, aes(x=lambdalist,y=err)) + ylab("Mean square error") + geom_point(alpha=0.3)
d <- d + geom_smooth(aes(ymin=err-sd, ymax=err+sd), data=x@global$cv.error, alpha=0.2, stat="identity")
if (reverse==TRUE) {
d <- d + scale_x_reverse()
}
if (log.scale) {
d <- d + xlab(expression(log[10](lambda)))
d <- d + annotation_logticks(sides="b")
} else {
d <- d + xlab( expression(lambda) )
}
if (lambdamins & is.null(varvect)){
if (log.scale) {
lambda <- data.frame(xval=log10(unlist(lapply(x@byvariable, function(z){z$lambda.min}))),
lambda.choice=factor(1:length(x@byvariable)))
}else{
lambda <- data.frame(xval= unlist(lapply(x@byvariable, function(z){z$lambda.min})),
lambda.choice=factor(1:length(x@byvariable)))
}
d <- d + geom_vline(data=lambda, aes(xintercept=xval,colour=lambda.choice),
linetype="dashed", alpha=0.5)
#d <- d + geom_line(data = density(lambda$xval), alpha = 0.2)
}
d <- d + ggtitle(main) #+
## DO THE PLOT
if (plotting) {print(d)}
}else{
# function that generate a plot of a variable
plotunique <- function(variable,log.scale,reverse){
if (log.scale) {
variable$cv.error$lambdalist <- log10(variable$cv.error$lambdalist)
}
d <- ggplot(variable$cv.error, aes(x=lambdalist,y=err)) + ylab("Mean square error") + geom_point(alpha=0.3)
d <- d + geom_smooth(aes(ymin=err-sd, ymax=err+sd), data=variable$cv.error, alpha=0.2, stat="identity")
if (reverse==TRUE) {
d <- d + scale_x_reverse()
}
if (log.scale) {
d <- d + xlab(expression(log[10](lambda)))
d <- d + annotation_logticks(sides="b")
} else {
d <- d + xlab(expression(lambda))
}
return(d)
}
# generate one plot for each choosen variable
d = lapply(x@byvariable[varvect],
function(z){plotunique(z, log.scale=log.scale,reverse=reverse)})
if (plotting){multiplot(plotlist=d)}
}
return(d)
})
# Multiple plot function
# from http://www.cookbook-r.com/
# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)
# - cols: Number of columns in layout
# - layout: A matrix specifying the layout. If present, 'cols' is ignored.
#
# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),
# then plot 1 will go in the upper left, 2 will go in the upper right, and
# 3 will go all the way across the bottom.
#
multiplot <- function(...,plotlist=NULL, file, cols=1, layout=NULL) {
# Make a list from the ... arguments and plotlist
plots <- c(list(...), plotlist)
numPlots = length(plots)
# If layout is NULL, then use 'cols' to determine layout
if (is.null(layout)) {
# Make the panel
# ncol: Number of columns of plots
# nrow: Number of rows needed, calculated from # of cols
layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
ncol = cols, nrow = ceiling(numPlots/cols))
}
if (numPlots==1) {
print(plots[[1]])
} else {
# Set up the page
grid.newpage()
pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))
# Make each plot, in the correct location
for (i in 1:numPlots) {
# Get the i,j matrix positions of the regions that contain this subplot
matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
layout.pos.col = matchidx$col))
}
}
}
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.