# edgeR's 'Common Dispersion' vs. 'Tagwise Dispersion'

Common dispersion in edgeR is a single negative binomial dispersion estimate shared by every gene in the dataset, while tagwise dispersion gives each gene its own dispersion estimate that has been shrunk toward a common target by an empirical Bayes procedure. The rule of thumb is simple. Estimate the common dispersion first, then estimate tagwise dispersions, and test differential expression with the tagwise values. Stay with the common dispersion only when you have a deliberate reason, such as an extremely small design where you want the most conservative, least gene-specific variability model available.

This article explains what each estimate actually is, why edgeR computes both, how they behave in real analyses, where each one helps or hurts, and which RNA-seq error patterns show up first as dispersion problems. All commands shown are standard calls from the edgeR package distributed through Bioconductor, the same package that implements the generalized linear model framework for differential expression described by McCarthy, Chen, and Smyth [1].

## Dispersion in edgeR: The Statistical Setting

Before comparing the two options, you need a clear picture of what edgeR is estimating when it reports a dispersion value.

edgeR models raw RNA-seq counts for each gene with a [negative binomial distribution](/blog/data-analysis/negative-binomial-distribution-formula-examples). The negative binomial has two parameters, a mean that captures the gene's expression level in each experimental condition and a dispersion that captures how much the observed counts wobble around that mean beyond what Poisson variation alone would allow. In edgeR's parameterization, the dispersion is the square of the biological [coefficient of variation](/blog/research-skills/how-to-calculate-coefficient-of-variation), often abbreviated BCV. A dispersion of 0.04 corresponds to a BCV of 0.2, meaning biological variation contributes roughly 20 percent variability in counts between replicate samples for that gene.

The word "biological" matters here. The edgeR framework was built to separate biological variation between samples from technical variation in measuring the samples, and to model both in a single statistical framework that handles multifactor experiments [1]. Technical variation, such as the sampling noise of sequencing itself, is handled by the Poisson part of the model. Biological variation between replicate animals, patients, or cultures is handled by the dispersion. When you choose between common and tagwise dispersion, you are choosing how flexibly edgeR models that biological variability across genes.

Three estimates sit on a spectrum of flexibility.

1. **Common dispersion.** One dispersion value for all genes. Every gene shares the same assumption about how variable replicate counts are.
2. **Trended dispersion.** A dispersion value that depends on the gene's average abundance. Genes with similar expression levels get similar dispersions. This exists because, in many datasets, lowly expressed genes are more variable than highly expressed genes.
3. **Tagwise dispersion.** A gene-specific dispersion for every gene, pulled toward a target (the common or trended value) by empirical Bayes shrinkage so that noisy per-gene estimates from few replicates do not destabilize the test [1].

"Tag" is historical edgeR vocabulary from its origins in tag-based sequencing. In modern usage, a tag is simply a gene or feature, so tagwise dispersion means gene-wise dispersion.

## Common Dispersion Explained

### What the estimate is

The common dispersion is a single number, estimated from all genes at once, that represents the typical amount of biological variability in your experiment. In the classic edgeR pipeline you obtain it with `estimateCommonDisp(y)` on a DGEList object. In the GLM pipeline, `estimateDisp(y, design)` estimates the common dispersion, the trended dispersion, and the tagwise dispersions in one call, and stores all three in the DGEGLM-ready object.

Because every gene contributes information to a single shared estimate, the common dispersion pools strength across thousands of features. With only a handful of genes you could never estimate variability reliably, but with 20,000 genes you can estimate one shared variability parameter quite well even from two or three replicates per group. That pooling is the whole logic of the method and it is the reason edgeR works at all with small experiments.

### When the common assumption is reasonable

A single shared dispersion implies that genes with similar expression levels have similar biological variability, and that no gene is unusually noisy relative to the experiment as a whole. In real data, that assumption is often wrong. Variability tends to depend on abundance, and some genes are genuinely more variable between biological samples than others, independent of abundance. The McCarthy et al. case study of paired tumor and normal samples showed exactly this, demonstrating the need to allow gene-specific variability rather than assuming a common dispersion across genes or a fixed relationship between abundance and variability [1].

That said, the common dispersion is not useless. It serves three practical jobs in every edgeR session.

