Biology for Data Scientists: The Central Dogma, Genes & RNA-seq Counts

Just enough molecular biology to read an omics dataset without fooling yourself — what the rows are, what the numbers mean, and why they behave the way they do

Bioinformatics

A molecular-biology primer for data scientists who know R or Python but have no wet-lab background. Learn the central dogma (DNA → RNA → protein), how a gene differs from a transcript and a protein, what an RNA-seq count actually measures, and the key statistical fact that drives every analysis downstream: why RNA-seq counts are over-dispersed and so need a negative-binomial model rather than a t-test or a Poisson.

Published

June 29, 2026

Modified

July 7, 2026

TipKey takeaways
  • The central dogma is the one-line map of molecular biology: DNA → (transcription) → RNA → (translation) → protein. A gene is the DNA instruction; a transcript is the RNA copy made from it; a protein is what that copy is (often) translated into.
  • RNA-seq measures RNA, not protein. A count for a gene is the number of sequencing reads that mapped to it — an estimate of how much that gene was transcribed in that sample.
  • Counts are relative (compositional), not absolute: a bigger number can mean a deeper-sequenced sample, not a more-active gene. That is why normalization comes before comparison.
  • RNA-seq counts are over-dispersed: their variance exceeds their mean, unlike a Poisson where variance = mean. Biological + technical variability is the extra spread.
  • That single fact is why differential-expression tools model counts with the negative binomial (DESeq2, edgeR), never a t-test or a plain Poisson. Get this and the rest of the pillar follows.

Introduction

You have been handed an RNA-seq count matrix: ~60,000 rows, a handful of columns, every cell a non-negative integer. The rows are genes, the columns are samples, and someone wants to know which genes changed between two conditions. You can wrangle a matrix in your sleep — but to analyze this one without fooling yourself, you need just enough biology to answer three questions: what are the rows, what do the numbers mean, and why do they behave the way they do?

This lesson is the answer, written for a data scientist with no wet-lab background. No pathways to memorize, no chemistry — just the conceptual base the rest of the bioinformatics pillar links back to. After it you will be able to reason about a count matrix: read its rows as genes, treat its values as estimates of transcription rather than exact truths, and understand why RNA-seq analysis reaches for a negative-binomial model instead of the t-test you would use almost anywhere else.

The central dogma in one line

Biology stores its instructions in DNA, copies the relevant ones into RNA, and (for protein-coding genes) translates those copies into proteins that do the work. Two steps connect the three molecules: transcription (DNA → RNA) and translation (RNA → protein).

DNA

the gene · stable instructions stored in the genome

RNA

made by transcription · the working copy (the transcript)

Protein

made by translation · the molecule that does the work

The piece that matters for your matrix is the middle one. RNA-seq does not read DNA (every cell has essentially the same DNA) and it does not measure protein. It measures RNA — the transcripts a cell is actively making — which is the closest readily-measurable proxy for “how busy is this gene right now.”

Gene vs transcript vs protein

These three words are not synonyms, and conflating them causes real mistakes:

  • A gene is a stretch of DNA — a fixed instruction. Humans have roughly 20,000 protein-coding genes.
  • A transcript is an RNA copy of a gene. One gene can produce several transcripts (called isoforms) by splicing its pieces together in different ways — so “one gene” does not mean “one RNA” and certainly not “one protein.”
  • A protein is the folded chain of amino acids translated from a transcript. Different isoforms of the same gene can yield different proteins with different jobs.

A standard “gene-level” count matrix sums all of a gene’s transcripts into one number per gene. That is the level most analyses start at — but remember it is a summary: the gene is one row, even though it may be several distinct molecules underneath.

What “expression” actually measures

“Gene expression” sounds abstract; in an RNA-seq count matrix it is concrete. The instrument breaks the sample’s RNA into millions of short fragments, sequences each into a read (a short string of bases), and software maps each read back to the gene it came from. A gene’s count is simply how many reads landed on it. More reads ≈ more copies of that gene’s RNA in the sample ≈ the gene was transcribed more. So a count is an estimate of transcriptional activity — not a physical concentration, an estimate from a sampling process.

