R/studentstTest.R

Defines functions studentstTest

Documented in studentstTest

#' Performs student's t-test and stores data
#'
#' @param data expression data
#' @param group group vector
#' @param ref control group
#' @param case case group
#' @param var.equal assume equal variance
#' @param name name
#'
#' @return
#' @export
#'
#'
#'
studentstTest <- function(data, group, ref, case, var.equal = T, name) {

  if(!hasArg(data)) {
    message("Find data frame.")
    data <- getData()
  }

  if(!hasArg(group)) {
    message("Find group vektor.")
    group <- getData()
  }

  group <- group[rownames(data)]



  #assign ref and case
  autoname = F
  if(length(na.omit(unique(group))) == 2) {
    if(hasArg(ref)) {
      autoname = T
      if(ref %in% group) {
        case <- setdiff(na.omit(unique(group)), ref)
      }
    }

    else {
      group2 <- setSampleGroups(group = group, n = 2)
      ref <- unique(group[group2 == 1])
      case <- unique(group[group2 == 2])
    }
  }

  else if(!hasArg(ref) || !hasArg(case)) {
    group2 <- setSampleGroups(group = group, n = 2)
    ref <- unique(group[group2 == 1])
    case <- unique(group[group2 == 2])
  }





  data.log2 <- log2(data)
  data.log2[is.infinite(data.log2)] <- 0




  data.ttest <- matrix(ncol = 2, nrow = ncol(data))

  rownames(data.ttest) <- colnames(data)

  colnames(data.ttest) <- c("log2.fc", "p.value")


  for(i in 1:nrow(data.ttest)) {
    data.ttest[i,"log2.fc"] <- log2(mean(data[group == case,i]) / mean(data[group == ref,i]))
    data.ttest[i,"p.value"] <- t.test(data.log2[group == case,i], data.log2[group == ref,i], var.equal = var.equal)$p.value
  }



  plot(data.ttest[,"log2.fc"],
       -log10(data.ttest[,"p.value"]),
       pch = 16,
       xlab = paste0("log2 fold-change (", ref, "-", case, ")"),
       ylab = "-log10(p-value)")
  abline(h = -log10(0.05))

  #Save results in list
  if(autoname) {
    name <- paste0("ttest_", case)
  }

  saveThis(data.ttest, name, destination = "dat")



}
nicohuttmann/htmnanalysis documentation built on Dec. 6, 2020, 3:02 a.m.