- It is the anchor that tagwise shrinkage pulls toward. You almost always compute it before computing tagwise dispersions.
- It gives you a quick global summary of experimental variability, useful when you compare batches or replicate quality.
- In the rare setting where you believe variability is genuinely homogeneous across genes, testing with the common dispersion alone is a legitimate conservative choice.

### Pros and cons of the common dispersion

The strengths follow directly from pooling. The estimate is stable because thousands of genes inform it. It requires no tuning. It behaves predictably even when the design has very few residual degrees of freedom. It is fast to compute.

The weaknesses follow from the same pooling. Genes that are much more variable than average get under-penalized, so noisy genes can appear significant when they should not. Genes that are much less variable than average get over-penalized, so clean, strongly changing genes lose power. The loss is not uniform, and it is largest exactly where real biology differs most from the average gene. McCarthy et al. framed genewise dispersion estimation as the mechanism that de-prioritizes genes with inconsistent results between biological replicates, which lets the analysis focus on changes that are reproducible [1]. A common dispersion cannot do that, because it cannot tell a consistent gene from an inconsistent one.

## Tagwise Dispersion Explained

### What the estimate is

Tagwise dispersion assigns each gene its own negative binomial dispersion. The naive version of this idea, estimating each gene's dispersion from that gene's counts alone, fails badly in typical experiments. With three versus three samples, a GLM with an intercept and one condition coefficient leaves only four residual degrees of freedom. Per-gene moment or likelihood estimates from four degrees of freedom are noisy enough to wreck the tests, a problem that motivated shrinkage approaches across the RNA-seq method literature [2].

edgeR solves the problem with an empirical Bayes procedure. Each gene starts from its own estimate. The estimates are then shrunk toward a target, either the common dispersion or a trended dispersion that varies with abundance. The strength of the pull is controlled by a prior, and the balance between the gene's own evidence and the prior is governed mainly by the `prior.df` argument of `estimateTagwiseDisp`. Larger `prior.df` values pull gene estimates harder toward the target and behave more like the common dispersion. Smaller values trust each gene's own data more and behave more like unshrunk gene-wise estimates. The default is on the order of 10 residual degrees of freedom of equivalent prior information, and the edgeR documentation for `estimateTagwiseDisp` describes the current default and the options for changing it.

The shrinkage idea is not unique to edgeR. The sSeq method of Yu, Huber, and Vitek formalized the same principle, obtaining initial per-gene estimates by the method of moments and then regularizing them, shrinking them toward a common value chosen to minimize the average squared difference between initial and shrinkage estimates, precisely because per-gene dispersion estimates are unreliable in experiments with small sample sizes [2]. edgeR's implementation differs in its likelihood machinery and its trend modeling, but the motivation is identical.

### The trended target

In practice the target for shrinkage is usually trended, not common. `estimateTagwiseDisp` takes a `trend.method` argument, historically `"movingave"` and now commonly `"locfit"`, which fits a smooth abundance-dependent dispersion trend across genes. Genes are then shrunk toward the trend rather than toward one flat value. This respects the empirical observation that variability tracks abundance in many RNA-seq datasets while still letting each gene deviate from the trend when its own counts demand it.

A robust option, `robust = TRUE`, extends the procedure so that outlier genes with unusually high or low dispersion receive tighter shrinkage toward the trend, protecting the analysis from a minority of erratic genes distorting the trend or the tests for their neighbors.

### How shrinkage behaves in practice

Tagwise dispersion produces a characteristic pattern you should learn to recognize in your own diagnostics. Genes with many counts and stable behavior across replicates get dispersions below the common value. Genes with erratic counts get dispersions above it. Genes with too little data to say anything on their own sit close to the trended target. The empirical Bayes compromise means no gene ever gets an extreme dispersion purely from noise, and no well-behaved gene is punished for the sins of its noisier neighbors.

This is why the tagwise analysis is the edgeR default and why the McCarthy et al. GLM framework treats gene-wise variability as central rather than optional [1]. Genes whose apparent differential expression rests on inconsistent replicate behavior get inflated dispersions, larger standard errors, and weaker tests. Genes whose replicates agree tightly get small dispersions and sharper tests. The differential expression list ends up enriched for reproducible biology, which is usually what you want to report.

### Pros and cons of tagwise dispersion

