Nothing
#' Get Signature Exposure from 'Signature' Object
#'
#' The expected number of mutations (or copy number segment records) with each signature was
#' determined after a scaling transformation V ~ WH = W'H' where W' = WU' and H' = UH.
#' The scaling matrix U is a KxK diagnal matrix (K is signature number, U' is the inverse of U)
#' with the element corresponding to the L1-norm of column vectors of W
#' (ie. the sum of the elements of the vector). As a result, the k-th row vector of the final
#' matrix H' represents the absolute exposure (activity) of the k-th process across samples
#' (e.g., for SBS, the estimated (or expected) number of mutations generated by the k-th process).
#' Of note, for copy number signatures, only components of feature CN was used for calculating H'.
#'
#' @param Signature a `Signature` object obtained either from [sig_extract] or [sig_auto_extract],
#' or just a raw exposure matrix with column representing samples (patients) and row
#' representing signatures.
#' @param type 'absolute' for signature exposure and 'relative' for signature relative exposure.
#' @param rel_threshold only used when type is 'relative', relative exposure less
#' than (`<=`) this value will be set to 0 and thus all signature exposures
#' may not sum to 1. This is similar to this argument in [sig_fit].
#' @return a `data.table`
#' @references
#' Kim, Jaegil, et al. "Somatic ERCC2 mutations are associated with a distinct genomic signature in urothelial tumors."
#' Nature genetics 48.6 (2016): 600.
#' @author Shixiang Wang <w_shixiang@163.com>
#' @export
#'
#' @examples
#' # Load mutational signature
#' load(system.file("extdata", "toy_mutational_signature.RData",
#' package = "sigminer", mustWork = TRUE
#' ))
#' # Get signature exposure
#' expo1 <- get_sig_exposure(sig2)
#' expo1
#' expo2 <- get_sig_exposure(sig2, type = "relative")
#' expo2
#' @testexamples
#' expect_equal(nrow(expo1), 188L)
#' expect_equal(nrow(expo2), 186L)
get_sig_exposure <- function(Signature,
type = c("absolute", "relative"),
rel_threshold = 0.01) {
if (inherits(Signature, "Signature")) {
h <- Signature$Exposure
} else if (is.matrix(Signature)) {
if (!all(startsWith(rownames(Signature), "Sig"))) {
stop("If Signature is a matrix, row names must start with 'Sig'!", call. = FALSE)
}
h <- Signature
} else {
stop("Invalid input for 'Signature'", call. = FALSE)
}
if (is.null(rownames(h)) | is.null(colnames(h))) {
stop("Rownames or Colnames cannot be NULL!")
}
type <- match.arg(type)
h <- t(h) %>%
as.data.frame() %>%
tibble::rownames_to_column(var = "sample") %>%
data.table::as.data.table()
if (type == "absolute") {
return(h)
}
h_norm <- h[, -1] / rowSums(h[, -1])
h_norm[h_norm <= rel_threshold] <- 0
h_norm <- na.omit(cbind(h[, 1], h_norm))
return(h_norm)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.