| Title: | DNA Copy Number Analysis for Genome-Wide Tapestri Panels |
| Version: | 1.0.1 |
| Description: | Analysis of DNA copy number in single cells using custom genome-wide targeted DNA sequencing panels for the Mission Bio Tapestri platform. Users can easily parse, manipulate, and visualize datasets produced from the automated 'Tapestri Pipeline', with support for normalization, clustering, and copy number calling. Functions are also available to deconvolute multiplexed samples by genotype and parsing barcoded reads from exogenous lentiviral constructs. |
| License: | MIT + file LICENSE |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.2.3 |
| URL: | https://github.com/joeymays/karyotapR, http://joeymays.xyz/karyotapR/ |
| BugReports: | https://github.com/joeymays/karyotapR/issues |
| Imports: | circlize, cli, ComplexHeatmap, dbscan, dplyr, fitdistrplus, GenomicRanges, ggplot2, gtools, IRanges, magrittr, methods, purrr, rhdf5, rlang, S4Vectors, stats, SummarizedExperiment, tibble, tidyr, umap, viridisLite |
| Depends: | R (≥ 3.6), SingleCellExperiment |
| Suggests: | Biostrings, knitr, rmarkdown, Rsamtools, testthat (≥ 3.0.0) |
| Config/testthat/edition: | 3 |
| NeedsCompilation: | no |
| Packaged: | 2023-09-07 00:46:54 UTC; jcm844 |
| Author: | Joseph Mays |
| Maintainer: | Joseph Mays <josephcmays@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2023-09-07 08:50:05 UTC |
karyotapR: DNA Copy Number Analysis for Genome-Wide Tapestri Panels
Description
Analysis of DNA copy number in single cells using custom genome-wide targeted DNA sequencing panels for the Mission Bio Tapestri platform. Users can easily parse, manipulate, and visualize datasets produced from the automated 'Tapestri Pipeline', with support for normalization, clustering, and copy number calling. Functions are also available to deconvolute multiplexed samples by genotype and parsing barcoded reads from exogenous lentiviral constructs.
Author(s)
Maintainer: Joseph Mays josephcmays@gmail.com (ORCID) [copyright holder]
See Also
Useful links:
Report bugs at https://github.com/joeymays/karyotapR/issues
Getter and Setter functions for TapestriExperiment slots
Description
Get and set custom slots in TapestriExperiment. Slots include
barcodeProbe for a sample barcode probe ID
and grnaProbe for a gRNA-associated probe ID. These are used as shortcuts for
moveNonGenomeProbes() and countBarcodedReads().
gmmParams holds parameters and metadata for GMM copy number calling models.
Usage
barcodeProbe(x)
## S4 method for signature 'TapestriExperiment'
barcodeProbe(x)
barcodeProbe(x) <- value
## S4 replacement method for signature 'TapestriExperiment'
barcodeProbe(x) <- value
grnaProbe(x)
## S4 method for signature 'TapestriExperiment'
grnaProbe(x)
grnaProbe(x) <- value
## S4 replacement method for signature 'TapestriExperiment'
grnaProbe(x) <- value
gmmParams(x)
## S4 method for signature 'TapestriExperiment'
gmmParams(x)
Arguments
x |
A |
value |
Character, probe ID to assign to slot |
TapestriExperiment |
A |
Value
For the getter methods barcodeProbe, grnaProbe, and gmmParams, the value
of the given slot is returned. For the setter methods barcodeProbe and grnaProbe,
a TapestriExperiment object is returned with modifications made to the given slot.
Functions
-
barcodeProbe(TapestriExperiment): barcodeProbe getter -
barcodeProbe(TapestriExperiment) <- value: barcodeProbe setter -
grnaProbe(TapestriExperiment): grnaProbe getter -
grnaProbe(TapestriExperiment) <- value: grnaProbe setter -
gmmParams(TapestriExperiment): gmmParams getter
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
barcodeProbe(tap.object) <- "Probe01"
barcodeProbe(tap.object)
grnaProbe(tap.object) <- "Probe02"
grnaProbe(tap.object)
gmmParams(tap.object)
Plot of PCA proportion of variance explained
Description
Draws "knee plot" of PCA proportion of variance explained to determine which principal components (PCs) to include for downstream applications e.g. clustering. Variance explained for each PC is indicated by the line. Cumulative variance explained is indicated by the bars.
Usage
PCAKneePlot(TapestriExperiment, alt.exp = "alleleFrequency", n.pcs = 10)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
n.pcs |
Numeric, number of PCs to plot, starting at 1. Default 10. |
Value
ggplot2 object, combined line plot and bar graph
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- runPCA(tap.object, alt.exp = "alleleFrequency")
PCAKneePlot(tap.object, n.pcs = 5)
TapestriExperiment Class Definition
Description
TapestriExperiment Class Definition
Usage
## S4 method for signature 'TapestriExperiment'
show(object)
Arguments
object |
An R object |
TapestriExperiment |
A |
Value
TapestriExperiment object
Methods (by generic)
-
show(TapestriExperiment): Show method forTapestriExperiment
Slots
barcodeProbecharacter.
grnaProbecharacter.
gmmParamslist.
Examples
tapExpObject <- new("TapestriExperiment")
Generate a box plot from assay data
Description
Draws box plot of data from indicated TapestriExperiment assay slot.
This is especially useful for visualizing altExp count data, such as counts from
probes on chrY or barcode probe counts.
Usage
assayBoxPlot(
TapestriExperiment,
alt.exp = NULL,
assay = NULL,
log.y = TRUE,
split.features = FALSE,
split.x.by = NULL,
split.y.by = NULL
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
assay |
Character, assay to plot. |
log.y |
Logical, if |
split.features |
Logical, if |
split.x.by |
Character, |
split.y.by |
Character, |
Value
ggplot object, box plot
See Also
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
assayBoxPlot(tap.object, alt.exp = "chrYCounts", split.features = TRUE, split.x.by = "test.cluster")
Generate heatmap of assay data
Description
Creates a heatmap of data from the indicated TapestriObject assay slot using the ComplexHeatmap package.
Heatmaps are generated as transposed (i.e. x-y flipped) representations of the assay matrix.
Additional ComplexHeatmap::Heatmap() parameters can be passed in to overwrite defaults.
Usage
assayHeatmap(
TapestriExperiment,
alt.exp = NULL,
assay = NULL,
split.col.by = NULL,
split.row.by = NULL,
annotate.row.by = NULL,
color.preset = NULL,
color.custom = NULL,
...
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
assay |
Character, |
split.col.by |
Character, |
split.row.by |
Character, |
annotate.row.by |
Character, |
color.preset |
Character, color preset to use for heatmap color, either "copy.number" or "copy.number.denoise" (see |
color.custom |
Color mapping function given by |
... |
Additional parameters to pass to |
Value
A ComplexHeatmap object
Options for color.preset
"copy.number"
Blue-white-red gradient from 0-2-4. 4 to 8+ is red-black gradient.
circlize::colorRamp2(c(0,1,2,3,4,8),
c('#2c7bb6','#abd9e9','#ffffff','#fdae61','#d7191c', "black"))
"copy.number.denoise"
Similar to 'copy.number' present, but white range is from 1.5-2.5 to reduce the appearance of noise around diploid cells.
circlize::colorRamp2(c(0,1,1.5,2,2.5,3,4,8),
c('#2c7bb6','#abd9e9','#ffffff','#ffffff','#ffffff','#fdae61','#d7191c', "black"))
See Also
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
assayHeatmap(tap.object,
assay = "counts", split.row.by = "test.cluster",
annotate.row.by = "test.cluster", split.col.by = "chr"
)
Calculate relative copy number value for each cell-probe unit using reference sample
Description
calcCopyNumber() transforms the normalized count matrix normcounts of a TapestriExperiment object
into copy number values based on a set of reference cell barcodes and given copy number value (e.g. 2 for diploid).
This is practically used to set the median copy number of a usually diploid reference
cell population to a known copy number value, e.g. 2, and then calculate the copy number for all the
cells relative to that reference population. This occurs individually for each probe,
such that the result is one copy number value per cell barcode per probe (cell-probe unit).
control.copy.number is a data.frame lookup table used to indicate the copy number value and cell barcodes
to use as the reference. A template for control.copy.number can be generated using generateControlCopyNumberTemplate(),
which will have a row for each chromosome arm represented in TapestriExperiment.
The control.copy.number data.frame should include 3 columns named arm, copy.number, and sample.label.
arm is chromosome arm names from chr1p through chrXq, copy.number is the reference copy number value (2 = diploid), and sample.label is the
value corresponding to the colData column given in sample.feature to indicate the set of reference cell barcodes to use to set the copy number.
This is best used in a workflow where the cells are clustered first into their respective samples, and then one cluster is used as the reference population
the other clusters. This also allows for the baseline copy number to be set for each chromosome arm individually in the case where the
reference population is not completely diploid.
Usage
calcCopyNumber(
TapestriExperiment,
control.copy.number,
sample.feature = "cluster",
remove.bad.probes = FALSE
)
generateControlCopyNumberTemplate(
TapestriExperiment,
copy.number = 2,
sample.feature.label = NA
)
Arguments
TapestriExperiment |
|
control.copy.number |
|
sample.feature |
Character, |
remove.bad.probes |
Logical, if |
copy.number |
Numeric, sets all entries of |
sample.feature.label |
Character, sets all entries of |
Value
TapestriExperiment object with cell-probe copy number values in copyNumber assay slot.
data.frame with 3 columns named arm, copy.number, and sample.label
Functions
-
generateControlCopyNumberTemplate(): generates adata.frametemplate forcontrol.copy.numberincalcCopyNumber().
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
tap.object <- calcCopyNumber(tap.object,
control.copy.number,
sample.feature = "test.cluster"
)
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
Call copy number for each cell-chromosome using Gaussian mixture models
Description
Uses control cells to simulate expected smoothed copy number distributions for all chromosomes across each of model.components (copy number level).
Then uses the distributions to calculate posterior probabilities for each cell-chromosome belonging to each of copy number level.
Each cell-chromosome is assigned the copy number value for which its posterior probability is highest.
This is done for both whole chromosomes and chromosome arms.
Usage
calcGMMCopyNumber(
TapestriExperiment,
cell.barcodes,
control.copy.number,
model.components = 1:5,
model.priors = NULL,
...
)
Arguments
TapestriExperiment |
|
cell.barcodes |
character, vector of cell barcodes to fit GMM. Usually corresponds to diploid control. |
control.copy.number |
|
model.components |
numeric, vector of copy number GMM components to calculate, default |
model.priors |
numeric, relative prior probabilities for each GMM component. If |
... |
Additional parameters to be passed to internal functions. |
Value
TapestriExperiment object with copy number calls based on the calculated GMMs, saved to gmmCopyNumber slot of smoothedCopyNumberByChr and smoothedCopyNumberByArm altExps.
GMM parameters for each feature.id are saved to the metadata slot.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
tap.object <- calcCopyNumber(tap.object,
control.copy.number,
sample.feature = "test.cluster"
)
tap.object <- calcSmoothCopyNumber(tap.object)
tap.object <- calcGMMCopyNumber(tap.object,
cell.barcodes = colnames(tap.object),
control.copy.number = control.copy.number,
model.components = 1:5
)
Normalize raw counts
Description
Normalizes raw counts from counts slot in TapestriExperiment and returns the object with normalized counts in the normcounts slot.
Also calculates the standard deviation for each probe using normalized counts and adds it to rowData.
Usage
calcNormCounts(TapestriExperiment, method = "mb", scaling.factor = NULL)
Arguments
TapestriExperiment |
|
method |
Character, normalization method. Default "mb". |
scaling.factor |
Numeric, optional number to scale normalized counts if |
Details
"mb" method performs the same normalization scheme as in Mission Bio's mosaic package for python:
Counts for each barcode are normalized relative to their barcode's mean and probe counts are normalized relative to their probe's median.
"libNorm" method preforms library size normalization, returning the proportion of counts of each probe within a cell.
The proportion is multiplied by scaling.factor if provided.
Value
TapestriExperiment object with normalized counts added to normcounts slot.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
Smooth copy number values across chromosomes and chromosome arms
Description
calcSmoothCopyNumber() takes copyNumber slot values for probes on a chromosome and smooths them by median (default) for each chromosome
and chromosome arm, resulting in one copy number value per chromosome and chromosome arm for each cell barcode.
Cell-chromosome values are then discretized into integers by conventional rounding (1.5 <= x < 2.5 rounds to 2).
Smoothed copy number and discretized smoothed copy number values are stored as smoothedCopyNumber and discreteCopyNumber assays,
in altExp slots smoothedCopyNumberByChr for chromosome-level smoothing, and smoothedCopyNumberByArm for chromosome arm-level smoothing.
Usage
calcSmoothCopyNumber(TapestriExperiment, method = "median")
Arguments
TapestriExperiment |
|
method |
Character, smoothing method: median (default) or mean. |
Value
TapestriExperiment with smoothedCopyNumber and discreteCopyNumber assays in altExp slots smoothedCopyNumberByChr and smoothedCopyNumberByArm.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
tap.object <- calcCopyNumber(tap.object,
control.copy.number,
sample.feature = "test.cluster"
)
tap.object <- calcSmoothCopyNumber(tap.object)
Call sample labels based on feature counts
Description
callSampleLables() assigns labels (stored as colData column) to cells using feature count data in colData.
This is most useful for assigning barcode labels based on barcoded reads (see countBarcodedReads).
For method = max, labels are dictated by whichever input.features column has the highest number of counts.
By default, ties are broken by choosing whichever label has the lowest index position (ties.method = "first").
Samples with 0 counts for all input.features columns are labeled according to neg.label.
If only one feature column is used, labels are assigned to cells with counts > min.count.threshold, and neg.label otherwise.
Usage
callSampleLables(
TapestriExperiment,
input.features,
output.feature = "sample.call",
return.table = FALSE,
neg.label = NA,
method = "max",
ties.method = "first",
min.count.threshold = 1
)
Arguments
TapestriExperiment |
A |
input.features |
Character vector, column names in |
output.feature |
Character, column name to use for the call output. Default "sample.call". |
return.table |
Logical, if |
neg.label |
Character, label for samples with no counts. Default |
method |
Character, call method. Only "max" currently supported, calls based on whichever |
ties.method |
Character, passed to |
min.count.threshold |
Numeric, minimum number of counts per cell to use for call. Default 1. |
Value
A TapestriExperiment object with sample calls added to colData column sample.name. If return.table == TRUE, a data.frame of sample calls.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
colData(tap.object)$gRNA1 <- 2 # example barcode counts
colData(tap.object)$gRNA2 <- 10 # example barcode counts
tap.object <- callSampleLables(tap.object,
input.features = c("gRNA1", "gRNA2"),
output.feature = "sample.grna"
)
Print the top-left corner of a matrix
Description
Outputs up to 5 rows and columns of the input matrix object (with rownames and colnames) to get a quick look without filling the console.
Usage
corner(input.mat)
Arguments
input.mat |
A matrix-like object. |
Value
A matrix-like object matching input class, subset to a maximum of 5 rows and columns.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
corner(assay(tap.object, "counts"))
Get read counts from barcoded reads
Description
countBarcodedReads() and countBarcodedReadsFromContig() match exogenous DNA barcode sequences to their associated
cell barcodes and saves them to the colData (cell barcode metadata) of TapestriExperiment.
countBarcodedReads() is a shortcut for countBarcodedReadsFromContig(), allowing the user to specify 'gRNA' or 'barcode'
to use the grnaCounts or barcodeCounts altExp slots.
The entries in the barcode.lookup table do not have to be present in the sample,
allowing users to keep one master table/file of available barcode sequences for use in all experiments.
The Rsamtools and Biostrings packages must be installed to use these functions.
Usage
countBarcodedReads(
TapestriExperiment,
bam.file,
barcode.lookup,
probe,
return.table = FALSE,
max.mismatch = 2,
with.indels = FALSE,
...
)
countBarcodedReadsFromContig(
bam.file,
barcode.lookup,
contig,
cell.barcode.tag = "RG",
max.mismatch = 2,
with.indels = FALSE
)
Arguments
TapestriExperiment |
|
bam.file |
File path of BAM file. |
barcode.lookup |
|
probe |
Character, either "gRNA" or "barcode" to parse counts from |
return.table |
Logical, if |
max.mismatch |
Numeric, the maximum and minimum number of mismatching letters allowed. Default 2. |
with.indels |
If |
... |
Arguments to pass on to |
contig |
Character, contig or chromosome name to search for barcodes in. Can be a vector of more than one contig to expand search space. |
cell.barcode.tag |
Character of length 2, indicates cell barcode field in BAM, specified by Tapestri pipeline (currently "RG"). Default "RG". |
Value
TapestriExperiment with barcoded read counts added to colData.
A data.frame of read counts for each specified barcode.
See Also
Examples
## Not run:
counts <- countBarcodedReads(
TapestriExperiment,
bam.file, barcode.lookup, "gRNA"
)
## End(Not run)
## Not run:
counts <- countBarcodedReadsFromContig(bam.file, barcode.lookup, "virus_ref2")
## End(Not run)
Create TapestriExperiment object from Tapestri Pipeline output
Description
createTapestriExperiment() constructs a TapestriExperiment container object from data stored in the .h5 file output by the Tapestri Pipeline.
Read count matrix (probe x cell barcode) is stored in the "counts" assay slot of the top-level experiment.
Allele frequency matrix (variant x cell barcode) is stored in the "alleleFrequency" assay slot of the "alleleFrequency" altExp (alternative experiment) slot.
panel.id is an optional shortcut to set special probe identities for specific custom panels.
Usage
createTapestriExperiment(
h5.filename,
panel.id = NULL,
get.cytobands = TRUE,
genome = "hg19",
move.non.genome.probes = TRUE,
filter.variants = TRUE,
verbose = TRUE
)
Arguments
h5.filename |
File path for |
panel.id |
Character, Tapestri panel ID, either CO261, CO293, CO610, or |
get.cytobands |
Logical, if |
genome |
Character, reference genome for pulling cytoband coordinates and chromosome arm labels (see |
move.non.genome.probes |
Logical, if |
filter.variants |
Logical, if |
verbose |
Logical, if |
Value
TapestriExperiment object containing data from Tapestri Pipeline output.
Panel ID Shortcuts
panel.id is an optional shortcut to set the barcodeProbe and grnaProbe slots in TapestriExperiment for specific custom Tapestri panels.
CO261
-
barcodeProbe= "not specified" -
grnaProbe= "not specified"
CO293
-
barcodeProbe= "AMPL205334" -
grnaProbe= "AMPL205666"
CO610
-
barcodeProbe= "CO610_AMP351" -
grnaProbe= "CO610_AMP350"
Automatic Operations
Raw Data
Read count and allele frequency matrices are imported to their appropriate slots as described above.
filter.variants == TRUE (default) only loads allele frequency variants that have passed internal filters in the Tapestri Pipeline.
This greatly reduces the number of variants from tens of thousands to hundreds of likely more consequential variants,
saving RAM and reducing operation time.
Metadata
Several metadata sets are copied or generated and then stored in the appropriate TapestriExperiment slot during construction.
Probe panel metadata stored in the
.h5file are copied torowData.Basic QC stats (e.g. total number of reads per probe) are added to
rowData.Basic QC stats (e.g. total number of reads per cell barcode) are added to
colData.Experiment-level metadata is stored in
metadata.
Optional Operations
Two additional major operations are called by default during TapestriExperiment construction for convenience.
get.cytobands == TRUE (default) calls getCytobands(), which retrieves the chromosome arm and cytoband for each probe based on stored positional data and saves them in rowData.
Some downstream smoothing and plotting functions may fail if chromosome arms are not present in rowData, so this generally should always be run.
move.non.genome.probes calls moveNonGenomeProbes(), which moves probes corresponding to the specified tags to altExp (alternative experiment) slots in the TapestriExperiment object.
The exception is probes on chromosome Y; CNVs of chrY are more rare, so we move it to an altExp for separate analysis.
Probes corresponding to the barcodeProbe and grnaProbe slots, which are specified by the panel.id shortcut or manually (see Custom Slot Getters and Setters),
are automatically moved to altExp by this operation as well.
If such probes are not present, the function will only generate a warning message, so it is always safe (and recommended) to run by default.
Any remaining probes that are not targeting a human chromosome and are not specified by the shortcut tags are moved to the otherProbeCounts slot.
See Also
moveNonGenomeProbes(), getCytobands(), which are run as part of this function by default.
Examples
## Not run:
tapExperiment <- createTapestriExperiment("myh5file.h5", "CO293")
## End(Not run)
Get chromosome order from a string of chromosome/contig names
Description
getChrOrder() takes a string of chromosome or contig names and returns the indices of the string in typical chromosome order, i.e. 1 through 22, X, Y.
Contig names that do not match 1:22, X, or Y are sorted numerically and alphabetically (with numbers coming first), and added to the end of the order.
The output string can then be used to sort the input string into typical chromosome order.
Usage
getChrOrder(chr.vector)
Arguments
chr.vector |
Character vector of chromosome or contig names. |
Value
A numerical vector of the input vectors indices in chromosome order.
Examples
chr.order <- getChrOrder(c(1, "virus", 5, "X", 22, "plasmid", "Y"))
ordered.vector <- c(1, "virus", 5, "X", 22, "plasmid", "Y")[chr.order]
Add chromosome cytobands and chromosome arms to TapestriExperiment
Description
getCytobands() retrieves the chromosome arm and cytoband for each probe based on stored positional data and saves them in rowData.
This is run automatically as part of createTapestriExperiment().
Note: Some downstream smoothing and plotting functions may fail if chromosome arms are not present in rowData.
Usage
getCytobands(TapestriExperiment, genome = "hg19", verbose = TRUE)
Arguments
TapestriExperiment |
|
genome |
Character, reference genome to use. Only hg19 is currently supported. |
verbose |
Logical, if |
Value
TapestriExperiment object with rowData updated to include chromosome arms and cytobands.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- getCytobands(tap.object, genome = "hg19")
Calculate decision boundaries between components of copy number GMMs
Description
Calculate decision boundaries between components of copy number GMMs
Usage
getGMMBoundaries(TapestriExperiment, chromosome.scope = "chr")
Arguments
TapestriExperiment |
|
chromosome.scope |
"chr" or "arm", for using models for either whole chromosomes or chromosome arms. Default "chr". |
Value
tibble containing boundary values of GMMs for each feature.id.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
tap.object <- calcCopyNumber(tap.object,
control.copy.number,
sample.feature = "test.cluster"
)
tap.object <- calcSmoothCopyNumber(tap.object)
tap.object <- calcGMMCopyNumber(tap.object,
cell.barcodes = colnames(tap.object),
control.copy.number = control.copy.number,
model.components = 1:5
)
boundaries <- getGMMBoundaries(tap.object,
chromosome.scope = "chr"
)
Get tidy-style data from TapestriExperiment objects
Description
getTidyData() pulls data from the indicated assay and/or altExp slot(s), and rearranges it into tidy format.
colData (cell metadata) from the top-level/main experiment is included.
rowData (probe metadata) from the indicated assay and/or altExp slot(s) is included.
Attempts are made to sort by "chr" and "start.pos" columns if they are present to simplify plotting and other downstream operations.
Usage
getTidyData(
TapestriExperiment,
alt.exp = NULL,
assay = NULL,
feature.id.as.factor = TRUE
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
assay |
Character, |
feature.id.as.factor |
Logical, if |
Value
A tibble of tidy data with corresponding metadata from colData and rowData.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tidy.data <- getTidyData(tap.object, alt.exp = "alleleFrequency")
Move non-genome probes counts and metadata to altExp slots
Description
moveNonGenomeProbes() takes the probe IDs corresponding to grnaProbe and barcodeProbe slots of the TapestriExperiment object,
as well as probes on chrY, and moves them to their own altExp slots in the object.
This allows those counts and associated metadata to be manipulated separately without interfering with the probes used for CNV measurements which target the endogenous genome.
SingleCellExperiment::splitAltExps() can be used for manual specification of probes to move to altExp slots if the shortcut slots are not used.
Usage
moveNonGenomeProbes(TapestriExperiment)
Arguments
TapestriExperiment |
|
Details
moveNonGenomeProbes() moves probes corresponding to the specified tags to altExp (alternative experiment) slots in the TapestriExperiment object.
These probes should be those which do not correspond to a chromosome and therefore would not be used to call copy number variants.
The exception is probes on chromosome Y; CNVs of chrY are more rare, so we move it to an altExp for separate analysis.
Probes corresponding to the barcodeProbe and grnaProbe slots, which are specified by the panel.id shortcut or manually (see Custom Slot Getters and Setters),
are automatically moved to altExp by this operation as well.
If such probes are not present, the function will only generate a warning message, so it is always safe (and recommended) to run by default.
Any remaining probes that are not targeting a human chromosome and are not specified by the shortcut tags are moved to the otherProbeCounts slot.
This function is run automatically by default and with default behavior as part of createTapestriExperiment().
Value
TapestriExperiment with altExp slots filled with counts and metadata for non-genomic probes.
See Also
SingleCellExperiment::splitAltExps() for manual specification of probes to move to altExp slots.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment
tap.object <- moveNonGenomeProbes(tap.object)
Create Example TapestriExperiment
Description
Creates a TapestriExperiment object for demonstration purposes,
which includes 240 probes across the genome, and 300 cells of 3 types.
Raw counts are generated randomly.
Type 1 has 75 cells, all XY, all diploid.
Type 2 has 100 cells, all XX, with 3 copies of chr 7, otherwise diploid.
Type 3 has 125 cells, all XY, with 1 copy of chr 1p, otherwise diploid.
Usage
newTapestriExperimentExample()
Value
TapestriExperiment object with demo data.
Examples
tapExperiment <- newTapestriExperimentExample()
Plot copy number GMM components
Description
Plots the probability densities of GMM components for given chromosome or chromosome arm, store in a TapestriExperiment.
calcGMMCopyNumber() must be run first.
Usage
plotCopyNumberGMM(
TapestriExperiment,
feature.id = 1,
chromosome.scope = "chr",
draw.boundaries = FALSE
)
Arguments
TapestriExperiment |
|
feature.id |
chromosome or chromosome arm to plot. |
chromosome.scope |
"chr" or "arm", for plotting models for either whole chromosomes or chromosome arms. |
draw.boundaries |
logical, if |
Value
ggplot object, density plot
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- calcNormCounts(tap.object)
control.copy.number <- generateControlCopyNumberTemplate(tap.object,
copy.number = 2,
sample.feature.label = "cellline1"
)
tap.object <- calcCopyNumber(tap.object,
control.copy.number,
sample.feature = "test.cluster"
)
tap.object <- calcSmoothCopyNumber(tap.object)
tap.object <- calcGMMCopyNumber(tap.object,
cell.barcodes = colnames(tap.object),
control.copy.number = control.copy.number,
model.components = 1:5
)
tap.object <- plotCopyNumberGMM(tap.object,
feature.id = 7,
chromosome.scope = "chr",
draw.boundaries = TRUE
)
Scatter plot for dimensional reduction results
Description
Plots a scatter plot of the indicated dimensional reduction results.
Usage
reducedDimPlot(
TapestriExperiment,
alt.exp = "alleleFrequency",
dim.reduction,
dim.x = 1,
dim.y = 2,
group.label = NULL
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
dim.reduction |
Character, dimension reduction to plot, either "PCA" or "UMAP". |
dim.x |
Numeric, index of dimensional reduction data to plot on X axis. Default 1. |
dim.y |
Numeric, index of dimensional reduction data to plot on Y axis. Default 2. |
group.label |
Character, |
Value
ggplot2 object, scatter plot
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- runPCA(tap.object, alt.exp = "alleleFrequency")
reducedDimPlot(tap.object, dim.reduction = "pca")
Cluster 2D data
Description
Clusters data using dbscan method and saves cluster assignments for each cell barcode to colData.
Generally used to assign clusters to UMAP projection after PCA and UMAP dimensional reduction.
Usage
runClustering(
TapestriExperiment,
alt.exp = "alleleFrequency",
dim.reduction = "UMAP",
eps = 0.8,
dim.1 = 1,
dim.2 = 2,
...
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
dim.reduction |
Character, reduced dimension data to use. Default "UMAP". |
eps |
Numeric, |
dim.1 |
Numeric, index of data dimension to use. Default 1. |
dim.2 |
Numeric, index of data dimension to use. Default 2. |
... |
Additional parameters to pass to |
Value
TapestriExperiment object with updated colData containing cluster assignments.
See Also
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- runPCA(tap.object, alt.exp = "alleleFrequency")
tap.object <- runUMAP(tap.object, pca.dims = 1:3)
tap.object <- runClustering(tap.object, dim.reduction = "UMAP", eps = 0.8)
Cluster assay data by Principal Components Analysis
Description
Analyzes assay data by Principal Components Analysis (PCA) and saves results
to reducedDims slot of TapestriObject.
Usage
runPCA(
TapestriExperiment,
alt.exp = "alleleFrequency",
assay = NULL,
sd.min.threshold = NULL,
center = TRUE,
scale. = TRUE
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
assay |
Character, |
sd.min.threshold |
Numeric, minimum threshold for allelefreq.sd. Increase to run PCA on fewer, more variable dimensions. Set to |
center |
Logical, if |
scale. |
Logical,if |
Value
TapestriExperiment with PCA results saved to reducedDims slot of altExp, and proportion of variance explained by each PC saved to metadata slot of altExp.
See Also
stats::prcomp() for PCA method details.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment
tap.object <- runPCA(tap.object, alt.exp = "alleleFrequency")
Cluster matrix data by UMAP
Description
Analyzes matrix data by UMAP and saves results to reducedDims slot of TapestriObject.
Usage
runUMAP(
TapestriExperiment,
alt.exp = "alleleFrequency",
assay = NULL,
use.pca.dims = TRUE,
pca.dims = NULL,
...
)
Arguments
TapestriExperiment |
|
alt.exp |
Character, |
assay |
Character, |
use.pca.dims |
Logical, if |
pca.dims |
Numeric, indices of PCs to use in UMAP. Default |
... |
Additional parameters to pass to |
Value
TapestriExperiment with UMAP embeddings saved to reducedDims slot of altExp.
Examples
tap.object <- newTapestriExperimentExample() # example TapestriExperiment object
tap.object <- runPCA(tap.object, alt.exp = "alleleFrequency")
tap.object <- runUMAP(tap.object, pca.dims = 1:3)