Two consequences follow immediately, and both shape every later step:

  • Counts are integers from a sampling process. They are whole numbers (you can’t map half a read), and like any count they carry sampling noise — measure the same sample twice and the numbers wobble.
  • Counts are relative, not absolute (compositional). Each sample is sequenced to some total depth — its library size, the total number of reads. A gene with 1,000 reads in a 40-million-read sample is less expressed than a gene with 1,000 reads in a 10-million-read sample. You therefore cannot compare raw counts across samples; they must be put on a common scale first. That is what normalization does — covered in the bulk RNA-seq series, not here. For now just hold the idea: a bigger raw number does not automatically mean a more active gene.

Why RNA-seq counts are over-dispersed

Here is the statistical bridge between biology and your analysis — the one fact that explains why RNA-seq has its own toolkit.

If counting reads were only a sampling process, counts would follow a Poisson distribution, whose defining property is that variance equals the mean. But biology adds a second source of spread: even two “identical” replicates differ — different animals, cells, extractions, days. This biological variability stacks on top of the technical sampling noise, so in real data the variance is larger than the mean. Counts are over-dispersed.

We can see it in a few lines of base R — no packages, no real data needed. Draw counts for a gene whose true mean expression is 100, the Poisson way (sampling noise only) and the negative-binomial way (extra biological variability), across 1,000 simulated samples each:

set.seed(123)
poisson <- rpois(1000, lambda = 100)            # counts with sampling noise only
negbin  <- rnbinom(1000, mu = 100, size = 5)    # + biological variability

rbind(
  Poisson  = c(mean = mean(poisson), variance = var(poisson)),
  NegBinom = c(mean = mean(negbin),  variance = var(negbin))
)
            mean   variance
Poisson   99.504   98.13011
NegBinom 100.039 2101.56504

Both have a mean near 100, exactly as designed. But look at the variance: ~98 for the Poisson (it tracks the mean) and ~2,100 for the negative binomial — about 21 times larger. The variance-to-mean ratio makes the contrast a single number:

set.seed(123)
poisson <- rpois(1000, lambda = 100)
negbin  <- rnbinom(1000, mu = 100, size = 5)

# variance / mean: ~1 means Poisson-like; >1 means over-dispersed
c(Poisson = var(poisson) / mean(poisson),
  NegBinom = var(negbin) / mean(negbin))
   Poisson   NegBinom 
 0.9861927 21.0074575 

The Poisson ratio is ≈ 1 (variance = mean, by definition); the negative-binomial ratio is ≈ 21. Real RNA-seq counts look like the second case, not the first. This is the whole reason differential- expression tools — DESeq2 and edgeR — model counts with the negative binomial and estimate a per-gene dispersion, instead of running a t-test (which assumes roughly normal, continuous data) or a plain Poisson (which would badly underestimate the variance and call far too many genes “significant”). When you later see DESeq2 “estimating dispersions,” this is what it is measuring: how much extra spread each gene has beyond Poisson. (A third popular tool, limma-voom, reaches the same goal a different way — it transforms counts to log-CPM with precision weights and fits a linear model.)

The negative binomial is a Gamma–Poisson mixture: counts are Poisson, but the Poisson rate itself varies from sample to sample (drawn from a Gamma distribution) to capture biological variability. That extra layer inflates the variance to

\[\sigma^2 = \mu + \alpha\,\mu^2\]

where \(\mu\) is the mean and \(\alpha\) is the dispersion (\(\alpha = 1/k\), where \(k\) is the size argument to rnbinom). The \(\mu\) term is the Poisson (sampling) part; the \(\alpha\mu^2\) term is the biological excess. With \(\mu = 100\) and \(\alpha = 1/5 = 0.2\) that predicts \(100 + 0.2 \times 100^2 = 2100\) — exactly the variance we simulated above. When \(\alpha \to 0\) the second term vanishes and the negative binomial collapses back to the Poisson.

How this connects to the pillar

Those three ideas are the foundation the analysis series builds on:

  • The count matrix → a container. The integer matrix you were handed, plus its sample table and gene table, lives in a single Bioconductor object — the SummarizedExperiment — so the three pieces can never fall out of sync.
  • The negative binomial → differential expression. The over-dispersion you just simulated is exactly what differential expression with DESeq2 models to decide which genes truly changed between conditions.

Read this primer once and those lessons stop being a wall of new vocabulary — they are just the next concrete steps on the same three ideas.

Common issues

These are conceptual traps, not code errors — and they cause wrong conclusions silently.

