#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.