#' Plot of either PCA or MDS coordinates for the distances of normalized or unnormalized counts.
#'
#' This function plots the PCA / MDS coordinates for the "n" features of interest. Potentially uncovering batch
#' effects or feature relationships.
#'
#'
#' @param obj A MRexperiment object or count matrix.
#' @param tran Transpose the matrix.
#' @param comp Which components to display
#' @param usePCA TRUE/FALSE whether to use PCA or MDS coordinates (TRUE is PCA).
#' @param useDist TRUE/FALSE whether to calculate distances.
#' @param distfun Distance function, default is stats::dist
#' @param dist.method If useDist==TRUE, what method to calculate distances.
#' @param norm Whether or not to normalize the counts - if MRexperiment object.
#' @param log Whether or not to log2 the counts - if MRexperiment object.
#' @param n Number of features to make use of in calculating your distances.
#' @param ... Additional plot arguments.
#' @return coordinates
#' @seealso \code{\link{cumNormMat}}
#' @examples
#'
#' data(mouseData)
#' cl = pData(mouseData)[,3]
#' plotOrd(mouseData,tran=TRUE,useDist=TRUE,pch=21,bg=factor(cl),usePCA=FALSE)
#'
plotOrd<-function(obj,tran=TRUE,comp=1:2,norm=TRUE,log=TRUE,usePCA=TRUE,useDist=FALSE,distfun=stats::dist,dist.method="euclidian",n=NULL,...){
mat = returnAppropriateObj(obj,norm,log)
if(useDist==FALSE & usePCA==FALSE) stop("Classical MDS requires distances")
if(is.null(n)) n = min(nrow(mat),1000)
if(length(comp)>2) stop("Can't display more than two components")
otusToKeep <- which(rowSums(mat)>0)
otuVars<-rowSds(mat[otusToKeep,])
otuIndices<-otusToKeep[order(otuVars,decreasing=TRUE)[seq_len(n)]]
mat <- mat[otuIndices,]
if(tran==TRUE){
mat = t(mat)
}
if(useDist==TRUE){
d <- distfun(mat,method=dist.method)
} else{ d = mat }
if(usePCA==FALSE){
ord = cmdscale(d,k = max(comp))
xl = paste("MDS component:",comp[1])
yl = paste("MDS component:",comp[2])
} else{
pcaRes <- prcomp(d)
ord <- pcaRes$x
vars <- pcaRes$sdev^2
vars <- round(vars/sum(vars),5)*100
xl <- sprintf("PCA %s: %.2f%% variance",colnames(ord)[comp[1]], vars[comp[1]])
yl <- sprintf("PCA %s: %.2f%% variance",colnames(ord)[comp[2]], vars[comp[2]])
}
plot(ord[,comp],ylab=yl,xlab=xl,...)
invisible(ord[,comp])
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.