“More reads always means higher expression.” No. A raw count depends on the gene’s length, the sample’s library size (sequencing depth), and the overall composition of the sample — not just how active the gene is. Twice the reads can simply mean twice the sequencing. Compare expression only after normalization puts samples on a common scale.

“A gene equals a protein.” No. One gene can produce several transcript isoforms through alternative splicing, and those can become different proteins. A gene-level count matrix collapses all of a gene’s transcripts into one row — convenient, but it is a summary, not a one-to-one map from gene to molecule.

“RNA-seq measures protein levels.” No. It measures RNA (transcripts). RNA is a proxy for activity, but RNA abundance and protein abundance can diverge (proteins are also regulated after translation). If the biological question is about protein, RNA-seq is an indirect — though very common — read-out.

Frequently asked questions

It is the flow of genetic information in a cell: DNA → RNA → protein. DNA is copied into RNA by transcription, and protein-coding RNA is read into protein by translation. DNA is the stored instruction, RNA the working copy, protein the molecule that does the work.

RNA-seq measures RNA, not DNA and not protein. It fragments and sequences the RNA in a sample, then counts how many reads map to each gene. That count is an estimate of how much the gene was transcribed in that sample.

A gene is a fixed stretch of DNA — an instruction. A transcript is an RNA copy made from that gene. One gene can produce several transcripts (isoforms) by splicing its pieces differently, so a single gene is not the same as a single RNA molecule or a single protein.

Because counts carry two kinds of variation, not one. Technical sampling noise alone would make them Poisson (variance = mean), but biological differences between replicates add extra spread, so the variance exceeds the mean. That excess is “over-dispersion.”

A t-test assumes roughly normal, continuous data — counts are small integers and skewed. A Poisson assumes variance = mean and so underestimates the real spread, calling far too many genes significant. The negative binomial adds a dispersion term that captures the biological excess, which is why DESeq2 and edgeR use it.

Test your understanding

Simulate counts for a gene with a true mean of 200 across 500 samples, two ways: a Poisson (rpois) and a negative binomial (rnbinom, mu = 200, size = 4). Compute the variance-to-mean ratio for each. Which one looks like real RNA-seq, and what does that imply about the model you should use?

For Poisson, var(x) / mean(x) should sit near 1. For the negative binomial it will be well above 1 — that excess is over-dispersion. The negative-binomial variance formula is mu + mu^2 / size.

set.seed(1)
pois <- rpois(500, lambda = 200)
nb   <- rnbinom(500, mu = 200, size = 4)

c(Poisson  = var(pois) / mean(pois),   # ~1: variance tracks the mean
  NegBinom = var(nb)  / mean(nb))      # >>1: over-dispersed

The negative-binomial ratio is far above 1, so its variance vastly exceeds its mean — exactly like real RNA-seq counts. That rules out a plain Poisson (which assumes variance = mean) and points to a negative-binomial model such as DESeq2 or edgeR.

A. Yes — equal counts mean equal expression. B. Not necessarily — it depends on each sample’s library size (sequencing depth) and composition. C. No — equal counts always mean unequal expression.

B. Raw counts are relative: 1,000 reads out of 10 million is a larger share than 1,000 out of 40 million. Until the samples are normalized to a common scale, equal raw counts do not mean equal expression.

Conclusion

A count matrix is not as alien as it first looks. Its rows are genes — DNA instructions, copied into RNA transcripts (some genes into several isoforms) and translated into proteins, the central dogma in one line. Its numbers are read counts: estimates of transcription, relative to each sample’s depth, so they need normalizing before comparison. And their defining quirk is over-dispersion — variance well above the mean — which is precisely why RNA-seq analysis models counts with the negative binomial rather than a t-test or a Poisson. Carry those three ideas into the SummarizedExperiment container and differential expression with DESeq2, and the rest of the pillar reads as small, concrete steps.

Reuse

Citation

BibTeX citation:
@online{2026,
  author = {},
  title = {Biology for {Data} {Scientists:} {The} {Central} {Dogma,}
    {Genes} \& {RNA-seq} {Counts}},
  date = {2026-06-29},
  url = {https://www.datanovia.com/learn/bioinformatics/foundations/biology-for-data-scientists},
  langid = {en}
}
For attribution, please cite this work as:
“Biology for Data Scientists: The Central Dogma, Genes & RNA-Seq Counts.” 2026. June 29. https://www.datanovia.com/learn/bioinformatics/foundations/biology-for-data-scientists.