NIPT 的时点选择与胎儿的异常判定(2025 国赛 C)优秀范文(一)
摘要
本题要求为无创产前检测(NIPT)建立"检测时点选择"与"胎儿异常判定"两套模型。NIPT 通过母体血浆中游离胎儿 DNA(cffDNA)筛查染色体非整倍体(以 T21 为代表),本质是筛查而非诊断的两阶段问题:第一阶段在某一孕周用测序给出"高风险/低风险"判读,第二阶段对高风险者做有创确诊(羊穿 / CVS)。本文把两阶段统一在贝叶斯判定 + 决策理论框架下:①用胎儿浓度 随孕周 饱和上升、检测失败率 随孕周下降、有效灵敏度 随孕周上升的闭式模型刻画"时点—表现"规律;②以产妇年龄别患病率 为先验,结合 给出阳性/阴性后验 、,揭示"高灵敏度 ≠ 高阳性预测值"这一核心陷阱;③在假阴(灾难性)与假阳(不必要羊穿,含约 流产风险)代价不等的前提下,以每筛查一人预期代价最小确定风险报告 cutoff ,并与 Youden 切点对比;④进一步对孕周做"可靠性 vs 可操作性"权衡,给出最优检测时点 。全部模型为确定性闭式、纯标准库实现,正文/配图/附录/真源四路数字一致。主要结论:在最佳孕周 周、产妇年龄 35 岁时 (即阳性者仅四成真正患病),年龄 25 岁降至 ,说明低患病率下必须报后验而非只看 cutoff;代价最优 cutoff 比 Youden 切点()更保守,预期代价由 降至 ;最优检测时点约 周,过早在失败率、过晚在可操作性上双双受损。
一、问题重述
给定 NIPT 的筛查场景:在孕周 周采血测序,得到各染色体 z 值/reads 计数,据此判读胎儿是否患染色体非整倍体(记为事件 )。题目要求回答三件事:一是时点对检测表现的影响——胎儿浓度(fetal fraction) 随孕周上升,过早则浓度低、检测失败率与误判率升高,过晚则压缩确诊(羊穿)的临床可操作窗口;二是给定时点下,用贝叶斯把检测的灵敏度 、特异度 与人群先验(如产妇年龄)结合,给出阳性/阴性的后验患病概率,完成"胎儿异常判定";三是在筛查(非诊断)与有创确诊风险约束下,做阈值与时点的最优决策,平衡假阴(灾难性)与假阳(不必要有创确诊)的代价。赛题通常给不同孕周的样本量、cffDNA 浓度分布、测序计数、产妇年龄与金标准(核型)真值;本文以文献典型值建模合成练习数据,给出可复现的判定与决策流程。
二、模型假设
- 单指标主导:以 T21(21 三体)为判定目标,用单一综合风险评分 表征测序证据,评分在 与 下均近似正态分布,区分度随孕周变化。
- 胎儿浓度单调:胎儿浓度 随孕周饱和上升,反映 cffDNA 占比随胎盘发育增大。
- 失败率单调:当浓度低于测序所需阈值时检测"无 CALL"(no-call),失败率 随孕周指数下降。
- 性能随浓度提升:有效灵敏度 随胎儿浓度上升(低浓度下弱阳性信号易被噪声淹没),特异度近天花板、随时点变化很小。
- 贝叶斯先验可估:年龄别患病率 可用公开流行病学曲线估计,作为阳性后验的先验;测序噪声为加性高斯。
- 两阶段代价可量化:假阴代价 (漏诊导致患儿出生)远高于假阳代价 (假阳导致不必要羊穿,其预期损失含约 流产风险折算);羊穿可操作性随孕周增大而下降。
三、符号说明
| 符号 | 含义 | 取值/单位 |
|---|---|---|
| 孕周 | 9–22 周 | |
| 胎儿浓度(cffDNA 占比) | 随 上升,最高约 12.7% | |
| 检测失败(no-call)率 | 随 下降 | |
| 有效灵敏度 / 特异度 | 0.82–0.99 | |
| 胎儿患病先验(年龄别) | 0.10%–1.00% | |
| 阳性 / 阴性预测值(后验) | ||
| 风险评分标准化报告阈值 | cutoff | |
| 假阴 / 假阳代价 | 1000 / 50 | |
| 最优检测孕周 | 周 |
四、模型建立
4.1 时点—表现模型
胎儿浓度取饱和上升形式
孕 10 周约 、孕 20 周约 。失败率随孕周指数下降
孕 9 周高达 (近六成样本无 CALL),孕 12 周降到 ,孕 20 周仅 。风险评分区分度(决定 AUC)随浓度上升:
在实验室固定报告 cutoff (约 假阳性率)下,有效灵敏度为 、特异度 。由此得 、、,最佳孕周处 、。
4.2 贝叶斯判定(核心)
筛查的价值不在"判阴阳",而在"报概率"。给定阳性,后验阳性预测值为
给定阴性,后验阴性预测值(惯例 NPV)为
关键结论:高 不等于高 。即便 ,在低患病率人群中阳性者大多仍是假阳。本文取年龄别先验 :年龄 25/35/40/45 岁对应患病率 。在 周,三者的 分别为 、、——即 35 岁阳性孕妇真正患病者仅四成;而 ,阴性结果极可靠。这正说明"阳性=高风险"而非"确诊",必须用贝叶斯结合年龄先验。
4.3 ROC 与 Youden 切点
风险评分在 下服从方差齐的正态,ROC 曲线由区分度 决定:
其中 为标准化报告阈值。Youden's 在 处最大;对 ()得 、、。Youden 切点等权对待灵敏度与特异度,但二者临床代价并不相等。
4.4 预期代价阈值优化
把"是否判阳并转诊羊穿"视为决策:假阴使真患儿漏诊(代价 ),假阳使健康孕妇承受不必要羊穿(代价 ,已含约 流产风险折算)。每筛查一人的预期代价随报告 cutoff 变化:
对年龄 35 岁()最小化得代价最优 cutoff ,对应 ,预期代价 ;而 Youden 切点处 。代价最优比 Youden 更保守(更高阈值、更低假阳性率),因为假阳也携真实流产风险,不应被等权处理。
4.5 最优检测时点(可靠性 vs 可操作性)
检测时点的总期望负担由三部分构成:失败重采代价、决策代价、可操作性惩罚(孕周越大确诊窗口越窄):
对代表人群(年龄 35)最小化得最优检测时点 周、期望负担 。过早(如 9 周)失败率 主导,过晚(如 20 周)可操作性惩罚累积,二者权衡下最优落在中段。
五、模型求解与结果分析
5.1 胎儿浓度与时点—表现
图 1 显示胎儿浓度在 9–22 周由约 升至 ,是检测可靠性提升的物理基础。图 2 三条曲线揭示同一时点的双重效应:失败率从 降到 ,有效灵敏度从 升到 ,特异度始终近天花板()——说明时点改善主要来自"灵敏度提升 + 失败减少",而非特异度。
5.2 贝叶斯判定与 PPV 热图
图 3 给出 在"孕周 × 年龄"上的热图:颜色越红(PPV 越高)集中在高孕周、高龄区。可见即便最佳时点,年轻人群 PPV 仍低(年龄 25 仅 ),老年人群显著升高(年龄 40 达 )。这正是"不能对所有人群报统一风险"的定量依据。
5.3 ROC 与 Youden 切点
图 4 给出 ()的 ROC 曲线与随机线,标注 Youden 最优切点 ()。曲线贴近左上角说明该时点检测分辨力极强,但"分辨力强"仍不等于"阳性就大概率患病"——后验还取决于患病率(见 5.2)。
5.4 代价最优 cutoff
图 5 为年龄 35 岁时预期代价 曲线:在 处取到最小 ,明显低于 Youden 切点处的 。该图直观说明最优阈值由代价结构决定——当假阳也含真实流产风险时,应把 cutoff 上移以减少不必要的有创确诊。
5.5 最优检测孕周
图 6 为期望总负担 随孕周变化:在 周处取到最小 ,左侧由高失败率抬升、右侧由可操作性惩罚抬升,呈典型"碗形"。这给出本题第一问的定量答案——最优检测时点不在最早也不在最晚,而在中段。
5.6 先验敏感性
图 7 对比"真实年龄别先验"与"朴素统一先验()"下的 PPV:若对所有孕妇套用统一先验,对高龄(40/45 岁)孕妇会低估其真实阳性预测值,导致风险沟通偏差。说明贝叶斯判定对先验(年龄)敏感,临床应按年龄分层报后验。
5.7 蒙特卡洛鲁棒性
图 8 对 施加高斯扰动(固定种子,2000 次)重算 PPV:分布集中、均值稳定,说明本文 PPV 结论对检测性能的小幅波动稳健,不是脆弱的边界效应。
六、灵敏度分析
- 代价比 :比值越大, 越偏保守(更少假阳),最优时点基本不变;比值趋近 1 时 趋近 Youden 切点。
- 患病率误设:用统一先验会系统性低估高龄 PPV(图 7),强调年龄分层的必要性。
- 失败率曲线:若测序技术改进使 整体下移, 碗形左移,最优时点可提前。
- 可操作性系数 :增大则 前移,提示确诊通道紧张时应尽早筛查。
七、模型评价
优点:①把"筛查非诊断"的两阶段结构显式建模,避免把灵敏度误当确诊率;②用贝叶斯把年龄先验与似然结合,给出可沟通的后验概率;③以决策理论统一阈值与时点优化,结论可操作;④全程确定性闭式、纯标准库,可复现、易教学。
缺点与改进:① 用光滑闭式近似真实测试的离散报告,未用原始 reads 计数做似然;②仅以 T21 单指标为代表,未纳入 T18/T13 与多染色体联合判定;③可操作性惩罚为线性近似,未结合具体临床路径时延。改进方向:用测序计数做似然层、对多指标训练分类器(见范文二)、把时点优化放入随机规划(见范文三)。
八、结论
本文在贝叶斯判定 + 决策理论框架下统一回答了 NIPT 的时点选择与异常判定:①胎儿浓度随孕周上升使失败率由 降到 、灵敏度由 升到 ;②低患病率下阳性预测值远低于灵敏度,年龄 35 岁阳性者仅 真正患病,必须用贝叶斯报后验;③代价最优报告 cutoff 比 Youden 切点更保守,预期代价降 ;④最优检测时点约 周,由"可靠性 vs 可操作性"权衡决定。全文模型确定性、可复现,正文/配图/附录/真源四路一致。
参考文献
- Norton M E, et al. Cell-free DNA analysis for noninvasive examination of trisomy. NEJM, 2015.
- Gil M M, et al. Analysis of cell-free DNA in maternal blood in screening for aneuploidies. Ultrasound Obstet Gynecol, 2015.
- Bianchi D W, et al. DNA sequencing versus standard prenatal aneuploidy screening. NEJM, 2014.
- Youden W J. Index for rating diagnostic tests. Cancer, 1950.
- 2025 高教社杯全国大学生数学建模竞赛 C 题(NIPT 的时点选择与胎儿的异常判定).
附录:核心 Python 实现
import os, sys, math, random
# 定位并导入真源模块(与配图同源,四路一致)
try:
_HERE = os.path.dirname(os.path.abspath(__file__))
except NameError:
_HERE = os.getcwd()
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_cumcm2025c as G
# ---- 复算关键数字 ----
print("胎儿浓度 f(10)=%.3f f(20)=%.3f" % (G.fetal_fraction(10.0), G.fetal_fraction(20.0)))
print("失败率 p_fail(9)=%.3f p_fail(12)=%.3f p_fail(20)=%.3f"
% (G.p_fail(9.0), G.p_fail(12.0), G.p_fail(20.0)))
DR = G.delta(20.0)
print("区分度 DELTA(20)=%.3f AUC=%.4f" % (DR, G.phi(DR / math.sqrt(2.0))))
print("灵敏度 Se(9)=%.4f Se(12)=%.4f Se(20)=%.4f"
% (G.se(9.0), G.se(12.0), G.se(20.0)))
print("特异度 Sp(20)=%.4f" % G.sp(20.0))
print("患病率 P(D|35)=%.5f P(D|40)=%.5f" % (G.p_d(35.0), G.p_d(40.0)))
print("PPV(g=20): 年龄35=%.4f 年龄40=%.4f" % (G.ppv(20.0, 35.0), G.ppv(20.0, 40.0)))
print("NPV(g=20,年龄35)=%.5f" % G.npv(20.0, 35.0))
# ROC / Youden / 代价最优 cutoff / 最优时点
zJ, J = G.youden_opt(DR)
print("Youden zJ=%.2f J=%.4f Se=Sp=%.4f" % (zJ, J, G.phi(DR - zJ)))
pd35 = G.p_d(35.0)
z_star, c_star = G.optimal_cutoff(pd35, DR)
print("代价最优 cutoff z*=%.2f C=%.4f Se*=%.4f Sp*=%.4f"
% (z_star, c_star, G.phi(DR - z_star), G.phi(z_star)))
g_star, e_star = G.optimal_week(pd35, DR)
print("最优孕周 g*=%.1f 期望负担 E=%.4f" % (g_star, e_star))
# 蒙特卡洛鲁棒性(与配图同源)
rng = random.Random(G.SEED)
se0, sp0, vals = G.se(20.0), G.sp(20.0), []
for _ in range(2000):
s = min(0.999, max(0.5, se0 + rng.gauss(0, 0.012)))
p = min(0.999, max(0.9, sp0 + rng.gauss(0, 0.004)))
vals.append(s * pd35 / (s * pd35 + (1 - p) * (1 - pd35)))
print("MC PPV 均值=%.4f 标准差=%.4f" % (sum(vals) / len(vals),
math.sqrt(sum((v - sum(vals) / len(vals)) ** 2 for v in vals) / len(vals))))