Error with DropletUtils::EmptyDrops()
1
1
Entering edit mode
shbrief ▴ 20
@shbrief-15679
Last seen 5.4 years ago
USA

Hi! I'm trying to analyze the scRNAseq data from 10X Genomics using simpleSingleCell workflow, and EmptyDrops() was used to work, but it's not working with the newer version of the packages (even if I tried it with the identical dataset). It doesn't seem like there is any major update with the function and also the workflow vignette is same, I'm not sure what the problem is.

Here is the error message I got: Error in testEmptyDrops(m, lower = lower, ...) : no counts available to estimate the ambient profile

sessionInfo() R version 3.6.0 (2019-04-26) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default BLAS/LAPACK: /usr/lib/libopenblasp-r0.2.19.so

locale: [1] LCCTYPE=enUS.UTF-8 LCNUMERIC=C LCTIME=enUS.UTF-8
[4] LC
COLLATE=enUS.UTF-8 LCMONETARY=enUS.UTF-8 LCMESSAGES=C
[7] LCPAPER=enUS.UTF-8 LCNAME=C LCADDRESS=C
[10] LCTELEPHONE=C LCMEASUREMENT=enUS.UTF-8 LCIDENTIFICATION=C

attached base packages: [1] parallel stats4 stats graphics grDevices utils datasets methods base

other attached packages: [1] EnsDb.Hsapiens.v862.99.0 ensembldb2.8.0 AnnotationFilter1.8.0
[4] GenomicFeatures
1.36.4 AnnotationDbi1.46.0 scran1.12.1
[7] scater1.12.2 ggplot23.2.0 DropletUtils1.4.2
[10] SingleCellExperiment
1.6.0 SummarizedExperiment1.14.0 DelayedArray0.10.0
[13] BiocParallel1.18.0 matrixStats0.54.0 Biobase2.44.0
[16] GenomicRanges
1.36.0 GenomeInfoDb1.20.0 IRanges2.18.1
[19] S4Vectors0.22.0 BiocGenerics0.30.0 BiocManager_1.30.4

loaded via a namespace (and not attached): [1] ProtGenerics1.16.0 bitops1.0-6 bit640.9-7 progress1.2.2
[5] httr1.4.0 dynamicTreeCut1.63-1 tools3.6.0 backports1.1.4
[9] R62.4.0 irlba2.3.3 HDF5Array1.12.1 vipor0.4.5
[13] DBI1.0.0 lazyeval0.2.2 colorspace1.4-1 withr2.1.2
[17] tidyselect0.2.5 gridExtra2.3 prettyunits1.0.2 curl4.0
[21] bit1.1-14 compiler3.6.0 BiocNeighbors1.2.0 rtracklayer1.44.2
[25] scales1.0.0 stringr1.4.0 digest0.6.20 Rsamtools2.0.0
[29] R.utils2.9.0 XVector0.24.0 pkgconfig2.0.2 limma3.40.6
[33] rlang0.4.0 rstudioapi0.10 RSQLite2.1.2 DelayedMatrixStats1.6.0 [37] dplyr0.8.3 R.oo1.22.0 RCurl1.95-4.12 magrittr1.5
[41] BiocSingular1.0.0 GenomeInfoDbData1.2.1 Matrix1.2-17 Rcpp1.0.1
[45] ggbeeswarm0.6.0 munsell0.5.0 Rhdf5lib1.6.0 viridis0.5.1
[49] R.methodsS31.7.1 stringi1.4.3 edgeR3.26.6 zlibbioc1.30.0
[53] rhdf52.28.0 grid3.6.0 blob1.2.0 dqrng0.2.1
[57] crayon1.3.4 lattice0.20-38 Biostrings2.52.0 hms0.5.0
[61] locfit1.5-9.1 zeallot0.1.0 knitr1.23 pillar1.4.2
[65] igraph1.2.4.1 biomaRt2.40.3 XML3.98-1.20 glue1.3.1
[69] vctrs0.2.0 gtable0.3.0 purrr0.3.2 assertthat0.2.1
[73] xfun0.8 rsvd1.0.1 viridisLite0.3.0 tibble2.1.3
[77] GenomicAlignments1.20.1 beeswarm0.2.3 memoise1.1.0 statmod1.4.32

DropletUtils EmptyDrops simpleSingleCell • 5.0k views
ADD COMMENT
4
Entering edit mode
Aaron Lun ★ 28k
@alun
Last seen 3 hours ago
The city by the bay

Ah, you've been caught by my attempt to prevent people from using the function the wrong way.

CellRanger produces two sets of count matrices - the raw, unfiltered count matrix, and another matrix where they have already filtered the columns to only retain what they think are the cells. emptyDrops() represents an alternative approach to doing the filtering step, so you need to apply it to the unfiltered count matrix.

It doesn't make any sense to apply emptyDrops() to the filtered count matrix. This is because emptyDrops() uses the low-count columns to estimate the ambient background; but if you give it a filtered matrix, there are no low-count columns left to estimate the background, so you get an all-zero vector for the ambient profile.

Previously, if you did give it a filtered matrix, emptyDrops() would silently run and give... I don't even know what it would return. Well, clearly it didn't segfault and blow up your computer, but the output can't be anything sensible. This new error is my attempt at protecting people from themselves, see also here.

It is worth mentioning that CellRanger v3's cell calling method is based on emptyDrops(), but substantially modified with their own flavor. Presumably they had their reasons for making these modifications, but the takeway is that it will not be the same as running emptyDrops() here.

ADD COMMENT

Login before adding your answer.

Traffic: 525 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6