5D Library › 衰老动力学、mTOR-AMPK自噬开关与毒物兴奋效应的生物数学模型 · English
第一章 冈珀茨—梅克姆定律:死亡率曲线的形状
一条两百年前的曲线
1825 年,英国精算师本杰明·冈珀茨在《皇家学会哲学汇刊》上发表了一篇讨论人类死亡率函数与年金计算的论文 (Gompertz 1825)。他提出的假设大意是:一个人抵抗死亡的「能力」在每一段相等的极短时间内损失同样的比例。用今天的语言说,死亡风险(风险率、危险度,hazard)随年龄按指数增长:
其中 是年龄, 是基线水平, 是增长率。35 年后,威廉·梅克姆加上了一个与年龄无关的常数项 ,代表事故、传染病等不随年龄变化的死亡原因 (Makeham 1860):
这就是冈珀茨—梅克姆定律。它不是从生物学推出来的定律,而是一个经验规律:在许多人群与许多时期,成年人的死亡率在对数坐标上大致是一条直线。
证据
芬奇、派克与威滕 1990 年比较了多个物种的死亡率加速,把 称为死亡率翻倍时间(mortality rate doubling time, MRDT),并报告人类成年后的 MRDT 约为 8 年 (Finch et al. 1990)。这个数字常被引用为「成年后死亡率约每 8 年翻一番」。它是一个典型值:不同国家、时期与性别之间有差异,用不同的年龄段拟合也会得到不同的数字。
推导
MRDT 的推导。 令 ,在没有梅克姆项时 ,所以 。MRDT 为 8 年意味着 每年;从 30 岁到 90 岁的 60 年里,死亡率上升 倍。
下面的程序用一组示意参数(MRDT 8 年;50 岁时年死亡率约 0.4%;梅克姆项 0.0005 每年)计算各年龄的风险率与剩余预期寿命,然后在一个合成队列中用最小二乘法从「观测」死亡率反推 MRDT,比较忽略与扣除梅克姆项的结果。
推导
# Gompertz-Makeham hazard mu(t) = A + R exp(alpha t); illustrative: MRDT 8 y, mu(50) ~ 0.004.
# Part 2: refit the MRDT from a synthetic cohort (fixed seed), with and without A.
import math, random
ALPHA = math.log(2) / 8
R = 0.004 / math.exp(ALPHA * 50)
A = 0.0005
mu = lambda t: A + R * math.exp(ALPHA * t)
print(f"alpha = {ALPHA:.4f} per year, MRDT = {math.log(2) / ALPHA:.1f} years, R = {R:.2e}")
print(" age | hazard per year | Makeham share | P(die within the year)")
for t in (20, 30, 50, 70, 90, 100):
print(f" {t:3d} | {mu(t):10.5f} | {A / mu(t):5.1%} | {1 - math.exp(-mu(t)):.4f}")
def remaining(t0, dt=0.01): # remaining life expectancy, integrated to age 120
s, e = 1.0, 0.0
for i in range(int((120 - t0) / dt)):
e += s * dt; s *= math.exp(-mu(t0 + i * dt) * dt)
return e
print("remaining life expectancy: " +
", ".join(f"at {t0}: {remaining(t0):.1f} y" for t0 in (30, 50, 70, 90)))
rng = random.Random(30) # 1,000,000 person-years per year of age
def fit(lo, hi, subtract_A):
xs = list(range(lo, hi + 1))
ys = [math.log(max(rng.gauss(mu(t) * 1e6, math.sqrt(mu(t) * 1e6)) / 1e6
- (A if subtract_A else 0), 1e-7)) for t in xs]
mx, my = sum(xs) / len(xs), sum(ys) / len(ys)
b = sum((x - mx) * (y - my) for x, y in zip(xs, ys)) / sum((x - mx) ** 2 for x in xs)
return math.log(2) / b
for lo, hi in ((30, 90), (50, 90), (30, 60)):
print(f"fit ages {lo}-{hi}: MRDT ignoring A = {fit(lo, hi, False):4.1f} y;"
f" with A subtracted = {fit(lo, hi, True):4.1f} y (true 8.0)")
# alpha = 0.0866 per year, MRDT = 8.0 years, R = 5.26e-05
# age | hazard per year | Makeham share | P(die within the year)
# 20 | 0.00080 | 62.7% | 0.0008
# 30 | 0.00121 | 41.4% | 0.0012
# 50 | 0.00450 | 11.1% | 0.0045
# 70 | 0.02313 | 2.2% | 0.0229
# 90 | 0.12850 | 0.4% | 0.1206
# 100 | 0.30494 | 0.2% | 0.2628
# remaining life expectancy: at 30: 48.7 y, at 50: 30.5 y, at 70: 15.1 y, at 90: 5.2 y
# fit ages 30-90: MRDT ignoring A = 8.7 y; with A subtracted = 8.0 y (true 8.0)
# fit ages 50-90: MRDT ignoring A = 8.2 y; with A subtracted = 8.0 y (true 8.0)
# fit ages 30-60: MRDT ignoring A = 9.7 y; with A subtracted = 8.0 y (true 8.0)在这组参数下,风险率从 30 岁的约 0.0012 每年升到 90 岁的约 0.13 每年,即 90 岁的人一年内死亡的概率约为 12%。20 岁时,与年龄无关的梅克姆项占风险的约 63%;到 50 岁只占约 11%,70 岁以后不到 3%。这说明了一件事:年轻成年人的死亡主要不是「衰老」造成的,而年龄越大,冈珀茨项越占主导。
程序的后半部分是一个方法学提醒:真实 MRDT 为 8.0 年,不扣除梅克姆项对 30–90 岁拟合得到 8.7 年,只用 30–60 岁得到 9.7 年——年轻时不随年龄增长的那部分死亡率把直线「压平」了。文献中 MRDT 的差异一部分来自拟合方法与年龄段,而不全是生物学差异;MRDT 也只是群体风险的描述,不是个体「衰老速度」的直接测量。
为什么是指数?可靠性理论
如果身体里的每一个部件都在「老化」,为什么整体的死亡风险恰好是指数形式,而不是别的形状?工程学的可靠性理论提供了一种解释。
证据
加夫里洛夫与加夫里洛娃 2001 年提出了衰老与长寿的可靠性理论 (Gavrilov and Gavrilova 2001)。模型中的机体由许多串联的「模块」构成(任何一个模块失效,机体就死亡),每个模块又由若干并联的冗余「元件」构成(所有元件都失效,模块才失效)。关键在于:元件本身不老化,它们以恒定的速率随机失效。他们证明,如果机体在出生时就带有大量缺陷(每个模块中能工作的元件数目较少且随机),系统的失效率会近似地按指数上升;随着冗余被耗尽,失效率在极高龄时减速并趋向一个平台。如果机体在出生时完美无缺(每个模块的元件都完好),失效率则按幂函数(韦布尔型)上升,而不是指数。
推导
最简版本的推导。 设机体有 个串联模块,每个元件的失效率为 ,出生时每个模块中能工作的元件数服从均值为 的泊松分布。一个元件活到 的概率是 ,所以模块在 时已经失效的概率是
记 ,在出生时存活的条件下,机体的风险率是
当 很大(冗余充足)时, 对 的斜率约为 ,接近指数增长;当 (冗余耗尽)时,,即高龄平台。程序比较两组参数:A 组模块很多、元件失效率低;B 组模块很少、元件失效率高;并与「出生时完美」的模块对照。
推导
# Reliability model (simplest version, after Gavrilov & Gavrilova 2001): N blocks in series,
# non-ageing elements (rate K) in parallel, Poisson(LAM) working elements at birth.
# Hazard N K x / (e^x - 1), x = LAM e^(-K t); plateau N K. Illustrative parameters.
import math
SETS = {"A: many blocks, low K": (5.3e5, 0.006, 22.0), "B: few blocks, high K": (25, 0.02, 20.0)}
def hazard(t, n, k, lam):
x = lam * math.exp(-k * t)
return n * k * x / math.expm1(x)
def mrdt(t, *p, w=5): # local doubling time of the hazard around age t
return 2 * w * math.log(2) / (math.log(hazard(t + w, *p)) - math.log(hazard(t - w, *p)))
for name, p in SETS.items():
print(f"set {name}: N = {p[0]:.3g}, K = {p[1]}, LAM = {p[2]}; plateau N * K = "
f"{p[0] * p[1]:.3g} per year")
print(" age: " + " ".join(f"{t:7d}" for t in (40, 60, 80, 100, 120)))
print(" hazard: " + " ".join(f"{hazard(t, *p):7.4f}" for t in (40, 60, 80, 100, 120)))
print(" MRDT y: " + " ".join(f"{mrdt(t, *p):7.1f}" for t in (40, 60, 80, 100, 120)))
M, KP, NP = 5, 0.004, 25 # initially perfect: hazard ~ t^(M-1) at first
def hazard_perfect(t):
q = 1 - math.exp(-KP * t)
return NP * M * q ** (M - 1) * KP * math.exp(-KP * t) / (1 - q ** M)
loglog = lambda t: (math.log(hazard_perfect(t + 5) / hazard_perfect(t - 5))
/ math.log((t + 5) / (t - 5)))
print("initially perfect blocks (M = 5), log-log slope at ages 40, 80, 120: " +
", ".join(f"{loglog(t):.2f}" for t in (40, 80, 120)) + " (Weibull-type)")
# set A: many blocks, low K: N = 5.3e+05, K = 0.006, LAM = 22.0; plateau N * K = 3.18e+03 per year
# age: 40 60 80 100 120
# hazard: 0.0017 0.0105 0.0530 0.2191 0.7612
# MRDT y: 7.1 8.0 9.2 10.4 11.9
# set B: few blocks, high K: N = 25, K = 0.02, LAM = 20.0; plateau N * K = 0.5 per year
# age: 40 60 80 100 120
# hazard: 0.0006 0.0073 0.0362 0.0968 0.1766
# MRDT y: 4.3 6.9 11.1 18.2 29.6
# initially perfect blocks (M = 5), log-log slope at ages 40, 80, 120: 3.53, 3.08, 2.67 (Weibull-type)A 组在 40 到 100 岁之间给出了与人类数据相当接近的形状:风险率从 0.0017 升到 0.22,局部 MRDT 从 7.1 年逐渐变为 10.4 年,与「约 8 年」的经验值同一量级,也有轻微的高龄减速。但它的平台高达每年 3,000 以上,只有在远远超出人类寿命的年龄才会出现。B 组的平台是每年 0.5,在人类年龄范围内就清楚地显示出减速,代价是 MRDT 从 40 岁的 4.3 年一路变长到 120 岁的近 30 年,不再像一条直线。出生时完美的模块则给出幂函数型的增长:在对数—对数坐标上的斜率约为 2.7–3.5,而不是指数。
注
对作者原框架的限定。 可靠性理论的价值在于一个概念上的转变:不需要假设每个部件都在老化,冗余的逐渐耗尽本身就能产生指数型的死亡率上升与高龄减速。但本书所用的最简版本不能用同一组参数,同时给出 30–90 岁恒定的 8 年翻倍与人类年龄范围内的平台。加夫里洛夫夫妇的完整讨论包括更多的设定;这里的程序只用来说明机制,不是对人类数据的拟合,也不能用来「测量」一个人还剩多少冗余。
假说 · 尚未验证
多器官储备的耗尽速度预测个体的死亡率加速(尚未确立)。如果冗余耗尽是死亡率指数上升的主要原因,那么在同一个人身上重复测量几种器官的功能储备(例如最大摄氧量、肺功能、肾小球滤过率、握力),这些储备合在一起的下降速度,应当比任何单一指标更能预测此人随后的死亡风险。可以检验的推论是:在纵向队列中,「综合储备斜率」对死亡的预测力显著高于基线水平与单一器官斜率。如果综合斜率不比单一指标更好,或者只有基线水平有预测力而斜率没有,这一假说就被削弱。
高龄平台:真实还是误差?
可靠性理论预言高龄时死亡率会减速甚至进入平台。超高龄老人的年龄记录很容易出错,少量的年龄夸大就足以制造一个假的平台,所以这一现象是否存在争论了很久。
证据
巴尔比等人分析了意大利 2009–2015 年间 105 岁及以上、年龄经过逐一核实的近 4,000 名老人,报告死亡风险在 105 岁以后不再上升,呈现平台 (Barbi et al. 2018)。纽曼 2018 年则用模拟和数据表明,年龄记录中很低比例的随机误差与抽样偏差,就足以在本来按冈珀茨增长的数据中产生高龄减速与平台,并认为已发表的平台可能主要是误差的产物 (Newman 2018)。两种解释目前都有支持者。
对本书来说,这场争论的意义在于:冈珀茨定律在大约 30 到 90 岁之间是可靠的描述,超出这个范围就需要特别小心。第五章把风险比换算为「死亡率曲线上的年数」时,也只在这个范围内使用它。
发病压缩:弗里斯的预言
1980 年,詹姆斯·弗里斯在《新英格兰医学杂志》上提出了一个影响深远的设想 (Fries 1980)。他认为人类的寿命存在一个大致固定的生物学上限,随着早死的减少,生存曲线会越来越「矩形化」:大多数人会活到接近这个上限,然后在较短的时间内死去。如果慢性病与失能的发生年龄推迟得比死亡年龄更快,带病生存的年数就会被压缩到生命的最后一小段。
这个设想有两部分:生存曲线的矩形化与发病被压缩,两者都可以检验。两个时钟相互独立是下面模型的一个简化(实际上患病会提高死亡风险)。
证据
克里明斯与贝尔特兰-桑切斯 2011 年回顾了美国的死亡率与发病趋势 (Crimmins and Beltrán-Sánchez 2011)。1970 年以后,65 岁的人活到 85 岁的机会大约翻了一番;但在 1998–2006 年间,从 20 岁起不患心血管病、癌症与糖尿病的预期年数略有减少,失去基本行动能力的预期年数增加。他们的结论是,美国的数据没有显示发病被压缩;患病率上升的一个重要原因是患病者活得更长了。
推导
一个「双时钟」的玩具模型:一个时钟决定死亡(冈珀茨—梅克姆,与程序一相同),另一个时钟决定第一种致残慢性病的发生(同样的斜率,但提前 12 年)。把两个时钟分别向右平移若干年,计算从 30 岁起的预期寿命、健康预期寿命与带病年数。程序的第二部分计算纯冈珀茨曲线下死亡年龄的离散程度:众数固定在 85 岁,改变 MRDT。
推导
# Two-clock toy model (Fries 1980): death = program 1's curve shifted by s_d; onset of disabling
# disease = same slope, 12 y earlier, shifted by s_m; independent clocks. Part 2: SD of death age.
import math
ALPHA = math.log(2) / 8
R, A = 0.004 / math.exp(ALPHA * 50), 0.0005
mu_d = lambda t, s: A + R * math.exp(ALPHA * (t - s))
mu_m = lambda t, s: R * math.exp(ALPHA * (t - s + 12))
def expectancies(s_d, s_m, dt=0.02): # from age 30: life expectancy, healthy expectancy
sd = sb = 1.0; le = hle = 0.0
for i in range(int(100 / dt)):
t = 30 + i * dt; le += sd * dt; hle += sb * dt
sd *= math.exp(-mu_d(t, s_d) * dt); sb *= math.exp(-(mu_d(t, s_d) + mu_m(t, s_m)) * dt)
return le, hle
base = expectancies(0, 0)
print("scenario (shift of death / onset clock) | LE from 30 | healthy | with morbidity")
for label, sd, sm in (("baseline", 0, 0), ("death delayed 5 y only", 5, 0),
("both delayed 5 y", 5, 5), ("onset delayed 8 y, death 5 y", 5, 8),
("onset delayed 5 y only", 0, 5)):
le, hle = expectancies(sd, sm)
extra = (le - hle) - (base[0] - base[1])
print(f"{label:40s} | {le:8.1f} y | {hle:5.1f} y | {le - hle:5.1f} y ({extra:+.1f})")
def sd_age_at_death(mrdt, dt=0.01): # pure Gompertz, modal age 85, alive at 30
a = math.log(2) / mrdt; r = a * math.exp(-a * 85)
surv = lambda t: math.exp(-(r / a) * (math.exp(a * t) - math.exp(a * 30)))
m0 = m1 = m2 = 0.0
for i in range(int(130 / dt)):
t = 30 + i * dt; p = surv(t) - surv(t + dt); x = t + dt / 2
m0 += p; m1 += p * x; m2 += p * x * x
return math.sqrt(m2 / m0 - (m1 / m0) ** 2), m1 / m0
for m in (8.0, 5.0, 3.0):
sd, mean = sd_age_at_death(m)
print(f"pure Gompertz, mode 85: MRDT {m:3.1f} y -> mean age at death {mean:.1f}, SD {sd:.1f} y")
print(f"asymptotic SD pi / (alpha sqrt 6) = {math.pi / (ALPHA * math.sqrt(6)):.1f} y at MRDT 8 y;"
f" SD 4 y needs MRDT {4 * math.log(2) * math.sqrt(6) / math.pi:.1f} y")
# scenario (shift of death / onset clock) | LE from 30 | healthy | with morbidity
# baseline | 48.7 y | 34.4 y | 14.3 y (+0.0)
# death delayed 5 y only | 53.4 y | 35.4 y | 18.0 y (+3.7)
# both delayed 5 y | 53.4 y | 39.0 y | 14.5 y (+0.2)
# onset delayed 8 y, death 5 y | 53.4 y | 40.9 y | 12.5 y (-1.7)
# onset delayed 5 y only | 48.7 y | 37.6 y | 11.1 y (-3.1)
# pure Gompertz, mode 85: MRDT 8.0 y -> mean age at death 78.9, SD 13.7 y
# pure Gompertz, mode 85: MRDT 5.0 y -> mean age at death 80.9, SD 9.2 y
# pure Gompertz, mode 85: MRDT 3.0 y -> mean age at death 82.5, SD 5.6 y
# asymptotic SD pi / (alpha sqrt 6) = 14.8 y at MRDT 8 y; SD 4 y needs MRDT 2.2 y模型给出了弗里斯论证的逻辑:只推迟死亡 5 年、不推迟发病,带病年数从 14.3 年增加到 18.0 年(发病扩张);两者都推迟 5 年,带病年数几乎不变;只有当发病推迟得比死亡更多(8 年对 5 年)时,带病年数才减少 1.7 年(发病压缩)。所以「延长寿命」与「延长健康寿命」是两个不同的目标,不能互相替代。
第二部分检验矩形化。在纯冈珀茨曲线下,死亡年龄的标准差主要由 决定,渐近值为 :MRDT 为 8 年时约 14.8 年(从 30 岁算起为 13.7 年)。弗里斯设想的「死亡年龄集中在 85 岁左右、标准差约 4 年」需要约 2.2 年的 MRDT,比观测到的 8 年快得多。换句话说,只要死亡率的年龄斜率不变,把整条曲线向右推,不会让死亡变得更集中;要使生存曲线明显矩形化,必须改变曲线的斜率,而不只是位置。
本章小结
冈珀茨—梅克姆定律 是对成年人死亡率的稳健经验描述,人类的 MRDT 约为 8 年,但它是典型值而不是常数,估计值还依赖拟合方法。可靠性理论说明,不老化的元件加上冗余的耗尽,就能产生指数型上升与高龄减速,但最简版本只是定性解释;高龄平台是真实现象还是数据误差仍有争论。弗里斯的发病压缩是一个可检验的假说,美国的数据没有支持它;在模型中,只有发病推迟得比死亡更快才会压缩,而要让死亡年龄更集中,必须改变死亡率曲线的斜率。下一章从群体曲线走进细胞:营养感应通路如何在合成与回收之间切换。
参考文献
Fan, Y. (2026). Ageing Kinetics, the mTOR-AMPK Autophagy Switch and Hormesis: From the Gompertz Mortality Law and Mitohormesis to Cardiorespiratory Fitness Epidemiology, Read Beside Classical Chinese Longevity Philosophy [衰老动力学、mTOR-AMPK自噬开关与毒物兴奋效应的生物数学模型] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23770092 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).