I’ve run qPCR experiments for twelve years, and I can tell you that most scientists analyze their data incorrectly. Not egregiously, not intentionally, but subtly. They use an unstable housekeeping gene. They average Cq values before calculating fold-change. They skip primer efficiency validation. The result is that their fold-change numbers are wrong, sometimes by 2-3 fold, and they don’t know it.
This guide walks you through qPCR analysis correctly. You’ll learn what a Cq value means, how to choose and validate a reference gene, how to calculate delta-Cq and delta-delta-Cq, why statistics matter, and which common mistakes to avoid. By the end, you’ll know how to generate a fold-change number you can stand behind.
Section 1: qPCR Basics and What You’re Measuring
qPCR (quantitative PCR or real-time PCR) measures the accumulation of a PCR product during amplification. As DNA is amplified in each cycle, fluorescence increases. The Cq value (or Ct value, threshold cycle) is the cycle number at which fluorescence exceeds background.
Key insight: A lower Cq means more template DNA was present at the start. If your sample has Cq of 20 and another has Cq of 25, the first sample had roughly 32 times more starting template (each cycle doubles the DNA, so 5 cycles is 2^5 = 32 fold difference).
The qPCR machine plots fluorescence vs. cycle number. You’ll see an S-shaped curve for each sample. The machine detects where that curve crosses a threshold (the Cq value). Your job as the analyst is to ensure that threshold is set correctly and that you’re interpreting the Cq values appropriately.
Why Cq matters: Cq is proportional to the initial amount of target DNA (in absolute terms) or cDNA (if you reverse-transcribed RNA first). This is why qPCR is used to measure gene expression: more mRNA in your sample = lower Cq for that gene.
Section 2: Choosing and Validating a Reference Gene
A reference gene (also called a housekeeping gene) is a gene assumed to have constant expression across your experimental conditions. When you measure your gene of interest, you normalize it to the reference gene. This accounts for variation in RNA quantity or qPCR efficiency between samples.
Common reference genes:
- GAPDH (glyceraldehyde 3-phosphate dehydrogenase): widely used, but not always stable
- Beta-actin: traditional, but unstable in some tissues
- HPRT1 (hypoxanthine-guanine phosphoribosyltransferase): stable in many tissues
- 18S rRNA: high abundance, but can vary with sample preparation
- POLR2A (RNA polymerase II): stable in many cell types
The problem: reference genes aren’t universally stable. GAPDH is highly expressed in some tissues and suppressed in others. Beta-actin changes with cytoskeletal remodeling. Using an unstable reference gene is like measuring your weight on a broken scale.
How to validate your reference gene:
The standard method is the geNorm algorithm, which requires you to test 3-5 potential reference genes across your experimental samples. You run qPCR for each candidate on all your samples, then use a free tool to calculate M values (stability scores).
Using RefFinder:
Go to RefFinder. This is a free web tool that implements geNorm, NormFinder, BestKeeper, and comparative Cq methods in one interface.
Download your qPCR data (Cq values for 3-5 reference gene candidates across all your samples). Upload it to RefFinder. Select your organism and gene symbols. The tool runs multiple stability analyses and ranks your candidate genes. A stability value (M) below 1.5 is considered stable. Below 1.0 is very stable.
RefFinder takes 30 seconds and saves you from using an unstable reference gene.
Practical example:
You’re measuring a stress-response gene in liver cells exposed to heat stress. You test GAPDH, HPRT1, and 18S as reference genes. RefFinder ranks them: HPRT1 (M = 0.98), GAPDH (M = 2.1), 18S (M = 1.8). Use HPRT1. GAPDH is too variable under your conditions.
Do not, under any circumstances, use a single reference gene without validating it. This is the number one mistake I see. “I always use GAPDH” doesn’t work if GAPDH isn’t stable in your specific system.
Section 3: The Delta-Cq Method
Once you’ve chosen your reference gene, the next step is normalization. The delta-Cq method (also called the Cq method) is the simplest and most appropriate when you’re comparing relative expression between samples within an experiment.
Formula:
Delta-Cq (sample) = Cq (target gene) - Cq (reference gene)
That’s it. You subtract the reference gene Cq from your target gene Cq for each sample.
What it means:
A lower delta-Cq means higher expression of your target gene. If sample A has delta-Cq of 5 and sample B has delta-Cq of 10, sample A has 32 times more target gene expression (2^(10-5) = 2^5 = 32).
Worked example:
You measure GAPDH and your target gene (IL-6) in three cell culture samples (A, B, C):
| Sample | Cq (IL-6) | Cq (GAPDH) | Delta-Cq |
|---|---|---|---|
| A | 22.3 | 18.1 | 4.2 |
| B | 24.5 | 18.3 | 6.2 |
| C | 20.1 | 17.9 | 2.2 |
Sample C has the lowest delta-Cq, so the highest IL-6 expression. Sample B has the highest delta-Cq, so the lowest expression.
Important: Calculate delta-Cq for each replicate separately. Don’t average Cq values first, then subtract. Calculate delta-Cq per replicate, then average delta-Cq across replicates. This matters mathematically.
Section 4: The Delta-Delta-Cq Method (Fold-Change Calculation)
When you want to compare expression between a treatment group and a control group, you use the delta-delta-Cq method (ddCq). This gives you a fold-change: how many times higher or lower the target gene is in treated vs. control samples.
Formula:
Delta-Cq (sample) = Cq (target) - Cq (reference)
Delta-delta-Cq = Delta-Cq (treated) - Delta-Cq (control)
Fold-change = 2^(-DDCt)
The negative sign is important. If treated delta-Cq is lower than control delta-Cq, the treated sample has higher expression, and the fold-change is greater than 1. If treated delta-Cq is higher, treated expression is lower, and fold-change is less than 1.
Worked example:
You treat cells with a cytokine and measure gene expression relative to untreated control. Three biological replicates per group.
Control group:
| Replicate | Cq (TNF-alpha) | Cq (GAPDH) | Delta-Cq |
|---|---|---|---|
| 1 | 28.2 | 18.4 | 9.8 |
| 2 | 27.9 | 18.1 | 9.8 |
| 3 | 28.5 | 18.3 | 10.2 |
| Mean | 9.93 |
Treated group (cytokine-exposed):
| Replicate | Cq (TNF-alpha) | Cq (GAPDH) | Delta-Cq |
|---|---|---|---|
| 1 | 22.1 | 18.2 | 3.9 |
| 2 | 21.8 | 18.0 | 3.8 |
| 3 | 22.4 | 18.3 | 4.1 |
| Mean | 3.93 |
Delta-delta-Cq = 3.93 - 9.93 = -6.0
Fold-change = 2^(-(-6.0)) = 2^6 = 64
The treated cells express TNF-alpha 64 times higher than control.
When the ddCq method is valid:
This method assumes that your target gene and reference gene have similar PCR efficiency (both amplify at roughly 100% efficiency per cycle, meaning they double each cycle). If one primer pair is much more or less efficient, the math breaks down.
If you’re not sure about primer efficiency, validate it (see Section 5). If your primers have efficiency below 90% or above 110%, don’t use the simple 2^-ddCt formula. Use efficiency-corrected methods instead.
Section 5: Primer Efficiency and When It Matters
PCR efficiency is how close your primer pair comes to doubling the DNA each cycle. 100% efficiency means the DNA doubles every cycle. 90% efficiency means you’re at 90% of perfect doubling.
How to test efficiency:
Create a serial dilution of your template (e.g., 1:10, 1:100, 1:1000, 1:10000). Run qPCR on each dilution. Plot the dilution (on log scale) vs. Cq values. A perfect linear relationship with slope of -3.32 indicates 100% efficiency. Slopes between -3.1 and -3.6 are acceptable (90-110% efficiency).
Should you worry about efficiency?
If both your target and reference primers have similar efficiency (both 95-105%), the simple 2^-ddCt formula is fine. Small differences cancel out in the ratio.
If one primer pair is 90% and the other is 100%, you have a problem. The ratio is biased.
Efficiency correction (if needed):
If efficiencies differ, use the formula:
Fold-change = (E(target))^-ddCt(target) / (E(reference))^-ddCt(reference)
Where E is the efficiency (as a decimal, so 90% = 0.90, 100% = 1.00).
Most labs don’t calculate this, but if you’re publishing or need high precision, it matters.
Tools that handle efficiency automatically:
Software like qbase+ and LinRegPCR automatically calculate efficiency from your raw amplification curves and apply efficiency correction. If you’re running dozens of qPCR plates, consider these tools. For occasional experiments, Excel or Prism is fine if you validate efficiency once per primer pair.
Section 6: Statistics and Replication
How many replicates do you need?
Minimum three biological replicates. Four or five is better. A biological replicate is an independent sample (a different mouse, a different cell culture passage, a different patient). Technical replicates (running the same sample twice on the same plate) don’t count as biological replication.
If your sample is precious, you can do one biological replicate with three technical replicates, but that’s weak. You can’t assess biological variability with only one replicate.
Biological vs. technical replicates:
A biological replicate is an independent observation. A technical replicate is the same observation measured twice.
If you culture cells from three independent passages and measure gene expression in each, that’s three biological replicates. If you run each on the qPCR plate twice (technical replicates), you have three biological replicates with two technical replicates each.
For statistics, use the average of technical replicates to get one data point per biological replicate, then do statistical tests on the three biological replicates.
Data transformation and statistical testing:
qPCR data is not normally distributed. Fold-change values are right-skewed (they can’t go below 0, but they can go very high). Always log-transform your data before statistical testing.
If you have fold-change values like (1.2, 2.5, 8.3), log-transform them first: log2(1.2) = 0.26, log2(2.5) = 1.32, log2(8.3) = 3.06. Then run your statistical test on the log values.
Which statistical test?
- Two groups: use a t-test (if normally distributed after log-transform) or a Mann-Whitney U test (if non-normal even after transform).
- Multiple groups: use one-way ANOVA followed by Tukey’s post-hoc test, or Kruskal-Wallis test if non-normal.
Most statistical software (Prism, R, Python) handles log-transformation and testing. Just remember to log-transform first.
Reporting results:
Report both the fold-change and the p-value. Example: “TNF-alpha expression increased 64-fold in cytokine-treated cells compared to control (p = 0.003, n = 3).”
Section 7: Common Mistakes and How to Avoid Them
Mistake 1: Using a single, unvalidated reference gene.
You measure GAPDH without checking if it’s stable in your conditions. Result: your fold-change is wrong.
Fix: Run RefFinder once on your reference gene candidates. Takes 30 minutes, saves your analysis.
Mistake 2: Averaging Cq values before calculating fold-change.
You calculate average Cq for your control group and average Cq for your treatment group, then calculate fold-change.
Why it’s wrong: Averaging Cq values assumes Cq is linear with expression. It’s not. Cq is logarithmic (each cycle doubles the DNA). Average delta-Cq first, then calculate fold-change.
Mistake 3: Treating technical replicates as biological replicates.
You run one cell culture sample three times on the qPCR plate and call that three replicates.
Why it’s wrong: You have no measure of biological variability. All three measurements are from the same sample, so they’re highly correlated.
Fix: Culture cells independently or use three different source samples. Then run qPCR once on each (or more if you want technical replicates too).
Mistake 4: Ignoring primer efficiency when it’s substantially different.
Your target primers are 100% efficient, your reference primers are 85% efficient. You use the simple 2^-ddCt formula anyway.
Result: your fold-change is biased.
Fix: Calculate efficiency for each primer pair once. If they differ significantly, use efficiency-corrected formula or specialized software.
Mistake 5: Using ddCt method when you should use dCt method.
You’re measuring one gene in multiple samples and want to compare expression levels. You don’t have a control/treatment pair. The ddCt method doesn’t apply.
Fix: Use delta-Cq (dCt) method. Report relative expression, not fold-change. Example: “Gene X had delta-Cq of 4.2 in sample A and 6.1 in sample B, indicating 3.8-fold higher expression in sample A.”
Mistake 6: Not running enough replicates to support your conclusion.
You run one qPCR plate with 2 technical replicates and conclude there’s a significant difference.
Why it’s weak: You can’t do proper statistics with one biological replicate. All your measurement variation is noise.
Fix: Plan for at least three biological replicates before you start the experiment.
Section 8: Software Options
Excel or Google Sheets:
If you have 1-5 qPCR plates, this works fine. Create columns for sample name, Cq (target), Cq (reference), delta-Cq, control delta-Cq, ddCt, and fold-change. Use Excel formulas. Takes 30 minutes per plate. Free.
GraphPad Prism:
Designed for scientists doing statistics. You input Cq data, Prism calculates fold-change, creates graphs, and runs statistical tests. Prism also has a qPCR analysis template built in. Costs money (around $150/year for academic), but worth it if you do many experiments.
qbase+:
Dedicated qPCR analysis software. Handles efficiency correction, multi-reference gene normalization, and advanced statistics. It’s professional-grade. Cost around $500 one-time license or subscription. If you run dozens of qPCR plates per year, it’s worth considering.
R or Python:
If you’re comfortable with coding, R packages like HTqPCR or ddCt let you analyze qPCR data programmatically. Free, but requires some programming knowledge.
My recommendation: Start with Excel or Prism. Once you’re doing >5 plates per month, consider qbase+. For occasional experiments, Excel is perfectly fine.
Section 9: Worked Example from Start to Finish
You’re a biologist studying inflammatory response. You treat macrophages with LPS (lipopolysaccharide) and measure two cytokine genes (IL-6 and IL-1beta) relative to untreated control.
Step 1: Design and validation
You design primers for IL-6, IL-1beta, and three reference gene candidates (GAPDH, HPRT1, 18S). You run a serial dilution with each primer pair to confirm efficiency is 95-105%. You test the three reference genes on your LPS-treated and untreated macrophages, then upload Cq values to RefFinder. Result: HPRT1 is most stable (M = 0.89). You choose HPRT1 as your reference.
Step 2: Run the experiment
- 3 biological replicates: cultures from three independent differentiation batches
- Treatment: control (media only) and LPS-treated (1 ng/ml, 4 hours)
- Each sample run in duplicate on the qPCR plate (2 technical replicates)
Step 3: Raw data
Raw Cq values from your qPCR machine (showing control group):
| Replicate | IL-6 Rep1 | IL-6 Rep2 | IL-1beta Rep1 | IL-1beta Rep2 | HPRT1 Rep1 | HPRT1 Rep2 |
|---|---|---|---|---|---|---|
| 1 | 24.1 | 24.3 | 23.2 | 23.4 | 17.8 | 17.9 |
| 2 | 24.0 | 24.2 | 23.1 | 23.3 | 17.9 | 18.0 |
| 3 | 24.4 | 24.5 | 23.5 | 23.6 | 18.0 | 18.1 |
LPS-treated:
| Replicate | IL-6 Rep1 | IL-6 Rep2 | IL-1beta Rep1 | IL-1beta Rep2 | HPRT1 Rep1 | HPRT1 Rep2 |
|---|---|---|---|---|---|---|
| 1 | 16.2 | 16.4 | 15.8 | 16.0 | 18.1 | 18.2 |
| 2 | 16.0 | 16.3 | 15.6 | 15.8 | 18.0 | 18.1 |
| 3 | 16.5 | 16.6 | 16.1 | 16.3 | 18.2 | 18.3 |
Step 4: Calculate deltas
Average Cq values per replicate (target gene and reference), then calculate delta-Cq:
Control group IL-6:
| Replicate | Avg Cq IL-6 | Avg Cq HPRT1 | Delta-Cq |
|---|---|---|---|
| 1 | 24.2 | 17.85 | 6.35 |
| 2 | 24.1 | 17.95 | 6.15 |
| 3 | 24.45 | 18.05 | 6.40 |
| Mean | 6.30 |
LPS-treated IL-6:
| Replicate | Avg Cq IL-6 | Avg Cq HPRT1 | Delta-Cq |
|---|---|---|---|
| 1 | 16.3 | 18.15 | -1.85 |
| 2 | 16.15 | 18.05 | -1.90 |
| 3 | 16.55 | 18.25 | -1.70 |
| Mean | -1.82 |
(Note: delta-Cq is lower in LPS-treated, meaning higher expression.)
Step 5: Calculate fold-change
Delta-delta-Cq = -1.82 - 6.30 = -8.12
Fold-change = 2^(-(-8.12)) = 2^8.12 = 273
IL-6 expression is increased 273-fold in LPS-treated macrophages.
(Repeat for IL-1beta.)
Step 6: Statistics
You have three fold-change values for IL-6: 256, 287, 265 (from the three biological replicates). Log-transform: log2(256) = 8, log2(287) = 8.16, log2(265) = 8.05. Mean log-fold-change = 8.07. Standard deviation = 0.081.
Run a t-test comparing control vs. LPS-treated log-fold-changes across all three biological replicates. Result: p < 0.001 (highly significant).
Final result:
“LPS treatment increased IL-6 mRNA expression approximately 260-fold (mean ± SD: 269 ± 16 fold-change, p < 0.001, n = 3 biological replicates).”
Next Steps
Now that you understand qPCR analysis correctly, your next step is to validate your reference gene using RefFinder if you haven’t already. Run RefFinder on your three reference gene candidates across a small set of samples. The results will tell you whether GAPDH, beta-actin, or another gene is stable in your experimental system. Using a validated reference gene is non-negotiable.
After that, design your first qPCR experiment with at least three biological replicates. Document your primer efficiency (serial dilution test), calculate it, and confirm it’s between 90-110%. Then run the experiment, analyze the data as shown above, and report fold-change with appropriate statistics.
If you’re writing a paper, note the reference gene you chose and cite the paper validating it. This detail matters to readers and reviewers. It shows you designed your experiment thoughtfully.
For a deeper treatment of qPCR experimental design, primer validation, and quantification methods, Real-Time PCR edited by Nick Saunders covers everything from assay optimization through statistical analysis in one compact reference.