R/DCQ.R

Defines functions Dcq

Documented in Dcq

#' DCQ
#' @param scdata single data with genes in rows and cells in columns.
#' @param bulkdata A matrix with genes in rows and samples in columns.
#' @param label The cell type label of single data.
#' @importFrom Seurat CreateSeuratObject NormalizeData FindVariableFeatures ScaleData
#' @importFrom ComICS dcq
#' @return   A data frame of Mixed cellular fractions.
#' @export
#'
#' @examples
#'
#' Bulk <- Bulk_GSE60424
#' SC <- SC_GSE60424
#' Label <- Label_GSE60424$Label
#' res <- Dcq(bulkdata = Bulk,
#'             scdata = SC,
#'             label = Label)
#'



Dcq <- function(scdata, bulkdata,label) {

  gene <- intersect(rownames(scdata),rownames(bulkdata))

  scdata <- scdata[gene,]

  bulkdata <- bulkdata[gene,]

  all_cell_type <- unique(as.character(label))

  pure_samples <- lapply(1:length(all_cell_type), function(i) {

    which(as.character(label) == all_cell_type[i])
  })

  names(pure_samples) <-  all_cell_type

  pure_samples_data <- NULL

  for (i in 1:length(all_cell_type)) {

    if(length(pure_samples[[i]])>1){

      tmp <- apply(scdata[,pure_samples[[i]]], 1, mean)}else

        {tmp <- scdata[,pure_samples[[i]]]}

    pure_samples_data <- cbind(pure_samples_data ,tmp)

  }

  colnames(pure_samples_data) <- all_cell_type




  scRNA <- Seurat::CreateSeuratObject(counts = scdata, project = "SC")


  scRNA <- Seurat::NormalizeData(scRNA, verbose = FALSE)

  scRNA <- Seurat::FindVariableFeatures(scRNA, selection.method = "vst",nfeatures = 2000)

  all.genes <- rownames(scRNA)

  scRNA <- Seurat::ScaleData(scRNA, features = all.genes)

  factor_label <- as.factor(label)

  names(factor_label) <- colnames(scdata)

  scRNA@active.ident <- factor_label

  DCQ_mar <- data.frame("DCQ"=unique(scRNA@assays[["RNA"]]@var.features))

  rownames(pure_samples_data) <- gsub("_","-",rownames(pure_samples_data))

  ref <- pure_samples_data[DCQ_mar$DCQ,]

  rownames(bulkdata) <- gsub("_","-",rownames(bulkdata))

  bulkdata <-  bulkdata[DCQ_mar$DCQ,]

  Dcq_res <- ComICS::dcq(reference_data = ref,
                         mix_data = bulkdata,
                         marker_set = DCQ_mar)

  res_Dcq <- Dcq_res$average



  return(res_Dcq)
}
libcell/deconvBench documentation built on Sept. 24, 2022, 12:36 p.m.