Statistical methods¶
Pre-registered analysis plan, written before the dataset is frozen.
Adapted from analysis_methods.md in the project notebook.
1 — Core question and primary test¶
Does the mean temperature anomaly on uprising days exceed zero, after matching each event to its local climate?
Because the table is small (~100 events), heavy-tailed, and likely
non-normal, we do not rely on a one-sample t-test. Instead we run two
complementary tests on anomaly_C = day_temp_C − decade_mean_temp_C:
Wilcoxon signed-rank (one-sided, H1: median anomaly > 0). Robust to outliers, makes no normality assumption.
Binomial sign test on
P(anomaly_C > 0) > 0.5. Discards magnitude entirely and is therefore the most conservative; immune to era-dependent measurement precision.
We report both. Agreement strengthens the claim; disagreement (e.g. signed-rank significant, sign test not) implies a few large positive outliers are driving the result and the conclusion should be tempered.
A bootstrap 95 % CI on the mean anomaly (10 000 resamples) is the headline effect-size estimate.
2 — Why a naive t-test is insufficient¶
Selection bias on famous events. Events ended up in the table because historians recorded them; events without a surviving weather record (more common in cold/rainy weeks when fewer observers were outside writing diaries?) are missing. The sample is not random.
Heteroscedasticity by era. A 2010 station reading has ~0.1 °C uncertainty; an 1830 reconstruction has ~1–2 °C uncertainty. Equal-weighting treats these as equally informative; a rank-based test is far less distorted.
Reference-period bias. The naïve “decade-mean” sliding upward over time biases the test against H1 for recent events and toward H1 for early events. We replace it with a period-correct ±5-year same-station baseline (see Pipeline guide).
3 — Deconfounding the outdoor-opportunity confound¶
The main alternative hypothesis is not “no effect” — it is “uprisings happen when people are outside, and people are outside when it’s warm, so a positive anomaly is mechanically expected even with zero aggression effect.”
Six strategies, in order of increasing analytic power:
(a) Matched control days — H2, the headline¶
For each event (station L, date D), draw the control set from the same station, same calendar month, ± 5 years, excluding the event window ± 7 days. Event-day anomalies are compared against the pooled control distribution via conditional logistic regression with an event-stratum random effect (case-crossover design, Lee et al. 2023).
(b) Non-violent crowd events as a parallel control¶
Compile a parallel list of large peaceful outdoor gatherings (World Cup finals, Olympic opening ceremonies, royal jubilees, May Day rallies, papal Masses, Woodstock 1969). If these also occur on positive-anomaly days, the signal is opportunity, not aggression. Phase 2 work.
(c) Indoor violence as a within-domain control¶
For the post-1970 subset, compare anomaly distributions for outdoor uprisings vs. prison riots, ER assault admissions, domestic-violence call volumes. Heilmann, Kahn & Tang 2021 is the precedent.
(d) Day-of-event vs surrounding days — H3¶
Compute mean anomaly for t-7, t-2, t-1, t, t+1, t+2, t+7. A flat profile across the week argues for “hot summer” rather than “hot day triggers riot.”
(e) Daylight-hours covariate¶
Solar geometry → hours of daylight at event latitude and date. Included in the conditional-logit model. If the anomaly effect survives daylight control, heat is doing work beyond “longer days = more opportunity.”
(f) Era and regional fixed effects¶
anomaly_i = α_era + α_region + β · event_dummy + γ · daylight_hours + ε_i
event_dummy is 1 for uprising days, 0 for matched control days. β is
the heat-aggression coefficient net of secular warming, regional climate,
and daylight.
4 — Pre-registered hypotheses¶
H1.
mean(anomaly | event) > 0. Wilcoxon + sign on event rows.H2.
mean(anomaly | event) > mean(anomaly | matched control). Headline. Conditional logit + stratified permutation.H3.
anomaly_t > anomaly_{t±7}. Within-event paired test.
H2 is the headline. H1 alone cannot distinguish heat from opportunity. H3 is the secondary within-event check.
5 — Multiple comparisons¶
We pre-register the H1 / H2 / H3 tests as a single family of 5 actual p-values (Wilcoxon, sign, conditional-logit, permutation, contrast; the bootstrap CI and σ-rescaling are effect-size descriptors, not hypothesis tests).
H2 conditional logit is the single confirmatory test, reported at uncorrected α = 0.05. Its result is the headline scientific claim and is the only test on which a null finding would refute the hypothesis on its own.
For the auxiliary battery (the other four), we report both:
Benjamini–Hochberg FDR-adjusted q-values (
α = 0.05). BH is the preferred adjustment for our battery because the tests are highly correlated (same underlying anomalies, same direction); Bonferroni assumes worst-case independence and is conservative here. BH is also the standard in the climate-and-conflict literature (Hsiang/Burke/Miguel) and behavioural-neuroscience studies of heat and aggression (Heilmann/Kahn/Tang 2021).Bonferroni-adjusted p-values (
α = 0.05, threshold = α / k = 0.010 for k = 5) as a conservative reference for sceptical reviewers.
H2 conditional logit clears every correction; the choice of correction only matters for the auxiliary tests. We do not perform additional correction for the σ-rescaling or bootstrap CI because those are descriptive estimators, not hypothesis tests.
6 — Power¶
With N = 50 events, anomaly SD ~3 °C, α = 0.05, one-sample two-sided t: detectable effect size d = 0.4 at 80 % power, i.e. a true mean anomaly of ~1.2 °C. Effects smaller than ~1 °C on the mean will not be reliably detected. N = 100 with verified daily temperatures drops the detectable effect to about 0.85 °C.
7 — Limitations¶
Small N (~100). CIs will be wide.
Selection on famous events — no statistical fix; only the peaceful-crowd parallel control (§3b) addresses it.
Pre-1900 daily temperatures are reconstructions with ~1–2 °C uncertainty. We do not propagate measurement error formally; we mitigate by using rank-based tests.
“Uprising” is heterogeneous — peasant revolts, urban riots, military coups, color revolutions. Sensitivity analyses drop coups (which are planned indoors and weather-insensitive by mechanism).
One-sided tests are pre-registered. If the observed mean anomaly is negative, we report it descriptively but do not flip the test.
7b — Data-coverage limitations (intrinsic missingness)¶
The tiered cascade (thermostrife.lookup.resolve_event_anomaly)
resolves 104 / 112 events. The 8 events that remain
unverifiable after Tiers 1–4 are all pre-1806:
Event |
Date |
Why unresolved |
|---|---|---|
Storming of the Bastille |
1789-07-14 |
pre-1806; outside 20CRv3 |
Women’s March on Versailles |
1789-10-05 |
pre-1806; outside 20CRv3 |
Bois Caïman / Haitian Revolt |
1791-08-22 |
pre-1806; tropical, no station record |
Storming of the Tuileries |
1792-08-10 |
pre-1806; outside 20CRv3 |
September Massacres |
1792-09-02 |
pre-1806; outside 20CRv3 |
Reign of Terror peak |
1794-06-10 |
pre-1806; outside 20CRv3 |
Whiskey Rebellion (Bower Hill) |
1794-07-16 |
pre-1806; no Pittsburgh record |
Gabriel’s Rebellion |
1800-08-30 |
pre-1806; no Richmond record |
Sub-monthly historical climate reconstruction for these dates does exist in the historical-climatology literature but is not currently in a form suitable for automated pipelines:
Rousseau, D. (2009) “Les températures mensuelles en région parisienne de 1676 à 2008.” La Météorologie 67, 43–55. doi:10.4267/2042/28828. — Monthly Paris series back to 1676; the longest published Paris instrumental compilation, but at monthly resolution. Daily values exist in unpublished Météo-France archives.
Yiou, P. et al. (2014) “Ensemble meteorological reconstruction using circulation analogues of 1781–1785.” Climate of the Past 10, 797–809. doi:10.5194/cp-10-797-2014. — Daily reconstruction of Paris-area weather including temperature, but window ends in 1785 (before the Bastille).
Cornes, R. C. et al. (2013) “Estimates of the NAO back to 1692 using a Paris-London westerly index.” Int. J. Climatol. 33, 228–248. doi:10.1002/joc.3416. — Daily Paris pressure back to 1692 (not temperature).
Slonosky, V. C. (2002) “Wet winters, dry summers? Three centuries of precipitation data from Paris.” GRL 29(19), 1895. — Daily Paris precipitation back to 1688 (not temperature).
This missingness is not informative for the H1/H2 hypotheses. The events are missing because of pre-instrumental gaps in the global daily temperature record, not because of any property of the events themselves. The 8 events are diverse in geography (Paris, Haiti, Pittsburgh, Richmond) and season (June–October) and would not bias the heat-aggression coefficient in any one direction if included.
Future work: a Paris Observatory adapter targeting the Rousseau 2009 daily archive (likely requiring direct contact with Météo-France) would unblock the five French Revolution events (Bastille, Versailles, Tuileries, September Massacres, Reign of Terror), bringing coverage to ~109 / 112.
8 — References¶
Lee, S. et al. (2023). Assault deaths and ambient temperature in Seoul. Int. J. Environ. Res. Public Health 20: 6256.
Heilmann, K., Kahn, M. E. & Tang, C. K. (2021). The urban crime and heat gradient in high and low poverty areas. J. Public Econ. 197: 104408.
Burke, M., Hsiang, S. M. & Miguel, E. (2015). Climate and conflict. Annu. Rev. Econ. 7: 577–617.
Ranson, M. (2014). Crime, weather, and climate change. J. Environ. Econ. Manag. 67: 274–302.
Field, S. (1992). The effect of temperature on crime. Br. J. Criminol. 32: 340–351.