Skip to content
Snippets Groups Projects
scDD-estimate.R 2.28 KiB
Newer Older
Luke Zappia's avatar
Luke Zappia committed
#' Estimate scDD simulation parameters
#'
#' Estimate simulation parameters for the scDD simulation from a real dataset.
#'
#' @param counts either a counts matrix or an SCESet object containing count
#'        data to estimate parameters from.
#' @param conditions Vector giving the condition that each cell belongs to.
#'        Conditions can be 1 or 2.
#' @param params SCDDParams object to store estimated values in.
#'
#' @details
#' This function is just a wrapper around \code{\link[scDD]{preprocess}} that
#' takes the output and converts it to a SCDDParams object. See
#' \code{\link[scDD]{preprocess}} for details.
#'
#' @return SCDDParams object containing the estimated parameters.
#'
#' @examples
#' data("sc_example_counts")
Luke Zappia's avatar
Luke Zappia committed
#' conditions <- sample(1:2, ncol(sc_example_counts), replace = TRUE)
#' params <- scDDEstimate(sc_example_counts, conditions)
Luke Zappia's avatar
Luke Zappia committed
#' params
#' @export
scDDEstimate <- function(counts, conditions, params = newSCDDParams()) {
    UseMethod("scDDEstimate")
}

#' @rdname scDDEstimate
#' @export
scDDEstimate.SCESet <- function(counts, conditions, params = newSCDDParams()) {
    counts <- scater::counts(counts)
    scDDEstimate(counts, conditions, params)
Luke Zappia's avatar
Luke Zappia committed
}

#' @rdname scDDEstimate
#' @importFrom methods as
Luke Zappia's avatar
Luke Zappia committed
#' @export
scDDEstimate.matrix <- function(counts, conditions, params = newSCDDParams()) {

Luke Zappia's avatar
Luke Zappia committed
    if (!requireNamespace("scDD", quietly = TRUE)) {
Luke Zappia's avatar
Luke Zappia committed
        stop("The scDD simulation requires the 'scDD' package.")
Luke Zappia's avatar
Luke Zappia committed
    }

Luke Zappia's avatar
Luke Zappia committed
    checkmate::assertClass(params, "SCDDParams")
    checkmate::assertIntegerish(conditions, len = ncol(counts), lower = 1,
                                upper = 2)

    counts.list <- list(Cond1 = counts[, conditions == 1],
                        Cond2 = counts[, conditions == 2])

    processed <- scDD::preprocess(counts.list, c("Cond1", "Cond2"),
                                  median_norm = TRUE)

Luke Zappia's avatar
Luke Zappia committed
    assays <- S4Vectors::SimpleList(NormCounts = processed)
Luke Zappia's avatar
Luke Zappia committed

Luke Zappia's avatar
Luke Zappia committed
    colData <- S4Vectors::DataFrame(condition = conditions,
                                    row.names = colnames(processed))

    SCdat <- SummarizedExperiment::SummarizedExperiment(assays = assays,
                                                        colData = colData)
Luke Zappia's avatar
Luke Zappia committed

Luke Zappia's avatar
Luke Zappia committed
    params <- setParams(params, nCells = round(dim(SCdat)[2] / 2),
                        SCdat = SCdat)
Luke Zappia's avatar
Luke Zappia committed

    return(params)
}