5D Library › Ageing Kinetics, the mTOR-AMPK Autophagy Switch and Hormesis · 中文

Chapter 1 The Gompertz–Makeham Law: the Shape of the Mortality Curve

A curve two centuries old

In 1825 the English actuary Benjamin Gompertz published a paper in the Philosophical Transactions of the Royal Society on the function expressing human mortality and on the valuation of life annuities (Gompertz 1825). His assumption was, in essence, that a person’s “power to oppose destruction” loses an equal proportion of itself in each equal, very short interval of time. In today’s language, the risk of death (the hazard) grows exponentially with age:

μ(t)=Reαt,\mu(t) = R\,e^{\alpha t},

where tt is age, RR a baseline level and α\alpha the rate of increase. Thirty-five years later William Makeham added a constant term AA that does not depend on age, standing for causes of death such as accidents and infections that do not change with age (Makeham 1860):

μ(t)=A+Reαt.\mu(t) = A + R\,e^{\alpha t}.

This is the Gompertz–Makeham law. It is not derived from biology; it is an empirical regularity. In many populations and many periods, adult mortality is close to a straight line on a logarithmic scale.

Evidence

Finch, Pike and Witten (1990) compared the acceleration of mortality across species, calling ln⁡2/α\ln 2/\alpha the mortality rate doubling time (MRDT), and reported an adult human MRDT of about 8 years (Finch et al. 1990). The figure is often quoted as “after adulthood, the death rate doubles about every 8 years”. It is a typical value: it differs between countries, periods and the sexes, and fitting different age ranges gives different numbers.

Calculation

Deriving the MRDT. Setting μ(t+D)=2μ(t)\mu(t + D) = 2\mu(t) without a Makeham term gives Reα(t+D)=2ReαtR e^{\alpha(t + D)} = 2 R e^{\alpha t}, so D=ln⁡2/αD = \ln 2/\alpha. An MRDT of 8 years means α=ln⁡2/8≈0.087\alpha = \ln 2/8 \approx 0.087 per year; over the 60 years from age 30 to 90, the death rate rises by a factor of 260/8≈1802^{60/8} \approx 180.

The program below uses illustrative parameters (MRDT 8 years; an annual death rate of about 0.4 % at age 50; a Makeham term of 0.0005 per year) to compute the hazard and remaining life expectancy at each age. It then recovers the MRDT from “observed” death rates in a synthetic cohort by least squares, with and without subtracting the Makeham term.

Calculation

# 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)

With these parameters the hazard rises from about 0.0012 per year at age 30 to about 0.13 per year at 90: a 90-year-old has about a 12 % chance of dying within the year. At age 20 the age-independent Makeham term accounts for about 63 % of the hazard; by 50 it is about 11 %, and after 70 less than 3 %. The point is that deaths of young adults are mostly not caused by “ageing”, while the Gompertz term dominates more and more with age.

The second half of the program is a methodological warning. The true MRDT is 8.0 years; fitting ages 30–90 without subtracting the Makeham term gives 8.7 years, and ages 30–60 alone 9.7, because the age-independent part of mortality flattens the line. Part of the spread in published MRDTs comes from fitting choices, not biology; and the MRDT describes population risk, not an individual’s “speed of ageing”.

Why exponential? Reliability theory

If every part of the body “ages”, why should the overall risk of death be exponential rather than some other shape? Reliability theory from engineering offers an explanation.

Evidence

Gavrilov and Gavrilova (2001) proposed a reliability theory of ageing and longevity (Gavrilov and Gavrilova 2001). The organism in their model consists of many “blocks” in series (the organism dies when any block fails), each made of redundant “elements” in parallel (a block fails only when all its elements have failed). The key point is that the elements themselves do not age: they fail at random at a constant rate. They showed that if organisms start life with many defects (a small, random number of working elements per block), the failure rate of the system rises approximately exponentially; as redundancy is used up, the failure rate decelerates at extreme ages and tends to a plateau. If organisms start out perfect (every element in every block working), the failure rate instead rises as a power of age (Weibull-type), not exponentially.

Calculation

Derivation of the simplest version. Let the organism have NN blocks in series, each element fail at rate KK, and the number of working elements per block at birth be Poisson with mean λ\lambda. An element survives to tt with probability e−Kte^{-Kt}, so the probability that a block has failed by tt is

∑ie−λλii!(1−e−Kt)i=e−λe−Kt.\sum_{i} \frac{e^{-\lambda}\lambda^i}{i!}\left(1 – e^{-Kt}\right)^i = e^{-\lambda e^{-Kt}}.

