Blog
Back to Blog

The Pfaffl Method: When Your Primer Efficiencies Make ΔΔCt Unreliable

The ΔΔCt method assumes your target and reference genes amplify with equal efficiency — ideally both near 100%. When that assumption holds, the math is elegant and the analysis is fast. But when your GOI primers run at 97% and your GAPDH primers sit at 85%, ΔΔCt quietly gives you wrong fold-change values, and nothing in the output flags the error. The Pfaffl method (Pfaffl, 2001) fixes this by incorporating each primer pair's actual efficiency into the fold-change calculation, and it's what you should reach for any time your efficiencies diverge by more than ~5 percentage points.

The core equation is straightforward: Ratio = (E_target)^ΔCt_target / (E_ref)^ΔCt_ref, where each ΔCt is calculated as (control – treated) for the respective gene, and E is the actual amplification efficiency (not percent — more on that below). That's it. No assumption of matched efficiencies, no requirement that both genes double every cycle. If you've already run standard curves for your primers — and you should have — you have everything you need.

Why ΔΔCt Breaks Down

The Livak ΔΔCt method (Livak and Schmittgen, 2001) uses the formula 2^(–ΔΔCt) because it assumes every primer pair has an efficiency of 2 — meaning perfect doubling each cycle, or 100% efficiency. The "2" in that formula is the efficiency. When both your target and reference genes truly amplify at E = 2.0, the efficiencies cancel out and you can ignore them.

The problem is that many primer pairs don't hit 100%. A primer pair at 90% efficiency has E = 1.90, and one at 110% has E = 2.10. These differences compound over 25–35 cycles. Let's put numbers on it:

Say your target gene has E = 1.88 (94% efficiency) and your reference has E = 2.00 (100%). Your treated sample shows a ΔCt_target of 3.2 cycles relative to control, and ΔCt_ref of 0.1.

That's a 46% overestimate from ΔΔCt. If you're reporting a 2-fold change threshold for biological significance, errors of this magnitude can flip your interpretation.

The divergence gets worse with larger ΔCt values and larger efficiency mismatches. If you're comparing across tissues where expression differences are big (ΔCt of 6–8 cycles), using ΔΔCt with mismatched efficiencies can produce fold-change values that are off by 2–3x.

How to Calculate Efficiency Correctly for Pfaffl

You need the efficiency as a base, not a percentage. This is where notation trips people up constantly.

Start with a standard curve: at least 4 points of a serial dilution (I prefer 5), typically 1:5 or 1:10 dilutions of your cDNA, each run in triplicate. Plot log10(quantity) on the x-axis and Ct on the y-axis. The slope of the linear regression gives you efficiency:

E = 10^(–1/slope)

A slope of –3.32 gives E = 10^(1/3.32) = 2.00, which is 100% efficiency. A slope of –3.55 gives E = 10^(1/3.55) = 1.92, or 92%.

Some things to watch:

The Pfaffl equation uses E directly (e.g., 1.95), not the percentage (95%). This is probably obvious, but I've reviewed manuscripts where the authors plugged "95" into the equation and got astronomically wrong values.

Walking Through the Full Pfaffl Calculation

Here's a worked example with realistic numbers from a drug treatment experiment.

Setup: You're measuring HMOX1 expression in HepG2 cells treated with a compound vs. DMSO vehicle. Reference gene is HPRT1. You've determined from standard curves that E_HMOX1 = 1.97 and E_HPRT1 = 1.91.

Raw Ct values (mean of triplicates):

Sample HMOX1 Ct HPRT1 Ct
DMSO control 24.8 22.1
Treated 21.3 22.3

Step 1: Calculate ΔCt for each gene (control – treated).

A positive ΔCt for the target means expression went up in treated (lower Ct = more template). The slightly negative ΔCt for HPRT1 means the reference barely shifted — good, that's what you want from a reference gene.

Step 2: Apply the Pfaffl equation.

