Nothing
#' t-test each line of 2 groups of data
#'
#' \code{test2grp} performs t-test on two groups of data using \href{https://bioconductor.org/packages/release/bioc/html/limma.html}{limma},
#' this is a custom implementation of \code{\link[wrMisc]{moderTest2grp}} for proteomics.
#' The final obkect also includes the results without moderation by \code{limma} (eg BH-FDR in \code{$nonMod.BH}).
#' Furthermore, there is an option to make use of package ROTS (note, this will increase the time of computatins considerably).
#'
#' @param dat (matrix or data.frame) main data (may contain NAs)
#' @param questNo (integer) specify here which question, ie comparison should be adressed
#' @param useCol (integer or character)
#' @param grp (character or factor)
#' @param annot (matrix or data.frame)
#' @param ROTSn (integer) number of iterations ROTS runs (stabilization of reseults may be seen with >300)
#' @param silent (logical) suppress messages
#' @param debug (logical) display additional messages for debugging
#' @param callFrom (character) allow easier tracking of message(s) produced
#' @return This function returns a limma-type S3 object of class 'MArrayLM' (which can be accessed like a list); multiple testing correction types or modified testing by ROTS may get included ('p.value','FDR','BY','lfdr' or 'ROTS.BH')
#' @seealso \code{\link[wrMisc]{moderTest2grp}}, \code{\link[wrMisc]{pVal2lfdr}}, \code{\link[stats]{t.test}}, \code{ROTS} from the Bioconductor package \href{https://www.bioconductor.org/packages/release/bioc/html/ROTS.html}{ROTS}
#' @examples
#' set.seed(2018); datT8 <- matrix(round(rnorm(800)+3,1), nc=8, dimnames=list(paste(
#' "li",1:100,sep=""), paste(rep(LETTERS[1:3],c(3,3,2)),letters[18:25],sep="")))
#' datT8[3:6,1:2] <- datT8[3:6,1:2] +3 # augment lines 3:6 (c-f)
#' datT8[5:8,5:6] <- datT8[5:8,5:6] +3 # augment lines 5:8 (e-h)
#' grp8 <- gl(3,3,labels=LETTERS[1:3],length=8)
#' datL <- list(data=datT8, filt= wrMisc::presenceFilt(datT8,grp=grp8,maxGrpM=1,ratMa=0.8))
#' testAvB0 <- wrMisc::moderTest2grp(datT8[,1:6], gl(2,3))
#' testAvB <- test2grp(datL, questNo=1)
#' @export
test2grp <- function(dat, questNo, useCol=NULL, grp=NULL, annot=NULL, ROTSn=0, silent=FALSE, debug=FALSE, callFrom=NULL) {
## custom extracting data from list with $data and $filt
## return MA-type list with test resuls
fxNa <- wrMisc::.composeCallName(callFrom,newNa="test2grp")
msg <- " 'dat' must be list containing $data and $filt, with same number of rows !!"
if(!all(c("data","filt") %in% names(dat))) stop(msg)
if(nrow(dat$filt) != nrow(dat$data)) stop(msg)
if(!isTRUE(silent)) silent <- FALSE
if(isTRUE(debug)) silent <- FALSE else debug <- FALSE
questNa <- colnames(dat$filt)[questNo]
questNa <- unlist(strsplit(questNa, "-"))
if(is.null(useCol)) useCol <- lapply(questNa, grep, colnames(dat$data))
if(is.null(grp)) {grp <- rep(questNa, sapply(useCol, length))
if(!silent) message("Groups set automatic to ",wrMisc::pasteC(grp,quoteC="'")) }
out <- wrMisc::moderTest2grp(dat$data[which(dat$filt[,questNo]), unlist(useCol)], gr=grp, limmaOutput=TRUE, addResults=c("lfdr","FDR","Mval","means","nonMod"), callFrom=fxNa)
out$BH <- apply(out$p.value, 2, stats::p.adjust, method="BH")
out$nonMod.BH <- stats::p.adjust(out$nonMod.p, method="BH")
chLfdr <- try(find.package("fdrtools"), silent=TRUE)
if(inherits(chLfdr, "try-error")) {
message(fxNa,"Package 'fdrtool' not found ! Please install for calculating lfdr-values ..")
} else out$nonMod.lfdr <- wrMisc::pVal2lfdr(out$nonMod.p)
## need to add : (non-moderated test and) ROTS
if(length(ROTSn==1)) if(ROTSn >0 && !is.na(ROTSn)) {
chPa <- requireNamespace("ROTS", quietly=TRUE)
if(!chPa) { ROTSn <- NULL
message(fxNa,"Package 'ROTS' not found ! Please install first .. setting ROTSn=NULL") }
} else ROTSn <- NULL
if(length(ROTSn)==1) if(ROTSn >0) {
## this part requires ROTS
tmp <- ROTS::ROTS(dat$data[which(dat$filt[,questNo]), unlist(useCol)], groups=as.numeric(as.factor(grp)) -1, B=ROTSn) # ,K=500
out$ROTS.p <- tmp$pvalue
out$ROTS.BH <- stats::p.adjust(tmp$pvalue, method="BH")
if(! inherits(chLfdr, "try-error")) out$ROTS.lfdr <- wrMisc::pVal2lfdr(tmp$pvalue)
}
if(!is.null(annot)) out$annot <- as.matrix(annot[which(dat$filt[,questNo]),])
out }
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.