simulate_bulk | R Documentation |
This function allows you to create a full pseudo-bulk RNAseq dataset. You need to provide a SummarizedExperiment from which the cells
will be sampled for the simulation. Also a scenario
has to be selected, where you can choose how the cells will be sampled and a
scaling_factor
on how the read counts will be transformed proir to the simulation.
simulate_bulk(
data,
scenario = c("even", "random", "mirror_db", "weighted", "pure", "custom"),
scaling_factor = c("NONE", "census", "spike_in", "custom", "read_number",
"expressed_genes", "annotation_column", "epic", "abis", "quantiseq"),
scaling_factor_single_cell = TRUE,
weighted_cell_type = NULL,
weighted_amount = NULL,
pure_cell_type = NULL,
custom_scenario_data = NULL,
custom_scaling_vector = NULL,
balance_even_mirror_scenario = 0.01,
remove_bias_in_counts = FALSE,
remove_bias_in_counts_method = "read-number",
norm_counts = FALSE,
nsamples = 100,
ncells = 1000,
total_read_counts = NULL,
whitelist = NULL,
blacklist = NULL,
seed = NA,
BPPARAM = BiocParallel::bpparam(),
run_parallel = FALSE
)
data |
(mandatory) SummarizedExperiment object |
scenario |
(mandatory) select on of the pre-defined cell-type fraction scenarios; possible are: |
scaling_factor |
(mandatory) name of scaling factor; possible are: |
scaling_factor_single_cell |
boolean: decide if a scaling value for each single cell is calculated (default) or the median of all scaling values for each cell type is calculated |
weighted_cell_type |
name of cell-type used for |
weighted_amount |
fraction of cell-type used for |
pure_cell_type |
name of cell-type for |
custom_scenario_data |
dataframe; needs to be of size |
custom_scaling_vector |
named vector with custom scaling values for cell-types. Cell-types that do not occur in this vector but are present in the dataset will be set to 1; mandatory for |
balance_even_mirror_scenario |
balancing value for the |
remove_bias_in_counts |
boolean; if TRUE the internal mRNA bias that is present in count data will be removed using the number of reads mapped to each cell. Default to FALSE |
remove_bias_in_counts_method |
'read-number' (default) or 'gene-number'; method with which the mRNA bias in counts will be removed |
norm_counts |
boolean; if TRUE the samples simulated with counts will be normalized to CPMs, default is FALSE |
nsamples |
numeric; number of samples in pseudo-bulk RNAseq dataset (default = 100) |
ncells |
numeric; number of cells in each dataset (default = 1000) |
total_read_counts |
numeric; sets the total read count value for each sample |
whitelist |
list; give a list of cell-types you want to keep for the simulation; if NULL, all are used |
blacklist |
list; give a list of cell-types you want to remove for the simulation; if NULL, all are used; is applied after whitelist |
seed |
numeric; specifiy a seed for RNG. This effects cell sampling; with a fixed seed you will always sample the same cells for each sample (seed value is incrased by 1 for each sample). Default = NA (two simulation runs will sample different cells). |
BPPARAM |
BiocParallel::bpparam() by default; if specific number of threads x want to be used, insert: BiocParallel::MulticoreParam(workers = x) |
run_parallel |
boolean, decide if multi-threaded calculation will be run. FALSE by default |
named list; bulk
a SummarizedExperiment object, where the assays store the simulated bulk RNAseq datasets. Can hold either one or two assays, depending on how many matrices were present in the dataset
cell-fractions
is a dataframe with the simulated cell-fractions per sample;
scaling_vector
scaling value for each cell in dataset
# generate sample single-cell data to work with:
counts <- Matrix::Matrix(matrix(stats::rpois(3e5, 5), ncol = 300), sparse = TRUE)
tpm <- Matrix::Matrix(matrix(stats::rpois(3e5, 5), ncol = 300), sparse = TRUE)
tpm <- Matrix::t(1e6 * Matrix::t(tpm) / Matrix::colSums(tpm))
colnames(counts) <- paste0("cell_", rep(1:300))
colnames(tpm) <- paste0("cell_", rep(1:300))
rownames(counts) <- paste0("gene_", rep(1:1000))
rownames(tpm) <- paste0("gene_", rep(1:1000))
annotation <- data.frame(
"ID" = paste0("cell_", rep(1:300)),
"cell_type" = c(
rep("T cells CD4", 50),
rep("T cells CD8", 50),
rep("Macrophages", 100),
rep("NK cells", 10),
rep("B cells", 70),
rep("Monocytes", 20)
)
)
dataset <- SimBu::dataset(
annotation = annotation,
count_matrix = counts,
tpm_matrix = tpm,
name = "test_dataset"
)
# this creates a basic pseudo-bulk dataset with uniform cell-type distribution
# and no additional transformation of the data with 10 samples and 2000 cells each
s <- SimBu::simulate_bulk(dataset,
scenario = "even",
scaling_factor = "NONE",
nsamples = 10,
ncells = 100
)
# use a blacklist to exclude certain cell-types for the simulation
s <- SimBu::simulate_bulk(dataset,
scenario = "even",
scaling_factor = "NONE",
nsamples = 10,
ncells = 2000,
blacklist = c("Monocytes", "Macrophages")
)
# use the pure scenario to only have B cells
s <- SimBu::simulate_bulk(dataset,
scenario = "pure",
scaling_factor = "NONE",
nsamples = 10,
ncells = 100,
pure_cell_type = "B cells"
)
# simulate a dataset with custom cell-type fraction for each of the 3 samples
fractions <- data.frame(
"B cells" = c(0.2, 0.4, 0.2),
"T cells CD4" = c(0.4, 0.2, 0.1),
"Macrophages" = c(0.4, 0.4, 0.7), check.names = FALSE
)
s <- SimBu::simulate_bulk(dataset,
scenario = "custom",
scaling_factor = "NONE",
nsamples = 3,
ncells = 2000,
custom_scenario_data = fractions
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.