The strengths are [statistical power](/blog/guides/statistical-power-what-it-is-and-why-it-matters-in-research) and honest per-gene uncertainty. Genes with low, consistent variability gain power. Genes with high variability lose it, appropriately. Shrinkage keeps the per-gene estimates stable even with few replicates, which is the core benefit that shrinkage estimation provides in [small RNA-seq](/knowledge/molecular-biology/small-rna-seq) experiments [2].

The weaknesses are added complexity and added knobs. You now have `prior.df`, `trend.method`, and `robust` to consider, and different choices can shift the gene list. With very small designs the shrinkage step itself consumes information, and in the limit of two total samples the gene-wise component of the estimate is thin even after shrinkage. Tagwise estimation also takes longer to compute than the common estimate, although edgeR's parallelized fitting addresses this for large experiments and complex GLMs [1].

## Side-by-Side Comparison Table

| Criterion | Common dispersion | Tagwise dispersion |
|--|--|--|
| What it is | One negative binomial dispersion shared by all genes | Gene-specific dispersions shrunk toward a common or trended target |
| edgeR function | `estimateCommonDisp(y)` | `estimateTagwiseDisp(y)` or the tagwise step of `estimateDisp(y, design)` |
| Amount of data used per gene | All genes pooled, one value | Gene's own counts plus empirical Bayes prior |
| Key tuning parameters | None | `prior.df`, `trend.method`, `robust` |
| Behavior with 2 to 3 replicates per group | Very stable, very conservative | Stable due to shrinkage, more flexible than common |
| Power for consistently behaving low-variability genes | Reduced, punished by the global average | Preserved or improved |
| Power for noisy, inconsistent genes | Inflated, can produce false positives | Reduced, correctly de-prioritized |
| dependence on abundance | Ignores abundance-variability trends | Can model the trend via `trend.method` |
| Typical role in a workflow | First step, anchor for shrinkage, quick global diagnostic | The estimate used for the final test |
| Diagnostic value | One number summarizing overall BCV | Dispersion-versus-AB plots reveal outlier genes |
| Risk of misuse | Using it as the final estimate in a heterogeneous dataset | Setting `prior.df` too low with tiny designs, producing unstable gene lists |

## The Standard edgeR Workflow That Uses Both

![Four step flow of the edgeR pipeline: filter and normalize, estimate dispersions, inspect the three slots, then fit and test with tagwise values.](/article-images/illustrations/edger-common-dispersion-tagwise-workflow-order.webp)

The two estimates are not competing alternatives in day-to-day use. They are sequential steps in one pipeline. A minimal, defensible script for a two-group GLM analysis looks like this.

```r
library(edgeR)

counts <- read.csv("raw_counts.csv", row.names = 1)
group  <- factor(c("control", "control", "control",
                   "treated", "treated", "treated"))

y <- DGEList(counts = counts, group = group)
keep <- filterByExpr(y, group = group)
y <- y[keep, , keep.lib.sizes = FALSE]

y <- calcNormFactors(y)          # TMM normalization
y <- estimateDisp(y, design)     # common, trended, and tagwise in one call

design <- model.matrix(~group)
fit <- glmFit(y, design)
lrt <- glmLRT(fit, coef = 2)
topTags(lrt, n = 10)
```

Three points in this script deserve comment.

First, `estimateDisp(y, design)` performs all three estimation steps. It computes the common dispersion, fits the abundance trend, and shrinks gene-wise estimates toward that trend. The object returned contains `y$common.dispersion`, `y$trended.dispersion`, and `y$tagwise.dispersion`, and you can inspect all three after the call. The classic pipeline, using `estimateCommonDisp` followed by `estimateTagwiseDisp` and then `exactTest`, is equivalent in spirit for simple designs.

Second, the test in `glmLRT` uses the tagwise dispersions automatically. You do not pass a dispersion argument. If you wanted to force a common-dispersion test, you would overwrite the tagwise slot with the common value, which is exactly the kind of deliberate, documented deviation you should only make with a reason and a note in your methods.

Third, normalization precedes dispersion estimation. `calcNormFactors` applies TMM normalization to remove composition biases, and the dispersion estimates and the tests both assume this step has run. Reordering these steps is a common source of RNA-seq error, covered in the troubleshooting section below.

## Choosing Between the Options: The Criteria That Decide Real Analyses

![Decision path on whether to stay conservative, whether dispersions fan out, and whether replicates are few, ending on testing with tagwise.](/article-images/illustrations/edger-common-dispersion-tagwise-choosing-dispersion.webp)

