Question 11 of 20 Intermediate Practical
How would you run a pseudobulk differential expression analysis between conditions in single-cell data?
Short answer
Sum raw counts across all cells of one cell type within each biological sample, giving one profile per sample and cell type. Then test conditions within each cell type with a bulk method such as edgeR, DESeq2 or limma, using the samples as replicates.
Why
Cells from one donor share that donor's genetics, handling and environment, so they are not independent replicates. Squair and colleagues compared fourteen methods on datasets with matched ground truth. All six top performers aggregated cells within a biological replicate before testing, and methods that compared individual cells found hundreds of differentially expressed genes between randomly split control replicates, where nothing should differ.
The Bioconductor multi-sample book builds pseudobulk profiles by summing counts for each combination of label and sample, then runs edgeR. Each sample then appears once per condition, and the variance between samples is estimated properly. A cell-level test treats every cell as a replicate and makes p-values far too small.
The Heumos best-practice review agrees and recommends sum aggregation, with mixed models as the main alternative. Pseudobulk keeps the cell-type resolution, because labels come from the single-cell analysis, while borrowing the mature statistics of bulk RNA-seq. It does need enough samples: three donors per arm gives three replicates, however many cells were captured.
How to work it through
- Annotate cell types first, using the same labels across all samples.
- Sum the raw UMI counts for each cell type within each sample.
- Drop pseudobulk profiles built from very few cells, for example fewer than 10, as the Bioconductor book does.
- Run a PCA on the pseudobulk profiles to check for outliers and batch structure.
- Fit a bulk model per cell type with a design that includes known blocking factors, such as donor or processing batch.
- Report results per cell type with the number of samples and cells behind each.
An example
A study has four control and four treated mice, with 3,000 to 5,000 cells each. After annotation, the B cell label is summed per mouse, giving eight B cell profiles built from 150 to 400 cells each. edgeR finds 120 genes at FDR 0.05. A Wilcoxon test on the 2,200 individual B cells had reported 1,900 genes, most of them highly expressed genes that vary between mice.
The pseudobulk list is the one that would replicate.
Where the answer stops holding
Pseudobulk needs biological replicates and has little power with two or three per group. Rare cell types give unstable profiles in some samples. If labels were defined by clustering on the same genes, a difference in label membership can masquerade as differential expression.
It also cannot detect a shift in a sub-state within a cell type unless that sub-state is labeled.
A strong answer covers
- Aggregate raw counts per cell type per sample
- Samples, not cells, are the replicates
- Use a bulk count model with blocking factors in the design
- Filter profiles built from very few cells
- Cell-level tests inflate false discoveries
Common mistakes
- Averaging log-normalized values instead of summing raw counts
- Running a Wilcoxon test across all cells and reporting its p-values
- Pooling cells from several donors into one pseudobulk profile
The interviewer might ask next
How would you handle a cell type that is present in only some of the samples?