R/Bseqsc.R

Defines functions Bseqsc

Documented in Bseqsc

#' BseqSC
#'
#' @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.
#' @import Seurat
#' @importFrom Biobase ExpressionSet
#' @importFrom dplyr top_n group_by
#' @importFrom  vctrs data_frame
#' @importFrom bseqsc bseqsc_basis bseqsc_proportions
#' @return   A data frame of Mixed cellular fractions.
#' @export
#'
#'
#' @examples

#'  # Bulk <- Bulk_GSE60424
#'  # SC <- SC_GSE60424
#'  # Label <- Label_GSE60424$Label
#'  # res <- Bseqsc(bulkdata = Bulk,
#'  #              scdata = SC,
#'  #              label = Label)

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

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

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

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

  scdata <- scdata[gene,]

  bulkdata <- bulkdata[gene,]

  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

  sc.eset <- BisqueRNA::SeuratToExpressionSet(scRNA,
                                              delimiter="tao",
                                              position=1,
                                              version="v3")

  bulk.eset <- Biobase::ExpressionSet(assayData = as.matrix(bulkdata))

  markers <- Seurat::FindAllMarkers(scRNA,
                                    only.pos = TRUE,
                                    min.pct = 0.25,
                                    test.use = "LR",
                                    logfc.threshold = 0.25)



  FC_Marker10 <- dplyr::top_n(dplyr::group_by(markers,cluster),n = 10, wt = avg_log2FC)

  BIS_markers <-  vctrs::data_frame("gene"=FC_Marker10$gene,
                                    "cluster"=FC_Marker10$cluster,
                                    "avg_logFC"=FC_Marker10$avg_log2FC)

  markersc <- split((BIS_markers[,1]),BIS_markers[,2])

  bseqsc_signature <- bseqsc::bseqsc_basis(sc.eset,
                                           markersc,
                                           clusters = 'cellType',
                                           samples = 'SubjectName',
                                           ct.scale = TRUE)



  bseqsc_res <- bseqsc::bseqsc_proportions(bulk.eset,
                                           bseqsc_signature,
                                           verbose = TRUE)

  res_Bseqsc <-  t(bseqsc_res[["coefficients"]])



  return(res_Bseqsc)

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