### Criterion 1, the number of residual degrees of freedom

The fewer replicates you have, the more each gene depends on the prior, and the more the shrinkage target matters. With two versus two samples, a per-gene estimate carries almost no standalone information, so the empirical Bayes step is doing most of the work, which is the situation shrinkage methods were designed for [2]. Tagwise estimation with a sensible prior remains the better final choice because it still separates consistently varying genes from erratic ones, but the common dispersion plays a larger role behind the scenes as the shrinkage anchor. With six or more samples per group, gene-wise information is richer, shrinkage does less, and the difference between tagwise and common results narrows, although tagwise still wins on genes far from the average.

### Criterion 2, the homogeneity of variability across genes

Look at the diagnostics before you commit. After `estimateDisp`, plot the tagwise dispersions against average log counts per million. If the points hug the trend with modest scatter, the common dispersion would not be a terrible final choice, although tagwise still costs you nothing. If the points fan out widely, with some genes at several times the common dispersion and others far below it, the common assumption is demonstrably wrong for your data, and the McCarthy et al. paired carcinoma case study illustrates precisely how gene-specific variability, rather than a common dispersion, determines which genes a well-built analysis detects [1].

### Criterion 3, what kind of false discoveries you can afford

Consider what each option gets wrong. The common dispersion tends to be too generous for noisy genes and too harsh for clean ones. If your downstream validation is expensive, such as confirmatory qPCR on a short list, a noisy-gene false positive in the top of your list is costly. The tagwise analysis with a reasonable prior pushes those inconsistent genes down the list, which matches the de-prioritization of inconsistent results described for the genewise approach [1]. Conversely, if you are fishing broadly for candidate biomarkers and can tolerate a noisier list, the difference matters less, but there is still rarely a reason to prefer the common estimate for the final test.

### Criterion 4, reproducibility and reporting

Whatever you choose, report it precisely. A methods section should state that dispersions were estimated with edgeR using a negative binomial GLM, that tagwise dispersions were estimated with empirical Bayes shrinkage toward a trended target, and the value of `prior.df` if it differs from the default. Reviewers who know the literature will look for this, because the choice of dispersion strategy is a recognized axis of variation among RNA-seq methods, one that comparative evaluations of packages explicitly examine [2].

## Worked Scenarios

### Scenario 1, a pilot with two replicates per group

You have a pilot experiment, two control and two treated samples. After filtering low-count genes and TMM normalization, you run `estimateDisp` and find a common BCV near 0.45, corresponding to a common dispersion near 0.2, which is high but plausible for a heterogeneous tissue in a small pilot.

If you tested with the common dispersion alone, every gene would inherit that high variability, and genes with genuinely tight replicates would be badly underpowered. With tagwise estimation and the default trend, genes whose four counts line up cleanly get dispersions pulled well below 0.2, and the few genes with erratic counts get dispersions pushed above it. The shrinkage keeps those per-gene values from going wild despite only two residual degrees of freedom per group, which is exactly the small-sample regime where unshrunk per-gene estimates are unreliable and regularization earns its keep [2].

The honest reporting choice for a pilot is to describe the analysis as exploratory, use the standard tagwise pipeline, and treat the resulting list as a hypothesis set for confirmation in a larger experiment.

### Scenario 2, a well-replicated experiment with a heterogeneous cell population

You have eight biological replicates per group, from a tissue with real cellular heterogeneity. The common BCV is moderate, but the tagwise plot shows a wide fan of dispersions. A subset of genes, plausibly those expressed in only one cell type, sits far above the trend.

Here the common dispersion would both suppress your best signals and admit noise-driven hits from the high-dispersion subset. Tagwise estimation, especially with `robust = TRUE` to tighten shrinkage around outliers, lets the consistent genes through with small standard errors and demotes the erratic subset. This mirrors the finding that genewise dispersions de-prioritize genes with inconsistent replicate behavior and focus the analysis on changes that are reproducible across biological replicates [1].

### Scenario 3, an experiment where the two options give nearly the same gene list

Sometimes you run both and the top tables overlap heavily. This happens with large, clean, well-normalized datasets where most genes sit near the trend. The comparison is still worth doing, because the agreement itself is evidence that your variability model is not driving your conclusions. When the lists diverge, the genes that differ are almost always at the extremes of the dispersion distribution, exactly the genes where gene-specific modeling has the most to say. Examining those genes, their counts, and their replicate patterns is more informative than arguing about which method is universally better.

