This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Alternatives to Cellbender / barcode selection tools foor poor quality single NUCLEI samples?

Hi,

I have to analyze 8 single-NUCLEI RNA-seq samples from patient-derived biopsies. 4 patients, each with pre-/post-treatment. The samples are from difficult-to-dissociate tissues stored a long time ago. On the wet lab everything looked fine and it seemed we obtained a decent amount of single nuclei under the microscope. We sequenced them with 10x, targeting 5k cells/sample. We used 2x pools of 4-sample On-Chip Multiplexing.

After sequencing, the results from cellranger multi looked disappointing. 10x support suggested to give a try to Cellbender, to recover more "usable" barcodes/cells by removing ambient RNA, however, the results are still pretty bad:

raw barcodes cellranger-multi cellbender (whatever #cells) cellbender (--expected-cells=5k)
pool1A_p1_t1 240748 530 794 4234
pool1B_p1_t2 224959 898 1406 3176
pool1C_p2_t1 414563 3157 4244 4631
pool1D_p2_t2 556365 5684 41782 40905
pool2A_p3_t1 323891 972 1245 4832
pool2B_p3_t2 800648 9519 43903 42810
pool2C_p4_t1 89333 44656 26286 18037
pool2D_p4_t2 98760 283 920 4675

Something went obviously wrong with these samples. Both samples from patient4 are unusable. And the samples with high number of barcodes (p2_t2 and p3_t2) have suspicious-looking barcode x UMI plots:

pool2A_p3_t1 (decent, 900~1200 cells):

pool2A_p3_t1

pool2B_p3_t2 (unreliable, 9.5k~43k cells):

pool2B_p3_t2

All (non-garbage) samples present this peak, at a different number of UMIs:

UMI counts x number of droplets

And these are the ranked barcode x number of UMIs:

ranked barcodes x number of UMIs

I don't have much experience with Cellbender, but I assume this kind of peak is common, probably caused by ambient RNA, and non-empty cells lie to the left of it. I suspect that most of my samples have large amounts of ambient RNAs from the cytoplasm.

I am already re-running cellbender following the suggestions from the warning messages (halving the Learning Rate does nothing) and from the guidelines (manually selected --expected-cells and --total-droplets-included per sample.

I understand that cellbender is just a first step in QC, and it might be better to be lenient on its barcode selection, to later further filter them downstream with metrics like %mtRNA.

I was wondering what to do with metrics like the fraction of intronic reads. Droplets containing only nuclei should have high % of unspliced transcripts. This, combined with %mtRNA is key to selecting droplets with actual nuclei inside, instead of large amounts of (cytoplasmic) ambient RNA. However, I don't see any option in Cellbender to take these parameters into account, in order to better select empty droplets to create the ambient RNA profile.

Are there alternative tools to Cellbender designed specially for single nuclei sequencing? If not, in which order should I run the different tools? Should I run velocyto on the raw data, or only after filtering? Can I rely on Cellbender's ambient correction? or should I use it first only for non-empty barcode selection, then further filter the data by %mt and %intronic, and finally ambient removal + doublet detection?

Alternatively, is it possible that those "peaks" seen in the UMI counts x number of droplet plots are in fact the properly-isolated nuclei, and droplets to their left are droplets containing a "decent" number of nuclei reads + large number of ambient cytoplasmic reads, or even whole cells?

PS: yes, I am aware that the samples look bad, but I have to make the most out of them.


In reply to @Bastien Hervé's comment, as the forum seems to not like tables in comments.

From the BAM file, how is p4_t1 (90k raw barcodes -> 45k cells) different from p3_t2 (800k raw barcodes -> 9.5k cell)

The sample_alignments.bam (multi's equivalent to count's possorted_genome_bam.bam) have wildly different sizes, matching the differences in number of barcodes.

sample_alignments.bam
pool1A_p1_t1 2.0G
pool1B_p1_t2 1.9G
pool1C_p2_t1 5.0G
pool1D_p2_t2 9.0G
pool2A_p3_t1 3.3G
pool2B_p3_t2 22G
pool2C_p4_t1 227M
pool2D_p4_t2 389M

The huge differences between p3_t2 and both p4_tx samples I assume are driven by those cells being predominant during sequencing. And similarly in pool1 with p2_t2.

I also ran cellranger count on the merged pools and obtained similar sizes for the two possorted_genome_bam.bam (18G for pool1, 27G for pool2).

These are the metrics from multi's report for the pooled samples (pre-demultiplexing) and my run of count. The only differences between methods are derived from calling more/less cells. The mapping metrics are identical.

multi - pool1 count - pool1 multi - pool2 count - pool2
Cell Calling Quality Cells 10,269 15,029 55,430 8,097
Conf. map. reads in cells 43.40% 53.80% 67.10% 64.00%
Median UMI Counts per Cell 2,279 9,070
Median Genes per Cell 1,538 3,591
Total Genes Detected 32,267 32,455
Mapping Quality Conf. map. to transcriptome 67% 67.00% 70.60% 70.60%
Map. to genome 95.80% 95.80% 95.90% 95.90%
Conf. map. to genome 83.80% 83.80% 86% 86.00%
Conf. map. to exonic regions 24.50% 24.50% 26.40% 26.40%
Conf. map. to intronic regions 53% 53.00% 53.30% 53.30%
Conf. map. to intergenic regions 6.20% 6.20% 6.20% 6.20%
Conf. map. antisense 9.60% 9.60% 8.20% 8.20%
Sequencing Quality Number of reads 299,137,975 299,137,975 445,813,475 445,813,475
Mean reads per cell 29,130 19,904 8,043 55,059
Sequencing saturation 53.60% 53.60% 57.20% 57.20%
Valid barcodes 95.30% 95.30% 96.20% 96.20%
Valid UMIs 100% 100.00% 99.90% 99.90%
Q30 barcodes 93.40% 93.40% 93.60% 93.60%
Q30 UMI 91.90% 91.90% 91.80% 91.80%
Q30 RNA read 89% 89.00% 88.90% 88.90%

The gross metrics per OCM of multi. There are huge differences in the number of UMIs per sample.

Metrics per OCM Barcode
pool OCM Barcode ID Sample ID UMIs per OCM barcode Cells per OCM barcode
pool1 OB1 pool1A_p1_t1 7,078,433 (7.9%) 530 (5.2%)
pool1 OB2 pool1B_p1_t2 7,207,461 (8%) 898 (8.7%)
pool1 OB3 pool1C_p2_t1 25,712,718 (28.6%) 3,157 (30.7%)
pool1 OB4 pool1D_p2_t2 49,781,294 (55.4%) 5,684 (55.4%)
pool2 OB1 pool2A_p3_t1 15,318,842 (11.7%) 972 (1.8%)
pool2 OB2 pool2B_p3_t2 113,041,243 (86.5%) 9,519 (17.2%)
pool2 OB3 pool2C_p4_t1 799,817 (0.6%) 44,656 (80.6%)
pool2 OB4 pool2D_p4_t2 1,483,499 (1.1%) 283 (0.5%)

And the detailed metrics per sample from multi, with huge differences in the number of reads per sample:

pool1A_p1_t1 pool1B_p1_t2 pool1C_p2_t1 pool1D_p2_t2 pool2A_p3_t1 pool2B_p3_t2 pool2C_p4_t1 pool2D_p4_t2
Cell Calling Quality Cells 530 898 3,157 5,684 972 9,519 44,656 283
Conf. map. reads in cells 32.10% 31% 45.80% 44.90% 37% 70.70% 96.80% 7.40%
Median genes per cell 1,687 1,228 1,615 1,881 2,032 3,219 16 210
Median UMI counts per cell 2,670 1,796 2,441 2,913 3,439 7,256 16 226
Total genes detected 23,077 22,647 28,003 30,056 25,459 32,398 21,368 13,828
Number of reads from cells called from this sample 5,902,300 6,254,289 38,276,995 69,053,447 14,913,734 261,457,737 3,041,221 308,013
Mapping Quality (Amongst Reads From Cells Assigned To Sample) Conf. map. to transcriptome 68% 68.40% 69.20% 71.80% 73.40% 74.20% 33% 50.60%
Map. to genome 95.10% 95.30% 96.60% 96.70% 96.20% 96.70% 82.30% 93.10%
Conf. map. to genome 82.30% 82.40% 92.50% 92.40% 89.30% 91.80% 41.70% 61.40%
Conf. map. to exonic regions 25.80% 24% 22.20% 22.10% 25% 25.60% 15.70% 18.70%
Conf. map. to intronic regions 49.40% 51.30% 63% 63% 57.50% 59.30% 22% 37%
Conf. map. to intergenic regions 7.10% 7.10% 7.30% 7.40% 6.80% 7% 4% 5.80%
Conf. map. antisense 6.30% 6% 15% 12.10% 8.10% 9.60% 4.30% 4.40%

nuclei single scrnaseq cellbender

I think you are going a bit fast on graphical interpretation of your outputs.

I would check first :

  • What is the number of reads you got from each of your fastq sample ?
  • How many are getting aligned to your reference genome ?
  • How many UMIs you have per gene per cell from the BAM file compared to what cellranger counts matrix is giving you ?
  • From the BAM file, how is p4_t1 (90k raw barcodes -> 45k cells) different from p3_t2 (800k raw barcodes -> 9.5k cell)

Any reason of using cellranger multi over cellranger count ?

I don't know your wet lab protocol but in my knowledge nuclei is less prone to ambient RNA and doublets than cells, due to nuclei isolation.

Thanks for your reply

Any reason of using cellranger multi over cellranger count ?

These are multiplexed samples using 10x Flex. 4 samples were pooled together using unique barcodes for each sample. I double-checked and that seemed to have worked fine. Running cellranger count instead just gives me all 4 samples pooled together.


I don't know your wet lab protocol but in my knowledge nuclei is less prone to ambient RNA and doublets than cells, due to nuclei isolation.

AFAIK, these samples come from metastases. All of the patients have the same cancer type. Some of the samples I think are liver metastases, but others might come from other organs, with different "contexts" affecting tissue dissociation. Including more or less surrounding healthy tissue.


From the BAM file, how is p4_t1 (90k raw barcodes -> 45k cells) different from p3_t2 (800k raw barcodes -> 9.5k cell)

biostars is not letting me paste tables in the comment. I'll try to add them to the post.


All in all, yes several of these samples are messed up, most probably each sample contained wildly different number and quality of nuclei from origin. That caused huge differences in the number of reads per sample.

However, my question still stands. How can I integrate Quality metrics/characteristics intrinsic from single nuclei, into cellbender or other alternatives, so it improves the tool's ability to call reliable non-empty, non-ambient droplets?

Did you load the same number of nuclei for each sample ?

Supposedly, yes. They checked under the microscope and could see single nuclei for each sample before FACS sorting them, which yielded ~10k nuclei/sample. We expected sequencing to get ~5k nuclei/sample.

Something clearly went wrong with the overall protocol across all samples. And something was very wrong with p4's samples. Yet still cellbender has trouble with the best sample in this data (p3_t2) whose UMI per droplet x num droplets plot has a very sharp "cut", which look very different from what I've seen in other data (10x single CELL in this case):

single CELL data

As you have received fastq files of 22Go and 220Mo while loading the same amount of nuclei and multiplexing, something went wrong in the library preparation, the nuclei sanity, the barcoding or the demultiplexing step, nothing to do with ambient RNA.

cellranger multi was run by the core facility that did the sequencing.

By the _cmdline file, they used:

cellranger multi --id=pool1 --csv=[REDACTED]/ibraries_Pool1.csv --localcores=20

I double-checked. The barcodes from each demultiplexed sample are unique within the pool, and match between pool1A-pool2A and such.

I ran cellbender in a per-sample basis, with the demultiplexed data.

I also ran beforehand cellranger count on the entire pools and used a couple of demultiplexing-by-genotyping tools (vireo and souporcell). Both tools found 2 donors in the combined pool1 (patients #1 & #2), but could only find 1 patient (and/or hallucinations) in pool2 because the almost nonexistent number of cells from patient #4.

0 answers

No answers yet.

Log in to answer this question.