Ratio = (E_target)^ΔCt_target / (E_ref)^ΔCt_ref

Ratio = (1.97)^3.5 / (1.91)^(–0.2)

Numerator: 1.97^3.5 = e^(3.5 × ln 1.97) = e^(3.5 × 0.6787) = e^2.3755 = 10.76

Denominator: 1.91^(–0.2) = 1 / 1.91^0.2 = 1 / e^(0.2 × 0.6471) = 1 / e^0.1294 = 1 / 1.138 = 0.879

Ratio = 10.76 / 0.879 = 12.24-fold upregulation

For comparison, ΔΔCt would give: 2^(3.5 – (–0.2)) = 2^3.7 = 12.99-fold

In this case the difference is modest (~6%) because the efficiencies (1.97 and 1.91) are both close to 2.0. But that's the point — when efficiencies are close to 100% and close to each other, both methods converge. The Pfaffl method doesn't hurt you when ΔΔCt would have been fine, and it rescues you when it wouldn't.

Handling Biological Replicates and Statistics

The Pfaffl equation gives you a ratio per sample pair. In practice, you have biological replicates, and you need to decide how to handle them statistically.

The cleanest approach:

  1. Calculate ΔCt for each biological replicate using the mean of its technical replicate Ct values. For the reference gene, ΔCt_ref = Ct_ref(control) – Ct_ref(treated) for matched biological replicates, or against the mean control Ct if samples aren't paired.
  2. Compute the Pfaffl ratio for each biological replicate. You'll get n ratio values (one per replicate).
  3. Perform statistical tests on the ΔCt values, not on the ratios. Fold-change values are ratios and are not normally distributed. ΔCt values, being differences of log-scale measurements, are much better behaved. Use a t-test (two groups) or ANOVA (multiple groups) on ΔCt values. Report the Pfaffl-derived fold changes for biological interpretation, but base your p-values on the ΔCt statistics.

If you have multiple reference genes (which you should, especially across tissues — HPRT1 + B2M or a geNorm-validated set), calculate the geometric mean of the reference gene quantities or average their Ct values before computing ΔCt. The Pfaffl method extends naturally: just use the appropriate efficiency for each reference gene when normalizing.

One thing to note: the original Pfaffl (2001) paper describes a ratio for a single sample vs. a single control. For experiments with biological replicates, the extensions described in Pfaffl et al. (2002) and implemented in tools like REST (Relative Expression Software Tool) add randomization-based statistical testing. REST is free and handles this well, though the interface feels like it was last updated when XP was current.

When to Use Pfaffl vs. When ΔΔCt Is Fine

Use ΔΔCt when:

Use Pfaffl when:

In practice, I'd argue for defaulting to the Pfaffl method. It reduces to ΔΔCt when efficiencies are both 2.0, costs you nothing in complexity, and protects you when efficiencies aren't perfect. The only reason ΔΔCt persists as the default is that it was simple enough to do in Excel in 2001, and old habits calcify in protocols.

Common Mistakes

Using percent efficiency instead of the base. Your software says 94% — you need to plug in 1.94, not 94 or 0.94.

Deriving efficiency from too few standard curve points. Three points can give you a line but not a reliable slope. Use at least 4, ideally 5, spanning the Ct range of your experimental samples.

Ignoring efficiency differences because "both are in the acceptable range." Having one primer at 91% and another at 109% means both are "acceptable" individually, but they differ by 18 percentage points. ΔΔCt will be inaccurate. Pfaffl handles this.

Applying Pfaffl without checking standard curve linearity. If your standard curve R² is 0.95, your efficiency estimate is unreliable, and plugging a bad efficiency into Pfaffl doesn't make the result better — it just makes it differently wrong. Fix the assay first.

If you'd rather not do this math by hand, VoilaPCR takes your raw Ct data and standard curve efficiencies, runs the Pfaffl calculation across all your samples, and flags cases where efficiency mismatches would make ΔΔCt unreliable — so you know which method your data actually warrants before you commit to a result.