Writing x=λe−Ktx = \lambda e^{-Kt} and conditioning on being alive at birth, the organism’s hazard is

μ(t)=NKxex−1.\mu(t) = N K \frac{x}{e^{x} – 1}.

When xx is large (plenty of redundancy), the slope of ln⁡μ\ln \mu in tt is about K(x−1)K(x – 1), close to exponential growth; as x→0x \to 0 (redundancy exhausted), μ→NK\mu \to NK, the late-life plateau. The program compares two parameter sets, A with many blocks and a low element failure rate and B with few blocks and a high one, and contrasts them with blocks that start out perfect.

Calculation

# 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)
Left: the Gompertz–Makeham hazard (illustrative parameters, MRDT 8 years); solid line the full model, dashed the Gompertz term, dotted the Makeham constant. Right: two parameter sets of the simplest reliability model against a pure Gompertz curve; set A has an MRDT of about 7–10 years between 40 and 90 but a plateau far beyond human lifespans; set B has a plateau of 0.5 per year, but its MRDT lengthens quickly with age.

Between ages 40 and 100, set A gives a shape quite close to human data: the hazard rises from 0.0017 to 0.22, and the local MRDT drifts from 7.1 to 10.4 years, of the same order as the empirical “about 8 years”, with a slight late-life deceleration. Its plateau, however, is above 3,000 per year and appears only at ages far beyond any human lifespan. Set B has a plateau of 0.5 per year and shows clear deceleration within human ages, at the price of an MRDT that lengthens from 4.3 years at 40 to almost 30 years at 120: no longer anything like a straight line. Blocks that start out perfect give power-law growth, with slopes of about 2.7–3.5 on log–log axes rather than exponential growth.

Note

A qualification of the author’s framework. The value of reliability theory lies in a conceptual shift: one need not assume that every part ages; the gradual exhaustion of redundancy can by itself produce an exponential rise in mortality and late-life deceleration. But the simplest version used here cannot, with a single parameter set, give both a constant 8-year doubling between 30 and 90 and a plateau within the human age range. The Gavrilovs’ full treatment includes further features; the program here illustrates the mechanism only, is not a fit to human data, and cannot be used to “measure” how much redundancy a person has left.

Hypothesis · not established

The rate at which multi-organ reserves are exhausted predicts an individual’s mortality acceleration (not established). If the exhaustion of redundancy is the main reason mortality rises exponentially, then measuring several organ reserves repeatedly in the same person (for example maximal oxygen uptake, lung function, glomerular filtration rate and grip strength), the combined rate of decline of these reserves should predict that person’s later risk of death better than any single measure. The testable consequence is that, in longitudinal cohorts, a “composite reserve slope” predicts death significantly better than baseline levels and single-organ slopes. If the composite slope does no better than single measures, or only baseline levels and not slopes predict death, the hypothesis is weakened.

The late-life plateau: real or error?

Reliability theory predicts that mortality decelerates, and may level off, at very high ages. Whether this happens has long been debated, because the ages of the very old are easily misrecorded and a little age exaggeration can manufacture a spurious plateau.

Evidence

Barbi and colleagues analysed nearly 4,000 people in Italy aged 105 and over between 2009 and 2015, with every age individually validated, and reported that the risk of death stops rising after 105 and forms a plateau (Barbi et al. 2018). Newman (2018) used simulations and data to show that very low rates of random error in age records, together with sampling biases, are enough to produce late-life deceleration and plateaus in data that would otherwise follow Gompertz growth, and argued that published plateaus may be mainly artefacts (Newman 2018). Both interpretations currently have supporters.

For this book the lesson of the debate is that the Gompertz law is a reliable description between roughly 30 and 90 years of age, and particular care is needed outside that range. When Chapter 5 converts hazard ratios into “years on the mortality curve”, it uses the law only within that range.

The compression of morbidity: Fries’s prediction

In 1980 James Fries put forward an influential idea in the New England Journal of Medicine (Fries 1980). He argued that human life has a roughly fixed biological limit and that, as premature deaths decline, the survival curve becomes ever more “rectangular”: most people live close to the limit and then die over a short period. If the onset of chronic disease and disability is postponed faster than death, the years lived with illness are compressed into a short final stretch of life.

The idea has two parts, the rectangularisation of the survival curve and the compression of morbidity, and both can be tested. The model below simplifies by treating the two clocks as independent (in reality disease raises the risk of death).

Evidence