## Troubleshooting: RNA-seq Error Patterns That Surface as Dispersion Problems

Many standard RNA-seq errors show up first as strange dispersion behavior, so the dispersion diagnostics double as a troubleshooting panel.

**Unusually small common dispersion.** If the common BCV comes out far below what you would expect for the tissue and design, suspect unaccounted-for sample duplication, such as technical replicates entered as biological replicates, which deflates the apparent biological variability and inflates false positives. Check your sample sheet before you trust the estimate.

**Unusually large common dispersion.** A very high common BCV with a clean design suggests true biological heterogeneity, a mislabeled sample, a batch effect, or outlier libraries. Plot samples with multidimensional scaling before dispersion estimation. One swapped or degraded library can dominate the estimate and drag every gene's test toward non-significance.

**Tagwise dispersions that ignore the trend.** If a large fraction of genes sit far from the trended target, either the trend model does not match your data or a subset of libraries is problematic. Try `trend.method = "locfit"` versus `"loess"` and inspect whether the fan of points narrows. Persistent scatter at high abundance often points to composition bias that TMM normalization did not fully remove.

**Dispersion estimation that fails or throws warnings about non-convergence.** This usually reflects a design matrix problem rather than a data problem. Rank-deficient designs, coefficients that are linear combinations of others, or samples misassigned to groups all break the GLM fit on which dispersion estimation rides. Fix the design before touching estimation parameters.

**Gene lists that change drastically when `prior.df` changes.** Some sensitivity to `prior.df` is normal. Extreme sensitivity means the per-gene information is thin, either because replicates are few or because counts are low after filtering. Increase filtering stringency, or accept that the experiment cannot support fine gene-level variability modeling and lean harder on the shrinkage prior.

**Test results dominated by low-count genes with huge log fold changes.** Low-count genes have unreliable dispersions and unreliable fold changes. edgeR addresses the second problem through fold-change thresholds and `glmTreat`, but the dispersion side is handled by filtering. Filtering low-abundance genes before dispersion estimation is part of the standard workflow, not an optional extra, and skipping it is a frequent RNA-seq error in novice pipelines.

None of these diagnostics replaces a full quality assessment. They are readouts of the variability model, and they are most useful when interpreted alongside sample-level plots and the design matrix you actually fit.

## Common Mistakes and Limitations

The following mistakes appear repeatedly in real analyses and review comments.

- **Treating common and tagwise as rival final choices.** The standard pipeline computes the common dispersion first because tagwise shrinkage needs an anchor. Skipping the common step and asking for tagwise alone either fails or falls back on internal defaults you did not intend to invoke.
- **Testing with the common dispersion by accident.** If you overwrite or bypass the tagwise slot, `glmLRT` will happily test with whatever dispersion is in the object. Check `y$common.dispersion` and the range of `y$tagwise.dispersion` before running tests to confirm which model you are reporting.
- **Treating `prior.df` as a magic number.** The prior strength controls how much gene-wise evidence each gene contributes. Default values are sensible starting points, not universal truths. If you change it, change it with a reason and report the value.
- **Interpreting the dispersion as a p-value-like quality score.** Dispersion is a variability parameter, not a significance measure. A high-dispersion gene can be genuinely differentially expressed, it just carries weaker evidence per unit of effect size.
- **Comparing dispersion values across independent experiments.** Dispersion is estimated within a dataset and depends on the design, the filtering, and the samples. A common BCV of 0.1 in one experiment and 0.2 in another do not mean one experiment is twice as variable in any simple sense, especially if the designs differ.
- **Assuming shrinkage makes small designs safe.** Empirical Bayes stabilizes gene-wise estimates, it does not create biological information that two replicates do not contain. Shrinkage methods were developed for small-sample RNA-seq precisely because per-gene estimates are unreliable there, and the honest conclusion from a two-versus-two experiment is that the analysis is a screening step [2].
- **Forgetting that dispersion estimation is downstream of normalization and filtering.** Errors in `calcNormFactors` or `filterByExpr` propagate into every dispersion. When results look wrong, walk the pipeline from the top rather than tuning dispersion parameters first.

