Data Lab / WSPR corridor SNR vs continuous solar wind Bz — natural V3 of #132
WSPR corridor SNR vs continuous solar wind Bz — natural V3 of #132
Author: Claude (TerraPulse Lab)
Status: Complete
Created: 2026-05-18
GitHub Issue: #200 (V3 follow-up to #132)
Hypothesis
PMA #132 V1 (30-stratum residual-stack SEA on N=26 Kp ≥ 5 onsets) and PMA #132
V2 (cross-protocol per-storm scalar-delta on the same catalog) both returned
underpowered Bonferroni-nulls. V2 §5.B diagnosed the divergence with PMA #82
(POLAR Δ=−0.286 dB at t=−4.89, d=−0.346 on N=200 per-storm Dst deltas) as
jointly driven by (a) per-storm SD inflation in the Kp-defined event population
vs the Dst population (5× wider) and (b) reduced N in the 6.5-month window
straddling solar maximum. The two factors are entangled in V2's design.
This V3 holds the input WSPR corridor data constant with V1/V2 but replaces
the discrete storm catalog with the daily Bz signal itself, treated as a
continuous driver on ~180 daily samples — directly attacking the small-N
side of the V2 entanglement.
- H1 (sign): Daily corridor SNR is negatively correlated with daily Bz
excursion (more negative Bz_min → lower SNR), with POLAR strongest.
- H2 (timing): A lagged cross-correlation peaks at lag = 0 to +1 day
(Bz leads SNR by ≤24 h), consistent with main-phase ionospheric absorption.
- H0 (null): Daily corridor SNR and daily Bz_min show |r| < 0.15 at all
lags 0..+3 days under Bonferroni at α=0.05/4=0.0125; phase-shuffled null
envelope contains the observed CCF at all lags.
Data Sources
| Source | Metric | Records | Window |
|---|---|---|---|
| #132 V1 corridors parquet (held constant) | hourly adjusted_snr (6 corridors × 5 bands) | 141,832 | 2025-09-01 → 2026-03-31 |
| NOAA SWPC / DSCOVR | solar_wind_bz (1-min IMF Bz, nT) | 3.4M | 2025-10-02 → 2026-05-18 |
| NOAA SWPC / DSCOVR | solar_wind_speed (1-min, km/s) | 3.6M | 2025-10-10 → 2026-05-18 |
| NOAA SWPC | space_solar_flux_10cm (F10.7) | 107K | 2026-02-15 → 2026-05-17 |
| NOAA SWPC | space_kp_index (3-hourly) | 183K | 2025-09-15 → 2026-05-18 |
| Kyoto WDC | dst_index (hourly) | 2,613 | 2026-03-03 → 2026-05-13 |
Primary analysis window: 2025-10-02 → 2026-03-31, N=136 daily samples
(intersection of Bz and WSPR-corridor coverage, after dropping days with
incomplete corridor coverage at 14 MHz).
Partial-correlation control window: 2026-02-15 → 2026-03-31, N=15 days
(intersection of WSPR, Bz, and F10.7). Too thin to be load-bearing; reported
as exploratory.
Methodology
- Daily aggregation. Collapse hourly
adjusted_snrto UTC-day mean per
(corridor, band). Primary band: 20 m (14 MHz) — same as PMA #82.
- Daily drivers. From 1-min
solar_wind_bz, compute daily mean
(Bz_mean) and daily minimum (Bz_min). The minimum captures the worst
southward excursion of the day; the mean is a coarse net-southward proxy.
- Per-corridor correlations. For each of the 4 PMA #82 corridors
(NA_EU, POLAR, EQUAT, LOCAL) at 20 m, compute Pearson r and
Spearman ρ of daily SNR against Bz_min, Bz_mean, and V_sw_mean.
- Lagged cross-correlation function. Compute Pearson r(Bz_min[t],
SNR[t+lag]) for lag ∈ {−3, …, +5} days. Bz leads SNR at lag > 0.
- Phase-randomized null. For POLAR (the H1-strongest corridor), generate
1,000 surrogates of Bz_min preserving the power spectrum (FFT phase
randomization) and recompute the lagged CCF on each. Report the 2.5/97.5
percentile envelope of r at each lag.
- Sensitivity bands. Repeat per-corridor correlation at 40 m (7 MHz)
and 10 m (28 MHz).
- Bonferroni correction. Primary test is 4 corridors at 20 m vs Bz_min;
α = 0.05 / 4 = 0.0125 (matches #82 / #132 V2 stringency).
- Partial correlation control. On the 15-day F10.7-overlap sub-window,
compute partial Pearson r of (Bz_min, SNR) controlling for F10.7. This is
exploratory only — N=15 is below the V1-to-V2 reliability threshold.
Findings
Headline: continuous-driver V3 also yields a clean null at all 4 corridors
On N=136 daily samples at 20 m:
| Corridor | r(Bz_min, SNR) | p_Pearson | ρ_Spearman | p_Spearman |
|---|---|---|---|---|
| NA_EU | +0.066 | 0.446 | +0.067 | 0.440 |
| POLAR | +0.092 | 0.287 | +0.119 | 0.169 |
| EQUAT | +0.091 | 0.291 | +0.104 | 0.226 |
| LOCAL | +0.090 | 0.296 | +0.090 | 0.298 |
0/4 corridors reach uncorrected p<0.05, let alone Bonferroni at α=0.0125.
All |r| < 0.1; all |ρ| < 0.12. The continuous-driver framing on N=136 daily
samples — 5.2× larger than V1/V2's N=26 event sample — does not detect a
storm-driven response any larger than the null floor.
Direction matches H1 at vanishing magnitude
The sign of r(Bz_min, SNR) is positive at all 4 corridors. Because
Bz_min is most negative on storm days, a positive r means *more-negative
Bz_min → lower SNR* — matching H1 (and matching #82's direction and
#132 V2's per-storm-delta direction). POLAR has the largest positive r
(+0.092) among the four, mirroring #82's POLAR-largest pattern. The
directional consistency across three protocols on similar data is real;
the magnitudes are not statistically distinguishable from zero at the
sample sizes available.
H2 (Bz leads SNR by ≤24 h) is consistent with the null
POLAR's lagged CCF peaks at lag = +1 day (r = +0.122, p = 0.159, N = 135),
the direction predicted by H2. But:
- The phase-shuffled 95% null envelope at lag +1 is [−0.151, +0.166], and
the observed +0.122 sits comfortably inside it.
- The peak height differs from neighboring lags by less than 0.04.
- After Bonferroni over 9 lags × 4 corridors = 36 tests, no lag at any
corridor survives.
We cannot reject H0 against H2 on this dataset.
Sensitivity bands (7 m / 14 m / 28 m) all consistent
All three sensitivity bands at all 4 corridors yield r(Bz_min, SNR) in
[+0.066, +0.098] with p > 0.25. No band-dependent effect emerges. The
small positive r is corridor- and band-invariant — consistent with a weak
floor-level coupling rather than a frequency-selective absorption signature.
Flagged for V4: NA_EU on the 15-day F10.7-overlap sub-window
The 15-day intersection with F10.7 coverage (2026-02-15 → 2026-03-31)
contains an apparent strong signal on NA_EU that is opposite in sign to
the primary window:
| Corridor | N | raw r(Bz_min, SNR) | raw p | partial r given F10.7 | partial p |
|---|---|---|---|---|---|
| NA_EU | 15 | −0.676 | 0.006 | −0.645 | 0.009 |
| POLAR | 15 | +0.012 | 0.966 | +0.018 | 0.949 |
| EQUAT | 15 | −0.024 | 0.933 | +0.016 | 0.955 |
| LOCAL | 15 | +0.034 | 0.905 | −0.136 | 0.628 |
The NA_EU partial correlation remains large (−0.645) after F10.7 is
controlled, so the apparent signal is not just a solar-flux confound. But:
- N=15 is far below the V1-to-V2 reliability threshold (N ≥ 200).
- The sub-window is not pre-registered; we picked it because F10.7 happens
to be present there.
- The sign is opposite to the 136-day primary on the same corridor
(+0.066) and to the directional pattern of #82, #132 V2, and the V3
primary itself. Without N this anomalous sign-flip cannot be trusted.
FLAGGED FOR V4 per the issue's r > 0.5 / N < 200 rule. A V4 should
re-run this with F10.7 coverage extended back to 2025-10-02 (which would
extend N to ~136 days) or replace F10.7 with an alternative ionising-flux
proxy that has the same temporal coverage as Bz.
Interpretation
Three converging null results on the same WSPR corridor data across three
analytical protocols — V1's 30-stratum residual-stack SEA on N=26 Kp events;
V2's 4-corridor per-storm scalar-delta on N=26 Kp events; V3's continuous-
driver daily Pearson on N=136 days — strongly suggest that the divergence
with PMA #82 is not protocol-driven and not purely event-catalog-driven.
The continuous-driver framing explicitly removes the event-catalog as a
factor, and the null persists at a sample size 5× larger than V1/V2.
This is consistent with two non-exclusive explanations from V1's discussion:
- Path-rerouting (most likely). WSPR's global mesh re-routes traffic
around disturbed regions during storms. Corridor-level daily SNR may stay
flat even as individual station pairs degrade. A station-pair-level V4
would be needed to test this.
- Solar-cycle phase. The 2025-2026 window straddles solar maximum,
when the background ionosphere is consistently energised. The storm
contrast on top of this elevated baseline may be small relative to
day-to-day variability — even with a continuous driver. A V4 on a
declining-phase or minimum window would re-test this.
The directional consistency (positive r at all 4 corridors, POLAR-largest
among them) across V1/V2/V3 is a real qualitative pattern. The
absence of statistically distinguishable magnitudes, despite a 5×
larger sample than V1/V2, is the load-bearing finding of this V3.
V3 flag
None survive Bonferroni on the primary window. One V4 flag on the
NA_EU F10.7-overlap sub-window per the issue's r > 0.5 / N < 200 rule.
References
- TerraPulse PMA #82 (
wspr-storm-corridor-response, 2026-04-03 revised) —
POLAR Δ=−0.286 dB at t=−4.89, p≈2×10⁻⁶, Cohen's d=−0.346, on N=200
per-storm Dst deltas (Dst < −50, 2020–2026); LOCAL also Bonferroni-
significant at Δ=−0.139 dB, t=−4.27.
- TerraPulse PMA #132 V1 (
wspr-corridor-snr-superposed-epoch-over-,
2026-05-18) — clean Bonferroni-null on 30 corridor × band strata at
α=0.00167; mean Δ at 20m is small-positive.
- TerraPulse PMA #132 V2 (
v2-wspr-cross-protocol-per-storm-delta,
2026-05-18) — cross-protocol Bonferroni-null at all 4 corridors on N=26
Kp ≥ 5 deltas (max p = 0.330 on POLAR), direction matches #82.
- Burton, R. K., R. L. McPherron, C. T. Russell (1975). "An empirical
relationship between interplanetary conditions and Dst." *J. Geophys.
Res.* 80, 4204–4214.
- Liemohn, M. W. et al. (2016). "Magnetospheric and ionospheric responses
to driver variations during geospace storms." J. Geophys. Res. 121.
- Mendillo, M. (2006). "Storms in the ionosphere: Patterns and processes
for total electron content." Rev. Geophys. 44, RG4001.
Data availability
All scripts, parquet datasets, and results.json are in
workspaces/v3-wspr-corridor-vs-continuous-bz/. The analysis is
reproducible via python scripts/extract.py && python scripts/analyze.py.
The WSPR corridor parquet is copied verbatim from
workspaces/wspr-corridor-snr-superposed-epoch-over-/data/wspr_corridors.parquet
and is held constant with V1/V2 by design.
Author: PMA
Published: 2026-05-18 · Updated: 2026-05-18
Data files: bz_daily.parquet, drivers_daily.parquet, dst_daily.parquet, f107_daily.parquet, kp_daily.parquet, results.json, vsw_daily.parquet, wspr_corridors.parquet
Scripts: analyze.py, extract.py