Crimmins and Beltrán-Sánchez (2011) reviewed trends in mortality and morbidity in the United States (Crimmins and Beltrán-Sánchez 2011). Since 1970 the chance that a 65-year-old reaches 85 has roughly doubled; but between 1998 and 2006, life expectancy from age 20 free of cardiovascular disease, cancer and diabetes fell slightly, and expected years without basic mobility rose. They concluded that US data show no compression of morbidity, and that rising prevalence partly reflects people with disease surviving longer.

Calculation

A “two-clock” toy model: one clock governs death (Gompertz–Makeham, as in Program 1), the other the onset of the first disabling chronic disease (the same slope but 12 years earlier). Shifting each clock to the right by some years, the program computes life expectancy from age 30, healthy life expectancy and years with morbidity. Its second part computes the spread of the age at death under a pure Gompertz curve with the mode fixed at 85 while the MRDT varies.

Calculation

# 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

The model reproduces the logic of Fries’s argument. Postponing death by 5 years without postponing onset raises the years with morbidity from 14.3 to 18.0 (expansion of morbidity); postponing both by 5 years leaves them almost unchanged; only when onset is postponed by more than death (8 years against 5) do the years with morbidity fall, by 1.7 years (compression). “Extending life” and “extending healthy life” are therefore different goals, and one cannot stand in for the other.

The second part tests rectangularisation. Under a pure Gompertz curve, the standard deviation of the age at death is set mainly by α\alpha, with the asymptotic value π/(α6)\pi/(\alpha\sqrt{6}): about 14.8 years for an MRDT of 8 years (13.7 years counting from age 30). Fries’s picture of deaths clustered around 85 with a standard deviation of about 4 years would require an MRDT of about 2.2 years, far faster than the observed 8. In other words, as long as the age slope of mortality stays the same, pushing the whole curve to the right does not make deaths more concentrated; markedly rectangularising the survival curve requires a change in the curve’s slope, not just its position.

Chapter summary

The Gompertz–Makeham law μ(t)=A+Reαt\mu(t) = A + R e^{\alpha t} is a robust empirical description of adult mortality. The human MRDT is about 8 years, but this is a typical value rather than a constant, and estimates depend on fitting choices. Reliability theory shows that non-ageing elements plus the exhaustion of redundancy can produce an exponential rise and late-life deceleration, but its simplest version is a qualitative explanation only; whether the late-life plateau is real or an artefact of data errors remains disputed. Fries’s compression of morbidity is a testable hypothesis that US data have not supported; in the model, morbidity is compressed only if onset is postponed faster than death, and making deaths more concentrated requires changing the slope of the mortality curve. The next chapter moves from population curves to cells: how nutrient-sensing pathways switch between building and recycling.

References

Barbi, Elisabetta, Francesco Lagona, Marco Marsili, James W. Vaupel, and Kenneth W. Wachter. 2018. “The Plateau of Human Mortality: Demography of Longevity Pioneers.” Science 360 (6396): 1459–61. https://doi.org/10.1126/science.aat3119.
Crimmins, Eileen M., and Hiram Beltrán-Sánchez. 2011. “Mortality and Morbidity Trends: Is There Compression of Morbidity?” The Journals of Gerontology, Series B: Psychological Sciences and Social Sciences 66B (1): 75–86. https://doi.org/10.1093/geronb/gbq088.
Finch, Caleb E., Malcolm C. Pike, and Matthew Witten. 1990. “Slow Mortality Rate Accelerations During Aging in Some Animals Approximate That of Humans.” Science 249 (4971): 902–5. https://doi.org/10.1126/science.2392680.
Fries, James F. 1980. “Aging, Natural Death, and the Compression of Morbidity.” New England Journal of Medicine 303 (3): 130–35. https://doi.org/10.1056/NEJM198007173030304.
Gavrilov, Leonid A., and Natalia S. Gavrilova. 2001. “The Reliability Theory of Aging and Longevity.” Journal of Theoretical Biology 213 (4): 527–45. https://doi.org/10.1006/jtbi.2001.2430.
Gompertz, Benjamin. 1825. “On the Nature of the Function Expressive of the Law of Human Mortality, and on a New Mode of Determining the Value of Life Contingencies.” Philosophical Transactions of the Royal Society of London 115: 513–83. https://doi.org/10.1098/rstl.1825.0026.
Makeham, William M. 1860. “On the Law of Mortality and the Construction of Annuity Tables.” The Assurance Magazine, and Journal of the Institute of Actuaries 8 (6): 301–10. https://doi.org/10.1017/S204616580000126X.
Newman, Saul Justin. 2018. “Errors as a Primary Cause of Late-Life Mortality Deceleration and Plateaus.” PLoS Biology 16 (12): e2006776. https://doi.org/10.1371/journal.pbio.2006776.

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).