Back to Blog
Bioinformatics
9 min read

Single-cell RNA-seq Analysis: From Raw Counts to Cell Types

Single-cell RNA-seq analysis resolves gene expression one cell at a time, revealing the cell types and states hidden inside a tissue. This guide explains the scRNA-seq pipeline, from quality control and normalization through clustering and UMAP to cell-type annotation, and how to interpret the result.

Prof. David Okonkwo

June 1, 2026

Have a single-cell dataset and no pipeline to run it through? Get a free quote and a PhD bioinformatician will reply within minutes with scope and timeline.

Key Takeaways

Single-cell RNA-seq analysis measures gene expression cell by cell, exposing cell types and states that bulk RNA-seq averages away.

Quality control at the cell level is unique to scRNA-seq: you must filter empty droplets, doublets, and dying cells before any biology is trustworthy.

Clustering and UMAP are tools for exploration, not proof; the cluster boundaries and the 2D layout depend on parameters you choose, so they must be reported.

Cell-type annotation is the interpretive heart of the analysis and combines marker genes, reference atlases, and biological judgment.

Typical targets are several thousand cells and roughly 20,000 to 50,000 reads per cell, but the right depth depends on whether you care about cell types or subtle within-type differences.

Single-cell cleanup has three artifacts absent from bulk work: separate empty droplets with EmptyDrops, remove cell-free ambient RNA with SoupX or DecontX, and flag two-cell doublets with Scrublet or DoubletFinder before claiming any intermediate state

Choose normalization deliberately: log-normalization scales by total counts then log-transforms, while SCTransform returns Pearson residuals that remove the depth-variance coupling and tend to sharpen rare populations

Integrate donors and batches with Harmony, Seurat anchors, or scVI so clusters do not form by sample, but check that a real biological contrast survives, since over-correction erases the effect you came to measure

Compare conditions with pseudobulk, summing counts per sample and cell type and testing across biological replicates; a per-cell test treats cells as replicates, which is pseudoreplication, and proportion shifts need compositional methods such as scCODA or Milo

Single-cell RNA-seq analysis resolves gene expression one cell at a time, revealing the cell types and states that bulk sequencing averages away. Where a bulk experiment reports the mean expression across an entire tissue, scRNA-seq analysis asks which cells are present, how they differ, and which specific populations respond to a treatment or disease. This guide walks the single-cell pipeline, from per-cell quality control through clustering and UMAP to cell-type annotation, and explains how to read the result.

If you have a count matrix from a droplet platform and need it turned into an annotated map of cell types, or a reviewer has asked you to resolve a bulk signal to its cellular source, this guide shows what a complete single-cell data analysis involves and where its unique pitfalls lie.

Diagram of the single-cell RNA-seq workflow, from per-cell quality control to cell-type annotation

What Single-cell Resolution Buys You

Bulk RNA-seq measures the average expression of all the cells in a sample. That average is exactly what you want for many designs, but it is blind to composition: a treatment that doubles one rare cell type and halves another can look like no change at all in bulk. Single-cell RNA-seq removes that blind spot by profiling each cell separately, so you can see which populations exist, which are rare, how they relate along a differentiation trajectory, and which of them actually change.

That resolution comes at a cost. The data are sparse, because only a fraction of each cell's messenger RNA is captured, so the matrix is full of zeros. Dissociating tissue into single cells can stress or lose fragile populations. And the analysis carries technical confounders, doublets and ambient RNA, that have no equivalent in bulk work. A good scRNA-seq analysis spends much of its effort controlling those artifacts before any biology is claimed.

The scRNA-seq Analysis Pipeline

Most single-cell projects run through the same backbone in Seurat (R) or Scanpy (Python). The stages below are near-universal; the parameters at each are where judgment enters.

