1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
## ----echo=FALSE, results="hide"-----------------------------------------------
knitr::opts_chunk$set(error=FALSE, warning=FALSE, message=FALSE)
library(BiocStyle)
set.seed(10918)
## -----------------------------------------------------------------------------
library(scRNAseq)
sce <- ZeiselBrainData()
sce
## -----------------------------------------------------------------------------
library(scuttle)
is.mito <- grep("mt-", rownames(sce))
per.cell <- perCellQCMetrics(sce, subsets=list(Mito=is.mito))
summary(per.cell$sum)
summary(per.cell$detected)
## -----------------------------------------------------------------------------
summary(per.cell$subsets_Mito_percent)
summary(per.cell$altexps_ERCC_percent)
## -----------------------------------------------------------------------------
colData(sce) <- cbind(colData(sce), per.cell)
## -----------------------------------------------------------------------------
sce2 <- addPerCellQCMetrics(sce, subsets=list(Mito=is.mito))
colnames(colData(sce2))
## -----------------------------------------------------------------------------
low.total <- isOutlier(per.cell$sum, type="lower", log=TRUE)
summary(low.total)
## -----------------------------------------------------------------------------
attr(low.total, "threshold")
## -----------------------------------------------------------------------------
low.total.batched <- isOutlier(per.cell$sum, type="lower", log=TRUE, batch=sce$tissue)
summary(low.total.batched)
## -----------------------------------------------------------------------------
# An example with just mitochondrial filters.
qc.stats <- perCellQCFilters(per.cell, sub.fields="subsets_Mito_percent")
colSums(as.matrix(qc.stats))
# Another example with mitochondrial + spike-in filters.
qc.stats2 <- perCellQCFilters(per.cell,
sub.fields=c("subsets_Mito_percent", "altexps_ERCC_percent"))
colSums(as.matrix(qc.stats2))
## -----------------------------------------------------------------------------
filtered <- quickPerCellQC(sce, subsets=list(Mito=is.mito), sub.fields="subsets_Mito_percent")
filtered
## -----------------------------------------------------------------------------
# Pretending that the first 10 cells are empty wells, for demonstration.
per.feat <- perFeatureQCMetrics(sce, subsets=list(Empty=1:10))
summary(per.feat$mean)
summary(per.feat$detected)
summary(per.feat$subsets_Empty_ratio)
## -----------------------------------------------------------------------------
ave <- calculateAverage(sce)
summary(ave)
## -----------------------------------------------------------------------------
sessionInfo()
|