国赛 · 2025C
NIPT 的时点选择与胎儿的异常判定
结合孕妇的检测指标与孕周信息,确定无创产前检测的最佳时点,并建立胎儿染色体异常的判定模型。
2 个关联模型拆解这道题 →
样本极少(约 $4\sim 10$ 个时点)、序列单调趋势明显、又无法用统计方法定阶的短期预测。
依赖见代码开头;示例在自己的 Python 环境运行,页面不执行代码。用于理解方法,正式参赛请补齐数据检验与误差分析。
# 依赖: numpy
import numpy as np
def gm11(x0, steps=2):
x0 = np.asarray(x0, dtype=float)
if x0.ndim != 1 or len(x0) < 4 or not np.isfinite(x0).all() or np.any(x0 <= 0):
raise ValueError('需要至少 4 个有限的正数观测值')
if not isinstance(steps, int) or steps < 0:
raise ValueError('预测步数必须是非负整数')
n = len(x0)
ratio = x0[:-1] / x0[1:]
lo, hi = np.exp(-2 / (n + 1)), np.exp(2 / (n + 1))
if not np.all((ratio > lo) & (ratio < hi)):
raise ValueError('级比未通过;先评估平移变换或改用其他模型')
x1 = np.cumsum(x0)
z1 = 0.5 * (x1[1:] + x1[:-1])
a, b = np.linalg.lstsq(np.column_stack([-z1, np.ones(n-1)]), x0[1:], rcond=None)[0]
k = np.arange(n + steps, dtype=float)
# a 趋于 0 时使用连续极限,避免 b/a 导致除零。
if abs(a) < 1e-10:
x1_hat = x0[0] + b * k
else:
x1_hat = x0[0] * np.exp(-a*k) - b/a * np.expm1(-a*k)
# 第一个观测值是初值,不能与自身作差而变成 0。
return np.r_[x0[0], np.diff(x1_hat)]
print(np.round(gm11([2.8, 3.1, 3.4, 3.7, 4.1], steps=2), 3))
结合孕妇的检测指标与孕周信息,确定无创产前检测的最佳时点,并建立胎儿染色体异常的判定模型。
在经济增长与碳排放约束下预测区域碳排放趋势,规划分阶段减排路径并评估措施组合的效果。