StagePurposeTools
Per-cell QCRemove empty droplets, dying cellsSeurat, Scanpy
Doublet removalDiscard two-cell dropletsScrublet, DoubletFinder
NormalizationCorrect for sequencing depthSCTransform, log-normalization
Feature selectionFind informative genesHighly variable genes
Dimensionality reductionCompress to principal componentsPCA
ClusteringGroup similar cellsLeiden, Louvain
VisualizationProject to two dimensionsUMAP
AnnotationName each clusterMarker genes, reference atlases
  1. Per-cell quality control. Compute genes per cell, total counts per cell, and mitochondrial fraction, then filter on your own distributions rather than copied tutorial thresholds. High mitochondrial content flags dying cells; very high counts flag likely doublets.
  2. Doublet removal. Detect and discard droplets that captured two cells with Scrublet or DoubletFinder, because undetected doublets masquerade as fake intermediate cell states.
  3. Normalization and feature selection. Correct for differences in sequencing depth between cells and select the highly variable genes that carry the biological signal.
  4. Dimensionality reduction and clustering. Reduce to principal components, build a neighbor graph, and cluster with the Leiden or Louvain algorithm.
  5. Visualization. Project the cells to two dimensions with UMAP. Treat this layout as an exploration aid; distances on a UMAP are not quantitatively meaningful.
  6. Annotation. Assign each cluster to a cell type using canonical marker genes and, where available, a published reference atlas.

Need professional help with your research?

Our PhD methodologists deliver complete systematic reviews and meta-analyses, from protocol to manuscript.

Clustering and UMAP Are Tools, Not Proof

The most common misreading of a single-cell result is to treat the UMAP and its clusters as ground truth. Both depend on choices: the number of principal components, the neighbor count, the clustering resolution. Turn the resolution up and one cluster splits into three; turn it down and three merge into one. None of these is wrong, but the choice must be reported, and cluster boundaries should be validated against biology rather than accepted because the algorithm drew them.

This is why cell type annotation is the interpretive heart of the analysis. A cluster only becomes a cell type when its marker genes match a known population, ideally cross-checked against a reference atlas. Naming clusters by eye, or trusting an automated label without inspecting the markers, is where single-cell stories most often go wrong.

For the statistical side of comparing cell-type proportions or testing within-type differences between conditions, our statistical analysis support handles the compositional and mixed-model methods that these designs require.

How to Interpret Single-cell Results

Interpretation starts with trusting the cleanup. Before reading any biology, confirm that clusters are not driven by technical signal: a cluster defined by mitochondrial genes is dying cells, not a cell type, and a thin bridge between two clusters is often residual doublets. Once the map is clean and annotated, ask the questions that single-cell resolution is uniquely able to answer. Which cell types shift in proportion between your conditions? Within a given cell type, which genes change? Are there rare populations that bulk work would have missed entirely?

The deliverable of a complete single-cell RNA-seq analysis is an annotated UMAP, per-cluster marker tables, differential expression between conditions or cell types, and the reproducible Seurat or Scanpy code with every parameter pinned.

Normalization, Doublets, and Ambient RNA, in Depth

Single-cell counts are sparse unique-molecular-identifier (UMI) tallies in which most genes read zero in any given cell, so the cleanup stage decides whether the biology that follows is real. Three artifacts have no equivalent in bulk work and must each be handled explicitly. Empty droplets are barcodes that captured ambient fluid but no cell; distinguish them from genuine cells with a statistical test on the barcode-rank curve such as EmptyDrops rather than a single hard count cutoff, which discards small real cells and keeps large empty ones. Ambient RNA is cell-free messenger RNA floating in the suspension that contaminates every droplet with a background expression profile; estimate and subtract it with SoupX, DecontX, or CellBender. Doublets are droplets that captured two cells and masquerade as fake intermediate states; Scrublet and DoubletFinder simulate artificial doublets and flag cells whose neighbourhood looks like the simulation.

Normalization is a real modeling choice, not a default. Classic log-normalization scales each cell by its total counts and applies a log transform, which is simple but leaves a residual relationship between sequencing depth and apparent variance. SCTransform instead fits a regularized negative binomial per gene and returns Pearson residuals, a variance-stabilizing transformation that removes the depth-variance coupling and tends to sharpen rare populations. Whichever you choose, set quality thresholds for mitochondrial fraction, gene count, and UMI count from your own data distributions, because a high mitochondrial percentage marks stressed or dying cells and the right cutoff differs by tissue.

