Formulas and parameters

Every equation the tool computes, in the report’s notation, with defaults and sources

1. The report’s model

Expected value of the world (report equation 1)

A world \(w\) faces per-period extinction risk \(r_t\) and, if it survives period \(t\), realizes value \(v_t\). With periods \(t = 1, \ldots, T\):

\[ \mathbb{E}(w) = \sum_{t=1}^{T} \left[ \left( \prod_{j=1}^{t} (1 - r_j) \right) v_t \right] = \sum_{t=1}^{T} S_t v_t, \qquad S_t \equiv \prod_{j \le t} (1 - r_j). \]

Engine: survival(r), expectedValue(r, v). The function also returns the truncated sums \(\mathbb{E}_H(w) = \sum_{t \le H} S_t v_t\) for every horizon \(H \le T\), which the horizon charts plot.

Mitigation (paper section 2, “persistence”)

An action \(M\) with efficacy \(f\) and persistence \(P\) changes the risk path to \[ r'_t = (1 - f)\, r_t \quad \text{for } t_0 \le t < t_0 + P, \qquad r'_t = r_t \text{ otherwise}, \] with \(t_0 = 1\) in the paper (no delay). Its value is the counterfactual difference \[ \mathbb{E}(M) = \mathbb{E}(w') - \mathbb{E}(w). \] The paper allows \(f \le 0\) in principle (p. 11) but analyses only \(f \in (0, 1)\). Engine: mitigateRisk(r, {f, start, P}).

A useful identity (Thorstad; verified in the tests): with constant risk and value and \(P = 1\), \(\mathbb{E}(M) = f v_c\) exactly, whatever the risk level.

Value cases (paper Table 1 and section 11)

Case Paper (centuries) Tool (years, \(\alpha = 1/100\))
V0 constant \(v_c\) \(1\)
V1 linear \(i\,v_c\) \((\alpha t + 1 - \alpha)\)
V2 quadratic \(i^2 v_c\) \((\alpha t + 1 - \alpha)^2\)
V3 cubic \(i^3 v_c\) \((\alpha t + 1 - \alpha)^3\)
V4 logistic \(c / (1 + \frac{c-s}{s} e^{-\gamma t})\) same, with \(s\) chosen so that \(v_1 = 1\)

\(v_c = 1\) throughout. The adjustment \(v(t) = (\alpha t + (1-\alpha)) v_c\) (paper section 11) makes the year-indexed sequence pass through the century-indexed one at \(t = 1, 101, 201, \ldots\). Logistic defaults from the notebook: \(c = 10^6\) (“what obtains after 10,000 years of cubic growth”), \(\gamma = 0.03\) per year. The paper’s equation 6 gives a different, Weibull-like logistic form \(v_t = v_c(c(1 - e^{-(t/a)^b}) + 1)\); it is used only for Figure 2 and is not implemented here.

Risk cases (paper sections 3 and 4)

Case Definition Defaults
Constant \(r_t = r_c\) \(r_c = 0.0022289477\)
Time of Perils \(r_t = r_{high}\) for \(t \le L\), else \(r_{low}\) \(L = 100\), \(r_{high} = 0.0022289477\), \(r_{low} = 0.0001\)
Great Filters \(F\) eras of \(r_{high}\) (length \(\ell_d\)) alternating with eras of \(r_{low}\) (length \(\ell_s\)), last era open-ended \(F = 2\), \(\ell = (100, 500, 100, T - 700)\)
Exponential decay \(r_t = r_0 e^{-\lambda (t-1)} + r_\infty\) \(r_0 = 0.0022289477\), \(\lambda = 10^{-4}\), \(r_\infty = 10^{-9}\)

The per-year constants come from per-century probabilities: \(1 - 0.8^{1/100}\) (20% per century) and, for the low value, \(0.0001\) taken directly (paper footnote 17 notes \((1 - 0.0001)^{100} \approx 0.990\)).

Convergence (paper section 5)

Lemma 1: if \(\lim r_t\) exists and is positive, \(\mathbb{E}(w)\) converges whenever \(\lim |v_{t+1}/v_t| \le 1\), which holds for all polynomial and logistic value paths. The tool does not need the infinite-horizon result; it always sums to a finite \(T\) and reports what is left out (next section). The ratio-test quantity is shown as a note when uncapped exponential value is selected: the series converges as \(T \to \infty\) only if \((1 + g)(1 - r_\infty) < 1\).

Closed forms under constant risk (paper Table 2, appendix 12)

With \(q = 1 - r_c\) and \(L_n = \sum_{t \ge 1} t^n q^t\) (polylogarithms \(\mathrm{Li}_{-n}(q)\)): \(L_0 = q/r_c\), \(L_1 = q/r_c^2\), \(L_2 = q(2 - r_c)/r_c^3\), \(L_3 = q(1 + 4q + q^2)/r_c^4\). Then, for \(v_t = (\alpha t + b)^n\) with \(b = 1 - \alpha\), \[ \mathbb{E}(w) = v_c \sum_{k=0}^{n} \binom{n}{k} \alpha^k b^{\,n-k} L_k . \] Engine: closedFormConstantRisk(type, r_c, alpha). Checked against the numeric sum to \(10^{-9}\) in the tests.

2. Beyond the paper

Risk floor and truncation error (switch 1)

With the floor on, \(r_t \leftarrow \max(r_t, c)\). Since \(S_t \le (1 - c)^t\), the survival probability is below \(\varepsilon\) after \(H_\varepsilon = \ln \varepsilon / \ln(1 - c)\) years (approximateSupport(c, eps)). For any horizon \(H\) the value left out satisfies \[ \sum_{t > H} S_t v_t \;\le\; \sum_{t > H} (1 - c)^t v_t , \] which has a closed form for polynomial value (tailBound): writing \(q = 1 - c\) and \(A_0 = 1/(1 - q)\), \(A_j = \mathrm{Li}_{-j}(q)\), \[ \sum_{t > H} q^t t^k = q^{H+1} \sum_{j=0}^{k} \binom{k}{j} (H + 1)^{k-j} A_j , \] and the polynomial \((\alpha t + 1 - \alpha)^n\) is expanded binomially. For logistic and hard-capped value the bound uses the cap times the geometric tail; for uncapped exponential value it is \(\sum_{t>H} (q(1+g))^t / (1+g)\) when \(q(1+g) < 1\) and infinite otherwise. When the floor is off, the tool uses the smallest risk in the (mitigated) path as \(c\), which is still a valid bound. The horizon table reports, for \(H \in \{100, 500, 1000, 10^4, 10^5\}\), the share of \(\mathbb{E}(w)\) and of \(\mathbb{E}(M)\) realized within \(H\) and beyond \(H\) (relative to the total at \(T\)), and the bound on what lies beyond \(T\) itself.

Sign-uncertain mitigation: Monte Carlo (switch 2)

Draws \(i = 1..n\) with a seeded Mulberry32 generator:

  • \(f_i \sim \mathrm{Normal}(\mu_f, \sigma_f)\), clipped at 1. Negative draws raise risk during the window.
  • With probability \(p_b\), a delayed backfire: \(r_t \leftarrow (1 + b_i) r_t\) for \(t \in [t_b, t_b + P_b)\), with \(\ln b_i \sim \mathrm{Normal}(\ln b_{med}, \sigma_b)\).
  • Optional rebound multiplier \(m_i = 1 + \beta f_i P / D\) (or \(1 + \beta f_i\) if permanent) on the \(D\) years after the window.

Each draw’s \(\mathbb{E}(M)\) is exact. Because \(S'_t / S_t = \prod_{j \le t} (1 - r'_j)/(1 - r_j)\) only changes inside the modified windows, \(\mathbb{E}(w')\) is a sum of window terms (computed per draw) plus constants times precomputed tail sums. With rebound on, the post-window sums are precomputed on 65 evenly spaced levels of \(m\) and interpolated geometrically; the tests check agreement with brute force to \(10^{-4}\) (observed about \(4 \times 10^{-6}\)). Reported: mean, median, p5, p25, p75, p95, \(\Pr[\mathbb{E}(M) < 0]\), \(\Pr[f < 0]\). With fluctuating value, 16 seeded value paths are cycled through the draws.

Value growth alternatives

  • Polynomial of order \(n\) (any real \(n \ge 0\)): \((\alpha t + 1 - \alpha)^n\).
  • Exponential: \(v_t = (1 + g)^{t-1}\); may fail to converge.
  • Hard cap: \(v_t = \min((1 + g)^{t-1}, \bar v)\).
  • Fluctuating: \(v_t = \bar v_t \exp(x_t - \tfrac{1}{2}\mathrm{Var}\,x)\) with \(x_t = \rho x_{t-1} + \sigma \epsilon_t\), \(x_0\) drawn from the stationary distribution, so \(\mathbb{E}[v_t] = \bar v_t\) for the chosen base path \(\bar v\).

Action-dependent risk: rebound (switch 3)

After the window (years \(P + 1\) to \(P + D\)), \(r_t \leftarrow r_t (1 + \beta f P / D)\); if permanent, \(r_t \leftarrow r_t (1 + \beta f)\) for every later year. \(\beta = 1, D = P\) adds back exactly the proportional risk-years removed; \(\beta < 0\) is a virtuous cycle. Engine: reboundMultiplier, mitigateRisk(r, m, rebound).

Time-bucket discounting (switch 4)

Let \(\Delta_t = S'_t v_t - S_t v_t\) be the mitigation’s contribution in year \(t\) (so \(\sum_t \Delta_t = \mathbb{E}(M)\)). Buckets \([0,5], (5,10], (10,20], (20,100], (100,500], (500, T]\) with factors \(d_k\); the discounted value is \(\sum_k d_k \sum_{t \in k} \Delta_t\). Defaults \(d = (1.00, 0.95, 0.85, 0.70, 0.50, 0.10)\) from the Donor Compass walkthrough. Engine: bucketValue(diff, edges, factors).

Sensitivity

tornado(params) halves and doubles each active input one at a time and reports \(\log_{10}(\mathbb{E}(M)_{\text{changed}} / \mathbb{E}(M)_{\text{now}})\). Horizon is varied as \(T/10\) and \(2T\). The logistic cap is varied through its headroom above today’s value, \(c - 1\), divided or multiplied by 10, so that small caps such as 1.6 stay above 1.

Presets

The links at the top of the model page set these values; everything else stays at the report’s defaults.

Preset Settings
Report default Time of Perils, constant value, \(f = 0.0001\), \(P = 5\), \(T = 120{,}000\)
Report, cubic value as above, cubic value
Report figures as above, \(f = 0.5\)
RP 2026 central values Time of Perils at 20% per century for 100 years; low risk 0.0833% per century (\(8.3 \times 10^{-6}\) a year, an expected 120,000 more years); logistic value with cap 1.6 and growth 1% a year; \(f = 0.0001\); effect starting in year 4 and lasting \(P = 11\) years; \(T = 400{,}000\)

The RP preset approximates the central values in Rethink Priorities’ GCR fund write-up (working draft, read 12 October 2026). RP’s risk peaks in about year 17 and stays elevated for about 90 years; the preset uses the report’s 100-year step instead. It leaves out RP’s space-settlement branch, its parameter uncertainty, its split of risk across causes and its counterfactual adjustments. See Departures.

3. Parameter table

Symbol Meaning Default (paper) Where in the paper / notebook UI
\(T\) horizon (years) 120,000 on the model page (the PDF’s stated cap); per cell on the replication page footnote 27; notebook Ts_experiment select
\(r_{high}\) high per-year risk \(1 - 0.8^{1/100} = 0.0022289477\) footnote 16 slider, % per century
\(r_{low}\) low per-year risk 0.0001 footnote 17 slider, % per century
\(L\) length of Time of Perils 100 notebook top slider
\(F, \ell_d, \ell_s\) filters, filter length, safe length 2, 100, 500 section 3 example sliders
\(\lambda, r_\infty\) decay rate and floor \(10^{-4}\), \(10^{-9}\) notebook generate_risk_vector log sliders
\(\alpha\) value time scale 0.01 section 11 select
\(c, \gamma\) logistic cap and rate \(10^6\), 0.03 notebook generate_value_vector sliders
\(f\) efficacy 0.0001 (tables), 0.5 (figures) p. 29 select
\(P\) persistence 5 Figure 6; Table 3 uses 1, 5, 50, 500, 2000 select
\(t_0\) window start 1 section 2.2 (“without delay”) slider
\(c\) (floor) minimum per-year risk off; \(10^{-4}\) when on evaluation toggle + slider
\(\mu_f, \sigma_f\) distribution of \(f\) off; mean \(f\), sd $= $ mean evaluation toggle + sliders
\(p_b, b_{med}, \sigma_b, t_b, P_b\) backfire 0.1, \(\mu_f\), 0.5, 6, 5 evaluation sliders
\(\beta, D\) rebound off; 1, 5 evaluation toggle + sliders
\(d_k\) bucket factors off; 1, 0.95, 0.85, 0.70, 0.50, 0.10 Donor Compass walkthrough toggle + text

4. Numerical notes

  • All sums run forward in double precision with \(S_t\) updated multiplicatively, exactly as in the notebook. \(\mathbb{E}(M)\) is a difference of two sums of similar size; at \(f = 10^{-4}\) that costs about \(10^{-8}\) relative precision, which is why the tests compare to the notebook at \(10^{-8}\) and not tighter.
  • Beyond roughly \(t = 320{,}000\) years of constant risk 0.0022, \(S_t\) underflows the smallest normal double; the notebook discusses the same effect. The tool caps \(T\) at 400,000.
  • Plots downsample the \(T\)-length series to about 400 log-spaced points plus the first 300 years.
  • The scenario grid, persistence curve, sensitivity chart and Monte Carlo wait until the inputs have been still for 0.3 seconds, so dragging a slider stays smooth. The headline numbers update at once.
  • Headline numbers are shown to three significant figures; hovering shows ten. The extra digits are for checking against the report, not a claim of precision.