diff --git a/results/.gitkeep b/results/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/results/combined_analysis.json b/results/combined_analysis.json new file mode 100644 index 0000000..7ff0765 --- /dev/null +++ b/results/combined_analysis.json @@ -0,0 +1,346 @@ +{ + "study_start": "1976-01-01", + "study_end": "2025-04-29", + "n_surrogates": 10000, + "gpu_device": "Tesla M40 (12.0 GB)", + "roll_window_bins": 219, + "roll_step_bins": 73, + "p_global_full": 0.0391, + "sigma_full": 2.063, + "peak_lag_full": -125, + "T_full": 3215, + "p_global_insample": 0.0394, + "sigma_insample": 2.06, + "peak_lag_insample": -125, + "p_global_oos": null, + "sigma_oos": null, + "peak_lag_oos": null, + "sinusoid_fit": { + "status": "ok", + "n": 44, + "model_A_mu": 0.03810137537027485, + "model_A_rss": 1.4250059377605158, + "model_A_bic": -147.13641111378288, + "model_B_A": 0.14697276976210524, + "model_B_period": 9.951134330535053, + "model_B_phi": 4.406952670096151, + "model_B_mu": 0.04805217589705477, + "model_B_rss": 0.9470531815602373, + "model_B_bic": -153.7611866521916, + "delta_bic": 6.624775538408727, + "bayes_factor": 27.45059296068454, + "preferred_model": "B (sinusoidal)" + }, + "roster": {}, + "n_rolling_windows": 44, + "rolling_windows": [ + { + "center_date": "1977-06-29", + "center_year": 1977.5, + "r": -0.07304197565233789, + "n_pairs": 216, + "n_eff": 167.5 + }, + { + "center_date": "1978-06-29", + "center_year": 1978.5, + "r": -0.08997276226742033, + "n_pairs": 216, + "n_eff": 157.9 + }, + { + "center_date": "1979-06-29", + "center_year": 1979.5, + "r": -0.10064371974119339, + "n_pairs": 216, + "n_eff": 142.1 + }, + { + "center_date": "1980-06-28", + "center_year": 1980.5, + "r": 0.1387293480900925, + "n_pairs": 216, + "n_eff": 162.4 + }, + { + "center_date": "1981-06-28", + "center_year": 1981.5, + "r": 0.12399808185165744, + "n_pairs": 216, + "n_eff": 163.5 + }, + { + "center_date": "1982-06-28", + "center_year": 1982.5, + "r": 0.05498839726187148, + "n_pairs": 216, + "n_eff": 135.1 + }, + { + "center_date": "1983-06-28", + "center_year": 1983.5, + "r": 0.08625587610195634, + "n_pairs": 216, + "n_eff": 131.9 + }, + { + "center_date": "1984-06-27", + "center_year": 1984.5, + "r": 0.19501846317350097, + "n_pairs": 216, + "n_eff": 126.7 + }, + { + "center_date": "1985-06-27", + "center_year": 1985.5, + "r": 0.26660955823518667, + "n_pairs": 216, + "n_eff": 129.9 + }, + { + "center_date": "1986-06-27", + "center_year": 1986.5, + "r": 0.053060019008078135, + "n_pairs": 216, + "n_eff": 141.9 + }, + { + "center_date": "1987-06-27", + "center_year": 1987.5, + "r": 0.12259905609503514, + "n_pairs": 216, + "n_eff": 138.7 + }, + { + "center_date": "1988-06-26", + "center_year": 1988.5, + "r": 0.058069494988180585, + "n_pairs": 216, + "n_eff": 151.6 + }, + { + "center_date": "1989-06-26", + "center_year": 1989.5, + "r": -0.12715297356977961, + "n_pairs": 216, + "n_eff": 150.3 + }, + { + "center_date": "1990-06-26", + "center_year": 1990.5, + "r": 0.015330129929657415, + "n_pairs": 216, + "n_eff": 150.8 + }, + { + "center_date": "1991-06-26", + "center_year": 1991.5, + "r": 0.19374509216197436, + "n_pairs": 216, + "n_eff": 139.3 + }, + { + "center_date": "1992-06-25", + "center_year": 1992.5, + "r": 0.22639916082796394, + "n_pairs": 216, + "n_eff": 122.1 + }, + { + "center_date": "1993-06-25", + "center_year": 1993.5, + "r": -0.030154303926572024, + "n_pairs": 216, + "n_eff": 118.3 + }, + { + "center_date": "1994-06-25", + "center_year": 1994.5, + "r": 0.4464462711030149, + "n_pairs": 216, + "n_eff": 92.0 + }, + { + "center_date": "1995-06-25", + "center_year": 1995.5, + "r": 0.46846538331881726, + "n_pairs": 216, + "n_eff": 101.1 + }, + { + "center_date": "1996-06-24", + "center_year": 1996.5, + "r": 0.0010884593495063466, + "n_pairs": 216, + "n_eff": 155.3 + }, + { + "center_date": "1997-06-24", + "center_year": 1997.5, + "r": 0.13927312030650843, + "n_pairs": 216, + "n_eff": 124.8 + }, + { + "center_date": "1998-06-24", + "center_year": 1998.5, + "r": 0.09462289865462623, + "n_pairs": 216, + "n_eff": 102.6 + }, + { + "center_date": "1999-06-24", + "center_year": 1999.5, + "r": -0.3074029329895098, + "n_pairs": 216, + "n_eff": 102.0 + }, + { + "center_date": "2000-06-23", + "center_year": 2000.5, + "r": -0.2610928794450835, + "n_pairs": 216, + "n_eff": 115.0 + }, + { + "center_date": "2001-06-23", + "center_year": 2001.5, + "r": -0.1904780542634531, + "n_pairs": 216, + "n_eff": 129.8 + }, + { + "center_date": "2002-06-23", + "center_year": 2002.5, + "r": -0.13152989315486557, + "n_pairs": 216, + "n_eff": 152.3 + }, + { + "center_date": "2003-06-23", + "center_year": 2003.5, + "r": 0.30074616915588975, + "n_pairs": 216, + "n_eff": 103.4 + }, + { + "center_date": "2004-06-22", + "center_year": 2004.5, + "r": 0.31194289965738514, + "n_pairs": 216, + "n_eff": 90.4 + }, + { + "center_date": "2005-06-22", + "center_year": 2005.5, + "r": 0.12462302910590135, + "n_pairs": 216, + "n_eff": 120.2 + }, + { + "center_date": "2006-06-22", + "center_year": 2006.5, + "r": -0.08356145006599772, + "n_pairs": 216, + "n_eff": 120.3 + }, + { + "center_date": "2007-06-22", + "center_year": 2007.5, + "r": 0.0304484443288193, + "n_pairs": 216, + "n_eff": 129.9 + }, + { + "center_date": "2008-06-21", + "center_year": 2008.5, + "r": -0.44128635766757796, + "n_pairs": 216, + "n_eff": 88.7 + }, + { + "center_date": "2009-06-21", + "center_year": 2009.5, + "r": -0.2423228521602404, + "n_pairs": 216, + "n_eff": 134.2 + }, + { + "center_date": "2010-06-21", + "center_year": 2010.5, + "r": -0.1553791297352043, + "n_pairs": 216, + "n_eff": 78.8 + }, + { + "center_date": "2011-06-21", + "center_year": 2011.5, + "r": 0.06528490893846879, + "n_pairs": 216, + "n_eff": 219.0 + }, + { + "center_date": "2012-06-20", + "center_year": 2012.5, + "r": 0.08690195508067765, + "n_pairs": 216, + "n_eff": 214.9 + }, + { + "center_date": "2013-06-20", + "center_year": 2013.5, + "r": 0.07842413402898289, + "n_pairs": 216, + "n_eff": 216.0 + }, + { + "center_date": "2014-06-20", + "center_year": 2014.5, + "r": 0.02865034198205194, + "n_pairs": 216, + "n_eff": 199.3 + }, + { + "center_date": "2015-06-20", + "center_year": 2015.5, + "r": 0.03395144204160391, + "n_pairs": 216, + "n_eff": 193.1 + }, + { + "center_date": "2016-06-19", + "center_year": 2016.5, + "r": -0.030372822325838798, + "n_pairs": 216, + "n_eff": 107.1 + }, + { + "center_date": "2017-06-19", + "center_year": 2017.5, + "r": 0.06681413442428236, + "n_pairs": 216, + "n_eff": 156.2 + }, + { + "center_date": "2018-06-19", + "center_year": 2018.5, + "r": 0.0195590406606907, + "n_pairs": 216, + "n_eff": 176.0 + }, + { + "center_date": "2019-06-19", + "center_year": 2019.5, + "r": 0.056103936327729184, + "n_pairs": 146, + "n_eff": 130.2 + }, + { + "center_date": "2020-06-18", + "center_year": 2020.5, + "r": 0.05270337706705674, + "n_pairs": 73, + "n_eff": 68.2 + } + ] +} \ No newline at end of file diff --git a/results/combined_analysis_report.md b/results/combined_analysis_report.md new file mode 100644 index 0000000..0a813e2 --- /dev/null +++ b/results/combined_analysis_report.md @@ -0,0 +1,47 @@ +# Combined Full-Series Analysis (1976–2025) + +Generated: 2026-04-24T05:33:39Z +Full window: 1976-01-01 → 2025-04-29 +In-sample: 1976-01-01 → 2019-12-31 +Out-of-sample: 2020-01-01 → 2025-04-29 +GPU: Tesla M40 (12.0 GB) +Surrogates: 10,000 per window + +## Does appending OOS data strengthen or weaken significance? + +| Window | p_global | σ_surrogate | peak lag | +|---|---|---|---| +| In-sample (1976–2019) | 0.0394 | 2.06 | -125 d | +| Out-of-sample (2020–2025) | N/A | N/A | None d | +| Combined (1976–2025) | 0.0391 | 2.06 | -125 d | + +## Sinusoidal envelope fit + +BF = 27.45: strong evidence for sinusoidal envelope + +Best-fit period: **9.95 years** (constrained to [9, 13] years) + +| Parameter | Value | +|---|---| +| Period P | 9.95 yr | +| Amplitude A | 0.1470 | +| Phase φ | 4.41 rad | +| Baseline μ | 0.0481 | +| Model B BIC | -153.76 | +| Model A BIC | -147.14 | +| ΔBIC (A−B) | 6.62 | +| Bayes factor (BF) | 27.451 | + +## Station roster comparison (OOS window) + +| Roster | Description | Stations | p_global | +|---|---|---|---| +| A | In BOTH windows | ? | N/A | +| B_oos | All OOS stations | ? | N/A | +| C | New OOS-only | ? | N/A | + +A real effect should appear consistently across all three rosters. +Divergence (e.g., significant only in A) would suggest station-selection bias. + +## Figure +`results/figs/full_series_with_envelope_fit.png` diff --git a/results/figs/full_series_with_envelope_fit.png b/results/figs/full_series_with_envelope_fit.png new file mode 100644 index 0000000..b1b9867 Binary files /dev/null and b/results/figs/full_series_with_envelope_fit.png differ diff --git a/results/figs/oos_xcorr.png b/results/figs/oos_xcorr.png new file mode 100644 index 0000000..17a5e2d Binary files /dev/null and b/results/figs/oos_xcorr.png differ diff --git a/results/figs/rolling_correlation_oos.png b/results/figs/rolling_correlation_oos.png new file mode 100644 index 0000000..59f3044 Binary files /dev/null and b/results/figs/rolling_correlation_oos.png differ diff --git a/results/out_of_sample_metrics.json b/results/out_of_sample_metrics.json new file mode 100644 index 0000000..727a872 --- /dev/null +++ b/results/out_of_sample_metrics.json @@ -0,0 +1,195 @@ +{ + "git_sha": "unknown", + "avail_run_date": "unknown", + "study_start": "2020-01-01", + "study_end": "2025-04-29", + "T_valid": 390, + "n_stations": 35, + "n_surrogates": 100000, + "seed": 42, + "gpu_device": "Tesla M40 (12.0 GB)", + "r_at_15d": 0.044564, + "r_at_15d_hp": 0.026665, + "surr_p95_at_15d": 0.135623, + "p_global": 0.99404, + "p_global_linear_detrend": 1.0, + "sigma_surr": 0.007, + "peak_r": 0.110406, + "peak_lag_days": 135, + "n_eff": 274.5, + "n_rolling_windows": 16, + "n_significant_bh": 0, + "expected_fp": 0.0, + "T": 390, + "prediction_scores": { + "P1": "PASS", + "P2": "FAIL", + "P3": "AMBIGUOUS", + "P4": "AMBIGUOUS", + "F1": "TRIGGERED", + "F2": "not triggered", + "F3": "AMBIGUOUS" + }, + "rolling_windows": [ + { + "center_date": "2020-09-27", + "i0": 0, + "r": -0.020673974266789276, + "r_95_lo": -0.2384207768025597, + "r_95_hi": 0.19905195096046985, + "surr_p95": 0.24703209108565127, + "n_pairs": 106, + "n_eff": 80.7 + }, + { + "center_date": "2020-12-26", + "i0": 18, + "r": -0.1596215601323441, + "r_95_lo": -0.3652401175794433, + "r_95_hi": 0.06084746948303837, + "surr_p95": 0.2420104634210208, + "n_pairs": 106, + "n_eff": 81.0 + }, + { + "center_date": "2021-03-26", + "i0": 36, + "r": -0.10746670672666697, + "r_95_lo": -0.3483903115845773, + "r_95_hi": 0.14677605655326095, + "surr_p95": 0.2572000321729004, + "n_pairs": 106, + "n_eff": 61.7 + }, + { + "center_date": "2021-06-24", + "i0": 54, + "r": -0.10098858847235519, + "r_95_lo": -0.3463312883265511, + "r_95_hi": 0.1572843431029865, + "surr_p95": 0.26650154565559175, + "n_pairs": 106, + "n_eff": 59.9 + }, + { + "center_date": "2021-09-22", + "i0": 72, + "r": 0.01254431298486686, + "r_95_lo": -0.25387482798887767, + "r_95_hi": 0.27719423163204004, + "surr_p95": 0.2985998754816451, + "n_pairs": 106, + "n_eff": 54.9 + }, + { + "center_date": "2021-12-21", + "i0": 90, + "r": 0.09250204283123152, + "r_95_lo": -0.20439300590462595, + "r_95_hi": 0.3738122683731473, + "surr_p95": 0.27676919680091644, + "n_pairs": 106, + "n_eff": 45.7 + }, + { + "center_date": "2022-03-21", + "i0": 108, + "r": 0.14320771523610307, + "r_95_lo": -0.13729493377312108, + "r_95_hi": 0.40244693119546243, + "surr_p95": 0.28437908737796685, + "n_pairs": 106, + "n_eff": 51.2 + }, + { + "center_date": "2022-06-19", + "i0": 126, + "r": 0.07509703884831592, + "r_95_lo": -0.13160095985883036, + "r_95_hi": 0.2755371203194297, + "surr_p95": 0.20138619969258406, + "n_pairs": 106, + "n_eff": 92.1 + }, + { + "center_date": "2022-09-17", + "i0": 144, + "r": 0.2168176251787577, + "r_95_lo": 0.011086902245728723, + "r_95_hi": 0.404937880290396, + "surr_p95": 0.26527264789585464, + "n_pairs": 106, + "n_eff": 90.8 + }, + { + "center_date": "2022-12-16", + "i0": 162, + "r": 0.16887990508570438, + "r_95_lo": -0.034272026977641694, + "r_95_hi": 0.3586296276290144, + "surr_p95": 0.19453090531555742, + "n_pairs": 106, + "n_eff": 94.6 + }, + { + "center_date": "2023-03-16", + "i0": 180, + "r": -0.007919126521579136, + "r_95_lo": -0.24368819753335721, + "r_95_hi": 0.22873370185387817, + "surr_p95": 0.244394067315623, + "n_pairs": 106, + "n_eff": 69.3 + }, + { + "center_date": "2023-06-14", + "i0": 198, + "r": -0.03593975038951865, + "r_95_lo": -0.27513801901583773, + "r_95_hi": 0.20744861668280118, + "surr_p95": 0.26934427417321, + "n_pairs": 106, + "n_eff": 66.2 + }, + { + "center_date": "2023-09-12", + "i0": 216, + "r": 0.012229179706855697, + "r_95_lo": -0.2289007755823031, + "r_95_hi": 0.2519451642078741, + "surr_p95": 0.21335780781894043, + "n_pairs": 106, + "n_eff": 66.9 + }, + { + "center_date": "2023-12-11", + "i0": 234, + "r": 0.06543567665343912, + "r_95_lo": -0.1901695876704142, + "r_95_hi": 0.3127329265694898, + "surr_p95": 0.2519767306793838, + "n_pairs": 106, + "n_eff": 60.7 + }, + { + "center_date": "2024-03-10", + "i0": 252, + "r": 0.07906053491790431, + "r_95_lo": -0.1373503142101981, + "r_95_hi": 0.2882674790685488, + "surr_p95": 0.19634784346737047, + "n_pairs": 106, + "n_eff": 84.2 + }, + { + "center_date": "2024-06-08", + "i0": 270, + "r": 0.029537138940926456, + "r_95_lo": -0.19206747741251445, + "r_95_hi": 0.24827571906628718, + "surr_p95": 0.1950217577409729, + "n_pairs": 106, + "n_eff": 79.5 + } + ] +} \ No newline at end of file diff --git a/results/out_of_sample_report.md b/results/out_of_sample_report.md new file mode 100644 index 0000000..926be40 --- /dev/null +++ b/results/out_of_sample_report.md @@ -0,0 +1,66 @@ +# Out-of-Sample Validation Report — Homola et al. 2023 + +Generated: 2026-04-23T22:56:38Z +Git SHA: unknown +OOS window: 2020-01-01 → 2025-04-29 +Analysis run date: 2026-04-23 +Data availability check: unknown + +## Overall verdict + +**AMBIGUOUS**: Mixed results; insufficient evidence to confirm or refute. + +## Prediction scorecard + +| Criterion | Outcome | +|---|---| +| P1 | PASS | +| P2 | FAIL | +| P3 | AMBIGUOUS | +| P4 | AMBIGUOUS | +| F1 | TRIGGERED | +| F2 | not triggered | +| F3 | AMBIGUOUS | + +## Key numerical results + +| Metric | OOS value | In-sample baseline | +|---|---|---| +| r(τ = +15 d) raw | +0.0446 | +0.3099 (solar-cycle confounded) | +| r(τ = +15 d) HP-detrended | +0.0267 | +0.0411 | +| Surrogate 95th pct at τ=+15 d | 0.1356 | (not computed in-sample at this lag) | +| p_global (phase surrogates) | 0.9940 | 1.000 (in-sample raw, not significant) | +| σ_surrogate | 0.01 | n/a | +| Dominant peak lag | +135 d | −525 d | +| Dominant peak \|r\| | 0.1104 | 0.469 | +| BH-significant pairs (geo) | 0 | 455 (in-sample) | +| Expected FP (geo, BH q=0.05) | 0.0 | 351.9 (in-sample) | +| Surrogate count | 100,000 | 10,000 (in-sample) | + +## Interpretation notes + +The OOS window (2020-01-01–2025-04-29) spans approximately +5 years — +less than one full 11-year solar cycle. This has two implications: + +1. **Solar-cycle detrending is less effective** over sub-cycle windows. Linear + and sunspot-regression detrending are used instead of HP/STL, which require + series longer than the target period. + +2. **Statistical power is lower** than in-sample (T ≈ 3215 bins vs + T ≈ 390 bins OOS). A genuine effect of the same magnitude as the + in-sample HP-detrended signal (r ≈ 0.04) would require a very large n_surr + to detect reliably. + +## Methodological notes + +- Pre-registration file: `results/prereg_predictions.md` (timestamps confirm + it was written before any OOS analysis was run) +- GPU: Tesla M40 (12.0 GB) +- Surrogates: phase-randomisation (100,000) +- Lag range: ±200 days + +## Figures + +- `results/figs/oos_xcorr.png` — r(τ) with surrogate envelopes +- `results/figs/rolling_correlation_oos.png` — rolling r(τ=+15 d) diff --git a/results/prereg_predictions.md b/results/prereg_predictions.md index 24dd226..8433460 100644 --- a/results/prereg_predictions.md +++ b/results/prereg_predictions.md @@ -1,6 +1,6 @@ # Pre-Registered Predictions — Out-of-Sample CR–Seismic Validation -**Written:** 2026-04-22T00:44:30Z +**Written:** 2026-04-23T22:56:22Z **Git SHA:** unknown **OOS window:** 2020-01-01 → 2025-04-29 **Surrogates:** 100,000 phase-randomisation