Stuck on doublets, ambient RNA, or annotating your clusters? Our bioinformatics analysis service runs the full scRNA-seq pipeline. Send us your dataset.

Integration and the Statistics of Comparing Populations

When a study spans several donors, runs, or batches, clusters will often form by sample rather than by biology unless you integrate the data. Harmony, Seurat anchor-based integration (CCA or RPCA), and the deep-learning model scVI all align shared cell populations across batches while preserving genuine differences. The danger is over-correction: integrate too aggressively and you erase the very condition effect you came to measure, so always check that a real biological contrast survives integration.

The most consequential and most frequently botched step is testing differences between conditions. Running a per-cell Wilcoxon test across all pooled cells treats thousands of cells from a handful of animals as independent replicates. This is pseudoreplication: it produces vanishingly small p-values that reflect the number of cells, not the number of subjects, and does not replicate. The correct approach is pseudobulk: sum raw counts within each sample and cell type to one profile, then run DESeq2 or edgeR across your true biological replicates exactly as in bulk RNA-seq. Shifts in cell-type proportions between conditions need their own compositional methods, such as scCODA or neighbourhood testing with Milo, because proportions are mathematically constrained to sum to one and are therefore not independent of one another. Cluster resolution, the number of principal components, and the neighbour count all change the cluster count, so report them and validate cluster boundaries against marker biology rather than accepting whatever the algorithm drew.

library(Seurat); library(DESeq2)
# aggregate raw counts to one pseudobulk profile per sample x cell type
pb <- AggregateExpression(seu, group.by = c('sample', 'celltype'),
                          slot = 'counts', return.seurat = FALSE)$RNA
# then build a DESeqDataSet per cell type and test across biological replicates

Where Single-cell Sits in the Wider Workflow

Single-cell RNA-seq is one of several transcriptomic approaches. When cellular resolution is not needed, RNA sequencing analysis on bulk samples is cheaper and simpler. For the pathway and network-level view across the whole transcriptome, transcriptomics analysis covers the broader methods. And for DNA-level questions about variants and genome structure, genome sequencing analysis is the corresponding workflow. All of them run under the reproducible approach described on our bioinformatics analysis support page.

When the annotated result needs to become a journal figure, our publication figure service turns UMAPs, marker dot plots, and proportion bars into final, publication-compliant figures.

Ready to move? Get a free quote with a short description of your platform, cell number, and design, or explore the full list of research services to combine single-cell with statistics, visualization, or manuscript support.

<!-- rg-tool-links -->

Free tools for exploring single-cell data

Explore the structure of your samples by running a PCA on your data, inspect marker genes across clusters with a clustered expression heatmap, and compare clusters by building a volcano plot after adjusting p-values for the false discovery rate. For a complete analysis, see the managed bioinformatics analysis.

Pro Tip

Inspect per-cell QC metrics (genes per cell, counts per cell, mitochondrial fraction) before filtering, and set thresholds from your own distributions rather than copying numbers from a tutorial.

Pro Tip

Always check for and remove doublets with a tool such as Scrublet or DoubletFinder; undetected doublets masquerade as fake intermediate cell states.

Pro Tip

Validate cluster annotations with known marker genes and, where possible, a published reference atlas before naming a cluster as a cell type.

Pro Tip

Use pseudobulk, not per-cell tests, to compare conditions

A per-cell Wilcoxon test treats thousands of cells from a handful of subjects as independent replicates, which is pseudoreplication and produces tiny but meaningless p-values. Sum counts to one pseudobulk profile per sample and cell type, then test across your true biological replicates with DESeq2 or edgeR.

Pro Tip

Set quality thresholds from your own distributions

