A small, self-contained demonstration of how to apply amplification-efficiency correction to RT-qPCR Cq data and compute a normalized target/reference ratio.
All data in this repository is synthetic (randomly generated by a seeded script). It is a method demonstration only — it does not represent any real experiment, sample, or result.
The classic 2^(−ΔΔCt) method assumes both assays amplify at 100% efficiency (a doubling every cycle). Real assays rarely do. When the target and reference assays have different efficiencies, an uncorrected ratio is biased. Efficiency correction rescales each Cq to a common 100%-efficiency basis before quantities are compared (the Pfaffl principle).
For each assay, the standard curve gives a slope, from which efficiency is derived; every Cq is then converted to an efficiency-corrected value:
Efficiency (%) = (-1 + 10^(-1 / slope)) * 100
E = 1 + Efficiency(%) / 100
Ct(100%) = Cq * log2(E)
Quantity = 100 * 2^( mean(std100 Ct(100%)) - sample Ct(100%) )
Normalized ratio = Target quantity / Reference quantity
The ratio is computed per matched technical replicate, averaged per biological
replicate, then summarized (mean, SD) across replicates within each group. See
references/efficiency_correction_method.md for a fuller walkthrough.
Three sample groups (A, B, C), three biological replicates each:
| Group | Rep 1 | Rep 2 | Rep 3 | Mean | SD |
|---|---|---|---|---|---|
| A | 0.446925 | 0.495239 | 0.436762 | 0.459642 | 0.031244 |
| B | 0.821351 | 0.893508 | 0.580211 | 0.765024 | 0.164068 |
| C | 0.221490 | 0.299057 | 0.675234 | 0.398594 | 0.242697 |
| Assay | R² | Efficiency |
|---|---|---|
| Target | 0.999754 | 94.92% |
| Reference | 0.999960 | 98.84% |
Efficiencies within roughly 90–110% are generally considered acceptable. The lowest standard is left undetermined and excluded from the fit.
install.packages("readxl")Rscript R/analyze_qpcr.RThe script reads data/raw/qpcr_raw_ct.xlsx, writes CSVs to results/generated/,
and checks its group summary against results/efficiency_corrected_ratio_summary.csv.
Regenerate the synthetic dataset from the seed:
python3 tools/generate_dummy_data.pyR/ Reproducible R analysis
tools/ Seeded synthetic-data generator
data/raw/ Synthetic raw Cq workbook (analysis input)
references/ Pfaffl method template + efficiency-correction method note
results/ Live-formula workbook, static values snapshot, summary CSV
docs/ Static HTML report (GitHub Pages source)
*_live.xlsx keeps the formulas (recalculates in Excel); *_values.xlsx is the
same sheet with formulas evaluated to static numbers.