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.