Copied tutorial cutoffs for mitochondrial fraction, gene count, and UMI count rarely fit a new tissue. Plot the distributions, identify the empty-droplet and dying-cell tails, and detect doublets with Scrublet or DoubletFinder before you accept any thin bridge between clusters as a real cell state.

Frequently Asked Questions

5
You analyze single-cell RNA-seq data by running the cell-by-gene count matrix through a pipeline in Seurat (R) or Scanpy (Python). First apply per-cell quality control to remove empty droplets, doublets, and dying cells, then normalize and select highly variable genes. Reduce dimensionality with PCA, build a neighbor graph, cluster the cells, and project them with UMAP for visualization. Finally annotate each cluster to a cell type using marker genes and reference atlases, and run differential expression between cell types or conditions. Every threshold and parameter is documented so the analysis is reproducible.
Single-cell RNA-seq tells you which cell types and states are present in a tissue and how their gene expression differs, information that bulk RNA-seq cannot provide because it averages all cells together. It reveals rare populations, maps differentiation trajectories, and shows which specific cell types respond to a treatment or disease rather than just reporting an overall tissue-level change. In practice it answers questions such as what cells make up this sample, which of them are altered in the condition, and what genes define each population.
A common target for droplet-based single-cell RNA-seq is roughly 20,000 to 50,000 reads per cell, with several thousand cells per sample, though the right depth depends on the question. Distinguishing major cell types needs less depth per cell; detecting subtle differences within a cell type, lowly expressed genes, or fine trajectory structure needs more. Sequencing more cells at lower depth versus fewer cells at higher depth is a real trade-off that should be decided from the biological aim before the library is sequenced.
Single-cell RNA-seq has several limitations. It is more expensive and technically demanding than bulk RNA-seq, and the data are sparse because only a fraction of each cell's transcripts is captured, producing many zero counts. Dissociating tissue into single cells can introduce stress artifacts and can lose fragile or large cell types. Technical confounders such as doublets and ambient RNA require careful correction, and the analysis is more complex and parameter-dependent. For questions that do not need cellular resolution, bulk RNA-seq is often the better and cheaper choice.
Interpreting single-cell results means moving from clusters on a UMAP to named cell types and a biological conclusion. Confirm that quality control was adequate and that clusters are not driven by technical artifacts such as mitochondrial content or doublets. Annotate each cluster using canonical marker genes and reference atlases, then characterize the differences that matter, for example which cell types shift in proportion between conditions or which genes change within a given cell type. Treat the UMAP layout as a visualization aid rather than a quantitative map of distances.
Share

Found this useful? Share it with your colleagues.

Need professional help with your research?

Our PhD methodologists deliver complete systematic reviews and meta-analyses, from protocol to manuscript.

Explore our Systematic Review Service, handled end-to-end by a PhD methodologist.

Professional Support

Let a PhD Expert Handle Your Research

From protocol to publication-ready manuscript. Our PhD-level methodologists handle systematic reviews, meta-analyses, scoping reviews, and more. Most projects deliver in under 2 weeks.

Our promise: Free rework on search, screening, or synthesis if reviewers push back.

4.9 / 5Quote within a few hoursPRISMA 2020 + Cochrane HandbookPhD methodologistConfidential by default
Chat on WhatsApp now
Prof. David Okonkwo

Written by

Prof. David Okonkwo

Director of Biostatistics
Meta-AnalysisNetwork Meta-AnalysisR / Stata

PhD in Biostatistics, twenty years in applied statistics. Owns pairwise and network meta-analysis output, individual-participant-data work, and the final numeric check before any quantitative deliverable ships.

From raw matrices to an annotated UMAP, we run the whole single-cell pipeline with full methods and code. Get a free quote or browse the full list of research services.

Let a PhD Expert Handle Your Research

From protocol to publication-ready manuscript. Our PhD-level methodologists handle systematic reviews, meta-analyses, scoping reviews, and more. Most projects deliver in under 2 weeks.

Quote within a few hours. Pay only after you approve your quote. Unlimited revisions within your agreed scope. Confidential by default.