The main limitation of both estimates is shared. They model biological variability between samples, not measurement bias between batches, lanes, or library preparations. Batch effects belong in the design matrix, and no dispersion choice repairs a design that confounds treatment with batch. Individual analysis decisions also depend on the specific dataset, its design, and its goals, so pipeline details should be validated against the current edgeR documentation for the version you run.

## Frequently Asked Questions

### Do I need to estimate the common dispersion if I only want tagwise dispersions?

Yes, in practice. The tagwise estimates are shrunk toward the common or trended dispersion, so the common estimate is computed as part of the process even when the tagwise values are what you test with. Calling `estimateDisp` handles both in one step.

### Which estimate gives more statistical power?

Tagwise dispersion generally gives more power for genes that vary less than the dataset average, and less power for genes that vary more, which is the intended behavior. A common dispersion flattens this, over-penalizing clean genes and under-penalizing noisy ones.

### Can I test with the common dispersion if I have very few replicates?

You can, and it is conservative, but it is usually not the best small-sample choice because it cannot distinguish consistent genes from inconsistent ones. Tagwise estimation with shrinkage was designed for exactly the small-sample regime where per-gene estimates alone would be unreliable.

### What does the prior.df argument actually control?

It controls the strength of the empirical Bayes shrinkage, in units of equivalent residual degrees of freedom of prior information. Larger values pull gene-wise estimates harder toward the trended or common target, making results more similar to a common-dispersion analysis.

### My common dispersion looks tiny or huge. Is my analysis broken?

Not necessarily, but investigate before testing. A tiny value often means technical replicates were treated as biological replicates, and a huge value often means an outlier library, a batch effect, or genuine biological heterogeneity. Check the design, the sample metadata, and a multidimensional scaling plot before adjusting anything.

### Do DESeq2 and edgeR use the same idea for dispersion?

The idea of shrinking unstable per-gene dispersion estimates toward a trend is shared across negative binomial methods for RNA-seq, and comparative work has evaluated these methods side by side. The implementations differ in the likelihood machinery, the trend fitting, and the prior, so results differ at the margins, particularly for low-count genes and small designs.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do I need to estimate the common dispersion if I only want tagwise dispersions?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, in practice. The tagwise estimates are shrunk toward the common or trended dispersion, so the common estimate is computed as part of the process even when the tagwise values are what you test with. Calling estimateDisp handles both in one step."
      }
    },
    {
      "@type": "Question",
      "name": "Which estimate gives more statistical power?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Tagwise dispersion generally gives more power for genes that vary less than the dataset average, and less power for genes that vary more, which is the intended behavior. A common dispersion flattens this, over-penalizing clean genes and under-penalizing noisy ones."
      }
    },
    {
      "@type": "Question",
      "name": "Can I test with the common dispersion if I have very few replicates?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "You can, and it is conservative, but it is usually not the best small-sample choice because it cannot distinguish consistent genes from inconsistent ones. Tagwise estimation with shrinkage was designed for exactly the small-sample regime where per-gene estimates alone would be unreliable."
      }
    },
    {
      "@type": "Question",
      "name": "What does the prior.df argument actually control?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "It controls the strength of the empirical Bayes shrinkage, in units of equivalent residual degrees of freedom of prior information. Larger values pull gene-wise estimates harder toward the trended or common target, making results more similar to a common-dispersion analysis."
      }
    },
    {
      "@type": "Question",
      "name": "My common dispersion looks tiny or huge. Is my analysis broken?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Not necessarily, but investigate before testing. A tiny value often means technical replicates were treated as biological replicates, and a huge value often means an outlier library, a batch effect, or genuine biological heterogeneity. Check the design, the sample metadata, and a multidimensional scaling plot before adjusting anything."
      }
    },
    {
      "@type": "Question",
      "name": "Do DESeq2 and edgeR use the same idea for dispersion?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The idea of shrinking unstable per-gene dispersion estimates toward a trend is shared across negative binomial methods for RNA-seq, and comparative work has evaluated these methods side by side. The implementations differ in the likelihood machinery, the trend fitting, and the prior, so results differ at the margins, particularly for low-count genes and small designs."
      }
    }
  ]
}
</script>

## Sources

1. [Differential expression analysis of multifactor RNA-Seq experiments with respect to biological variation.](https://pubmed.ncbi.nlm.nih.gov/22287627/)
2. [Shrinkage estimation of dispersion in Negative Binomial models for RNA-seq experiments with small sample size.](https://pubmed.ncbi.nlm.nih.gov/23589650/)