qPCR ΔΔCt 相对定量分析
用途
把仪器导出的 qPCR 原始 Ct 数据,变成可直接写进论文/汇报的相对表达量结果: ΔCt → ΔΔCt → RQ = 2^(-ΔΔCt),并给出每个技术重复的个体 RQ、fold change、 置信区间与显著性,同时自动做仪器层面的质控体检。
何时使用
- 需要计算相对表达量 / fold change(RQ、2^-ΔΔCt)
- 有 QuantStudio / 7500 / CFX / LightCycler 导出的
.xls/.xlsx/.csv, 或已整理成Sample Name / Target Name / CT三列表 - 需要按"内参基因 + 目标基因"归一化,并按样品分组、以组内对照(N/WT/CK)为 calibrator
- 需要每个技术重复的个体 RQ 值(用于 Prism / Origin 重绘,而不是只给均值)
- 需要顺带检查扩增异常孔(Amp Status / HIGHSD / Ct SD)与板间漂移
输入
三种任选其一:
- 仪器导出文件(推荐):
.xls/.xlsx/.xlsm/.csv/.tsv。 脚本自动挑工作表(优先名字含Results的表)、自动定位表头行与 Sample / Target / Ct 三列,不依赖固定行号。 - 三列表 CSV:列名
Sample Name,Target Name,CT - 配置文件:JSON,含
reference/target/groups/alpha/outdir/tag, 适合批量或固定流程复用
必须提供的实验信息:内参基因名(如 UBQ、Actin、GAPDH)、目标基因名、
分组与组内对照样品(如 a组:对照 a-N:样品 a-N,a-2,a-14)。
快速开始
# 1) 直接分析仪器导出文件
python scripts/ddct_run.py --input 2026-09-11_ab.xls --ref UBQ --target POT \
--groups "a组:a-N:a-N,a-2,a-14;b组:b-N:b-N,b-1,b-5" --tag ab
# 2) 分析已整理好的三列表
python scripts/ddct_run.py --input ct.csv --ref UBQ --target POT \
--groups "GroupA:A-N:A-N,A-1;GroupB:B-N:B-N,B-1" --tag example
# 3) 用配置文件(等价写法)
python scripts/ddct_run.py --input ct.csv --config example_config.json
# 4) 命名规范时自动分组(对照 = 后缀 N / WT / CK / NC / MOCK)
python scripts/ddct_run.py --input raw.xls --ref UBQ --target POT --groups auto --tag ab
# 5) 只抽取三列、先看列定位是否正确
python scripts/extract_ct.py raw.xls --qc -o ct.csv
--groups 语法:组名:对照样品:样品1,样品2;组名2:对照2:样品1,样品2。
每组必须有各自的对照,不做跨组比较(不同板的 Ct 基线不同)。
分析流程
ΔCt = mean(Ct_目标) − mean(Ct_内参) 同一样品内计算
ΔΔCt = ΔCt(样品) − ΔCt(组内对照) 对照自身 ΔΔCt = 0
相对表达量 = RQ = 2^(−ΔΔCt) 对照自身 RQ = 1
Fold change = RQ;RQ<1 时同时给出下调倍数 = 1/RQ
逐重复RQ = 2^(−(Ct目标_i − Ct内参_i − ΔCt_对照均值)) 每个技术重复一个点
SE(ΔΔCt) = sqrt(SE_目标² + SE_内参² + SE_对照目标² + SE_对照内参²)
RQ 区间 = 2^(−(ΔΔCt ± k·SE)) k=1 给 1SE 误差棒,k=t(1−α/2, df) 给 95% CI
显著性 = Welch 近似 t 检验(自由度 Welch–Satterthwaite 合成)
完整的误差传播推导、统计假设、扩增效率校正与常见错误,见 references/method.md。
输出
| 文件 | 内容 |
|---|---|
| <tag>_DDCt分析结果.xlsx | 结果汇总(含 Fold change、CI95、p 值、显著性)、逐重复RQ、Prism列格式_<目标基因>、原始Ct明细、QC检查、方法说明(含柱状图) |
| <tag>_结果汇总.csv | 结果汇总表 |
| <tag>_逐重复RQ_宽格式.csv | 每列一个样品、每行一个技术重复 → 直接粘入 Prism / Origin 画散点或带散点柱状图 |
| <tag>_逐重复RQ_长表.csv | 每个重复的 Ct目标 / Ct内参 / ΔCt / ΔΔCt / RQ,便于复核 |
结果汇总表列:分组、目标基因、样品、对照、n目标、n内参、Ct目标均值、目标SD、 Ct内参均值、内参SD、dCt、dCt_SE、ddCt、ddCt_SE、相对表达量RQ、RQ下限_1SE、RQ上限_1SE、 RQ_CI95低、RQ_CI95高、FoldChange、变化方向、下调倍数、t值、df、p值、显著性、备注。
参数
| 参数 | 默认 | 说明 |
|---|---|---|
| --input | 必填 | 仪器导出文件或三列表 CSV |
| --ref | UBQ | 内参基因名 |
| --target | POT | 目标基因名,多个用逗号分隔 |
| --groups | 必填 | 组名:对照:样品1,样品2;...;填 auto 自动推断 |
| --config | — | JSON 配置,命令行参数优先 |
| --tag | 输入文件名 | 输出文件前缀 |
| --outdir | 当前目录 | 输出目录 |
| --sheet | 自动 | 指定工作表名 |
| --alpha | 0.05 | 显著性水平(影响 CI 与显著性标记) |
| --no-chart / --no-qc / --keep-extract | — | 关掉图表、关掉 QC 表、额外保留三列中间 CSV |
依赖
- Python 3.7+,标准库即可完成
.xls/.csv的读取与全部计算 - 写出 Excel 需要
openpyxl(pip install openpyxl);缺失时自动跳过 xlsx 输出, CSV 结果照常生成 - 读取
.xlsx同样依赖openpyxl
质控清单(分析后必看)
- QC检查工作表:
非Amp孔数> 0 → 该孔扩增异常;HIGHSD标记孔数> 0 → 该样品(尤其出现在内参上时)结果不可靠;仪器CtSD均值> 0.3 → 孔间差异大 - 板间一致性:
板间一致性行给出前后两半的 ΔCt 差,> 0.5 说明两块板不一致, 该样品结论需谨慎或分板重算 - 逐重复 RQ 离散度:跨度过大(如 0.35–1.19)通常是内参不稳,而非真实生物学差异
- 技术重复 vs 生物学重复:仅技术重复时 p 值只反映孔间加样误差, 不能作为生物学结论的证据;结论需要 ≥3 次独立生物学重复
- 扩增效率:
2^(-ΔΔCt)假定效率 100%;标准曲线斜率偏离 −3.32 较多时应做效率校正
常见问题
| 症状 | 处理 |
|---|---|
| 找不到表头行 | 用 --sheet 指定工作表;或先用 extract_ct.py 看定位结果;必要时手工整理三列表 |
| 选错工作表 / 列 | --sheet 明确指定;extract_ct.py 会打印定位到的工作表、表头行与列字母 |
| 分组报错 | 报错信息会列出数据中真实存在的样品名,据此修正 --groups |
| .xls 读不了 | 用 Excel/WPS 另存为 .xlsx,或先导出三列表 CSV |
| 中文样品名乱码 | 另存为 .xlsx 或 UTF-8 CSV |
各仪器(QuantStudio / 7500 / CFX / LightCycler)的列名差异、别名表、QC 列含义与 排错清单,见 references/instrument-formats.md。
参考文件
- references/method.md — 计算与统计原理、误差传播、扩增效率校正、常见错误
- references/instrument-formats.md — 仪器导出格式、列名别名、QC 列、排错
- references/example.md — 可直接复现的最小示例(含预期输出与核对要点)
- scripts/ddct_run.py — 主分析脚本
- scripts/extract_ct.py — 三列抽取(自动定位工作表/表头/列)
- scripts/xls_read.py — 纯 Python 的 .xls(OLE2 + BIFF8)读取器
结果呈现建议
向用户报告时:先给结论(哪些样品显著上下调、倍数),再给结果表, 并始终附上每条重复的原始 RQ 值与质控提示(异常孔、板间漂移、样本量类型)。 不要只给均值,也不要把技术重复的 p 值说成生物学差异。
微信扫一扫