GATE.md); T9 and the T10 replication run since; paused for discussion. Start with the summary; experiments follow in order.What was asked. Can disagreement among physically independent observers of one rain field be turned into a measurement of each observer's error, with no ground truth? The mathematics exists for amounts (triple collocation: each observer's error variance from three observers' covariances). This thread applied it to structural coordinates (where the rain sits, how spread it is) and followed what came out.
What happened, in one line per step.
| step | question | result | what it changed |
|---|---|---|---|
| Probe A | collocate radar, IMERG infrared, microwave | stable on structure; ranks microwave above radar | an unexpected ranking |
| Probe A2 | replace IMERG infrared (microwave-calibrated) with raw GOES | same ranking | calibration link not supported as the cause |
| T1 | synthetic fields with known truth | centroid recovered; dispersion mis-ranked; a planted shared satellite error reproduces the ranking (superseded by T1-bis: blur not mass-conserving) | the ranking reread as a possible shared-error signature; islands and wet fraction dropped |
| T5 | blur radar to microwave smoothness | ranking persists under the tested smoothing (approximate match, sample changes) | smoothing procedure not sufficient; GOES parallax detected, not shared |
| T6 | read cores only; split by intensity and radar beam quality | not core keying; worst in light rain; not radar beam quality | where the error lives |
| T7 | gauges as a sharp, independent fourth observer | with gauges as a leg, the ranking reverses (radar least noisy); GOES–microwave error correlation +0.35 to +0.51 if radar and gauge errors are independent | the reversal established; the satellite attribution conditional |
| T7-R | robustness: drop the other satellite; four-observer tetrads | radar still least noisy; tetrads show two groups, {radar, gauges} vs {GOES, MW}, compatible with one split (two independent tetrad constraints) | T7 robust to the choice of satellite |
| T8 | does the coupling grow with anvil (cloud beyond rain)? | no detectable change in coupling (≈ 0.4); triplet bias grows where every observer is noisier | a simple "anvil" cause not supported |
| T1-bis | rebuild the synthetic control with a mass-conserving blur; measure coordinate-error independence directly | full canvas: centroid errors uncorrelated, dispersion small residual (+0.021); windows add small shared error; all variables recovered with correct ranking; planted shared error inverts at σ_sh = 1.0; five observers identify the pair 10/10, no false alarms | F6 withdrawn; dispersion reinstated; synthetic support restored |
| T9 | real-data window grid; smoothness on a fixed sample with a close match (lag-1 within 0.013) | shifted and larger windows: inversion and point reversal intact; close smoothness match (σ* 0.4): gap +0.218, unchanged | robust to the tested grids and the smoothness match; windowing in general not excluded |
| T10 | does it replicate on an unseen period? August 2024, frozen July code | all six predictions met: area inversion +0.259, point reversal -0.286, c(GOES, MW) +0.425; T7-S does not tip by 0.5 | effect not specific to July; identification limit unchanged |
| T7-S | how much radar–gauge error dependence would undo the attribution? | dependence detected to 0.475–0.5; ranking clear (by interval) to 0.275–0.4, point flip 0.425–0.5 (August: dependence through 0.5, ranking clear to 0.375–0.4, no point flip by 0.5) | the conditional attribution has a quantified tolerance |
Where knowledge stands.
Rules for structural collocation, learned here (for the tested variables, simulation and observing configuration):
Terms. Observer: one independent measurement of the same rain field (radar, GOES infrared, microwave, gauges). Collocation: estimating each observer's error from the covariances of three or more observers, with no truth. Leg: one of the three observers in a triplet. Instrument: in the four-observer check, the two observers assumed independent that let one estimate the error correlation of the other two. Noise fraction: 1 − ρ², the share of an observer's variance not shared with the common signal (0 = perfect, 1 = pure noise). Inversion: collocation rating microwave less noisy than radar. Point support: every observer read at the same gauge locations.
The domain-qualification rubric (v2, domain-qualification/RUBRIC.md) scored four desk candidates. Weather
spatial verification, reframed as observation disagreement (radar vs satellite vs gauge), was the only one with public,
use-unrestricted data large enough for a powered test (scorecard candidates/04_precipitation_spatial_verification.md).
Its weaker gates were stated in advance: the label (a point error is not an arrangement, Gate 4 PARTIAL) and the incumbents
(SAL, MODE, FSS, MRMS quality layers). The first test was built to fail fast on exactly those.
| Observer | What it measures physically | Source (access) | Used in |
|---|---|---|---|
| R · MRMS RadarOnly_QPE_01H | radar backscatter → rain rate, not gauge-adjusted; 0.01° → 0.1° block mean | NOAA Open Data, AWS noaa-mrms-pds (open) | all |
| RQI · RadarAccumulationQualityIndex_01H | MRMS's own radar quality (beam height, blockage, freezing level) | same | Exp. 1 (incumbent) |
| M · IMERG Late merged | Kalman-morphed blend of microwave and infrared estimates | NASA GES DISC (Earthdata token) | all |
IR · IMERG IRprecipitation (PDIR) | geostationary IR → rain, calibrated to the microwave estimates (ATBD) | same file | Exp. 1, Probe A |
MW · IMERG MWprecipitation | passive-microwave retrievals, quantile-matched to CORRA (spaceborne radar–radiometer) | same file | Probes A, A2 |
| GIR · GOES-16 ABI band 13 | raw 10.3 µm brightness temperature; cold-cloud field 235 − Tb | NOAA Open Data, AWS noaa-goes16 (open) | Probe A2 |
| G · gauges | USCRN (130 CONUS, triple weighing gauges) and ASOS (2,175) hourly precipitation | NCEI; Iowa Environmental Mesonet | Exp. 1 (label only) |
Design (frozen in FEASIBILITY_PLAN.md, with two amendments written before any target or predictor
value existed). Target: E = |radar-only at the gauge pixel − gauge|, hourly. 504 hours, 1–21 July 2024; discovery 1–10 July,
validation 11–21 July, read once. Baseline: 1 − RQI, two plain radar–satellite difference maps, and the radar and satellite
values at the gauge. Structural reads: 14, borrowed from the program's instruments (Saltimbanques islands / void /
dispersion / edge dependency; Core42 multiscale; HTAN persistence; the variance-of-disagreement determination; an infrared
third observer). Rule: go if Δρ ≥ 0.02 with a cluster-bootstrap 95% CI above 0 (clusters = UTC day × 5° tile).
Seismology guardrails applied: near-zero Ω check, and a spatial-scramble null.
Sample: 288,690 gauge-hours (ASOS 271,511; USCRN 17,179); 423 discovery and 533 validation clusters. Near-zero om_loc share 0.0024%.
| Model | ρ validation | Δρ vs baseline | 95% CI | Δρ under scramble null | Rule |
|---|---|---|---|---|---|
| frozen v0 (om_loc, om_pat) | 0.6855 | +0.0000 | [-0.000, 0.000] | +0.0003 [-0.000, 0.001] | not met |
| variance only (σ space, σ time) | 0.6868 | +0.0014 | [0.001, 0.002] | +0.0031 [0.002, 0.004] | not met |
| FULL A2 (14 reads), headline | 0.6869 | +0.0014 | [0.001, 0.002] | +0.0031 [0.002, 0.004] | not met |
| baseline | 0.6855 | ||||
| read | raw ρ | partial ρ (all) | partial ρ (USCRN) | n (discovery) |
|---|---|---|---|---|
inc | +0.003 | -0.019 | +0.030 | 132,755 |
naive1 | +0.679 | -0.207 | -0.209 | 132,755 |
naive2 | +0.498 | -0.033 | -0.043 | 132,755 |
om_loc | -0.164 | -0.013 | -0.005 | 132,755 |
om_pat | -0.121 | -0.015 | -0.002 | 132,755 |
om_iou | -0.371 | -0.001 | +0.010 | 132,755 |
om_islands | -0.076 | -0.009 | -0.029 | 132,755 |
om_disp | -0.253 | -0.005 | -0.004 | 132,755 |
om_void | +0.124 | -0.014 | -0.018 | 132,755 |
om_scale | -0.051 | -0.018 | -0.005 | 132,755 |
om_scale_rec | -0.104 | +0.012 | +0.014 | 132,755 |
om_edge | -0.268 | -0.041 | -0.027 | 132,755 |
om_pat_persist | -0.138 | -0.013 | -0.003 | 132,755 |
om_loc_ir | -0.181 | +0.003 | +0.018 | 106,217 |
om_pat_ir | -0.062 | +0.004 | +0.033 | 106,217 |
om_sigma_space | +0.146 | -0.004 | -0.020 | 109,277 |
om_sigma_time | -0.218 | +0.002 | +0.032 | 96,009 |
om_loc_mw | -0.124 | -0.009 | +0.010 | 55,659 |
om_pat_mw | -0.089 | -0.013 | +0.015 | 55,659 |
Resolution sweep (partial ρ, n=98,751): om_pat -0.028 / -0.024 / -0.017 / -0.013; om_loc -0.027 / -0.018 / -0.013 / -0.009 at 0.3° / 0.5° / 0.7° / 1.0°. Gate 6 here: radar-error vs satellite-error at gauges r = 0.47 (PARTIAL; both are measured against the same gauge, which inflates r). Predictor audit I = 0.196, top pair om_pat~om_scale 0.95 (same correlation before and after 3 × 3 smoothing).
Nineteen papers were pulled (literature/INDEX.md). Two bodies of work mattered:
Mapping to program methods, and the four probes ranked from it, are in RESEARCH_SYNTHESIS.md. Probe A was run first
because it needs no gauge label.
Design (PROBE_A_PLAN.md). Non-overlapping 15 × 15-cell (1.5°) windows, every hour; a window-hour enters
when all four observers carry rain and microwave covers ≥ 80% of it. Per observer: wet fraction, intensity-weighted centroid
(y, x), dispersion, island count, and log mean rain as the value control. Estimator: ETC noise fraction 1 − ρ² for the triplet
(R, IR, MW); quadruple check of merged IMERG's error correlation with IR and MW using the other two as instruments; 500
cluster-bootstrap resamples. Predictions: (1) radar least noisy; (2) IR noisier than MW; (3) merged most error-correlated with MW.
Stop if most structural variables are unstable.
Sample: 25,468 window-hours, 1199 clusters.
| variable | R | IR (IMERG) | MW | boot. share negative | stable |
|---|---|---|---|---|---|
| wet fraction | 0.349 [0.324, 0.375] | 0.611 [0.581, 0.640] | 0.007 [-0.027, 0.038] | 0.34 | no |
| centroid y | 0.254 [0.240, 0.269] | 0.538 [0.519, 0.557] | 0.070 [0.057, 0.084] | 0.00 | yes |
| centroid x | 0.290 [0.273, 0.305] | 0.567 [0.550, 0.583] | 0.122 [0.109, 0.136] | 0.00 | yes |
| dispersion | 0.570 [0.548, 0.594] | 0.778 [0.763, 0.795] | 0.278 [0.245, 0.308] | 0.00 | yes |
| islands | 0.677 [0.632, 0.715] | 0.932 [0.920, 0.945] | 0.628 [0.584, 0.671] | 0.00 | yes |
| log mean rain (value) | 0.408 [0.383, 0.435] | 0.609 [0.587, 0.631] | -0.028 [-0.054, -0.006] | 1.00 | no |
| variable | merged–IR error corr. | merged–MW error corr. |
|---|---|---|
| centroid y | 0.02 [-0.00, 0.05] | 0.26 [0.07, 0.39] |
| centroid x | -0.02 [-0.05, 0.01] | 0.36 [0.28, 0.44] |
| dispersion | -0.03 [-0.05, 0.00] | 0.31 [0.22, 0.39] |
| islands | 0.05 [0.03, 0.07] | 0.37 [0.32, 0.41] |
Hypothesis: radar and IR share an hour-integrated footprint the microwave snapshot lacks, biasing MW's error low. If so, MW covering both half-hours should raise its noise fraction.
The IMERG V07 ATBD (in literature/) then confirmed that IMERG's infrared estimate is PDIR, calibrated to the
passive-microwave estimates through a rotating 30-day accumulator, so (R, IR, MW) was not an independent triplet. That
motivated Experiment 3.
Design (PROBE_A2_PLAN.md): identical, with GOES-16 band 13 brightness temperature (4 scans per hour,
binned to 0.1°, cold-cloud field 235 − Tb) replacing IMERG IR. 502 of 504 hours (2 hours had < 3 scans and were dropped per
plan). Test-hour alignment: radar vs cold cloud r = 0.39 at zero shift, best one cell displaced (geostationary parallax),
not corrected.
Sample: 14,585 window-hours, 965 clusters.
| variable | R | GIR (GOES) | MW | boot. share negative | stable |
|---|---|---|---|---|---|
| wet fraction | 0.334 [0.304, 0.370] | 0.644 [0.609, 0.676] | -0.007 [-0.047, 0.028] | 0.66 | no |
| centroid y | 0.257 [0.240, 0.275] | 0.505 [0.481, 0.530] | 0.036 [0.019, 0.050] | 0.00 | yes |
| centroid x | 0.282 [0.261, 0.303] | 0.524 [0.502, 0.546] | 0.089 [0.071, 0.105] | 0.00 | yes |
| dispersion | 0.534 [0.500, 0.566] | 0.841 [0.823, 0.858] | 0.244 [0.195, 0.287] | 0.00 | yes |
| islands | 0.659 [0.613, 0.707] | 0.924 [0.908, 0.938] | 0.585 [0.524, 0.637] | 0.00 | yes |
| log mean rain (value) | 0.408 [0.381, 0.437] | 0.682 [0.657, 0.712] | -0.034 [-0.067, -0.004] | 0.98 | no |
| variable | merged–GOES IR error corr. | merged–MW error corr. |
|---|---|---|
| centroid y | 0.01 [-0.03, 0.05] | -0.34 [-1.69, 0.10] |
| centroid x | -0.06 [-0.10, -0.01] | 0.20 [-0.05, 0.33] |
| dispersion | -0.05 [-0.09, -0.02] | 0.27 [0.10, 0.38] |
| islands | -0.01 [-0.03, 0.02] | 0.33 [0.25, 0.38] |
Why: house rule I-20, never quote a read without a machine-perfect control. Probes A/A2 produced claims with no
control. Design (T1_PLAN.md): 20,000 rain-like 15 × 15 windows with known truth (1 + Poisson(1.5) Gaussian
cells, lognormal intensities). Simulated observers re-render the same cells: radar-like R (position sd 0.5, no blur),
microwave-like S1 (sd 0.8, blur +1), infrared-like S2 (sd 1.5, blur +2), merged M = 0.6·S1 + 0.4·S2, and an independent
fifth observer G (blur +1.5). A planted shared error d_sh, one displacement per window applied to both S1 and S2, swept
over σ_sh = 0, 0.5, 1.0, 1.5 cells. Reads and estimators are the Probe A code, unchanged.
| variable (σ_sh = 0) | R estimate / truth | S1 estimate / truth | S2 estimate / truth | boot. share negative |
|---|---|---|---|---|
| centroid y | 0.074 / 0.045 | 0.085 / 0.116 | 0.267 / 0.295 | 0.00 |
| centroid x | 0.076 / 0.044 | 0.084 / 0.118 | 0.260 / 0.287 | 0.00 |
| dispersion | 0.121 / 0.046 | 0.058 / 0.137 | 0.266 / 0.332 | 0.00 |
| islands | 0.925 / 0.373 | 0.483 / 0.953 | 0.943 / 0.995 | 0.00 |
| wet fraction | 0.189 / 0.030 | -0.011 / 0.160 | 0.311 / 0.428 | 1.00 |
| log mean rain (value) | 0.121 / 0.058 | 0.088 / 0.149 | 0.253 / 0.301 | 0.00 |
| σ_sh | R (centroid y) est. / truth | S1 est. / truth | S2 est. / truth | S1–S2 error corr. (instrument G) est. / truth |
|---|---|---|---|---|
| 0.0 | 0.074 / 0.045 | 0.085 / 0.116 | 0.267 / 0.295 | -0.05 / 0.16 |
| 0.5 | 0.113 / 0.045 | 0.082 / 0.150 | 0.260 / 0.318 | 0.14 / 0.29 |
| 1.0 | 0.212 / 0.045 | 0.072 / 0.237 | 0.241 / 0.378 | 0.43 / 0.50 |
| 1.5 | 0.336 / 0.045 | 0.060 / 0.349 | 0.216 / 0.459 | 0.63 / 0.66 |
Design (T5_PLAN.md): blur radar with a Gaussian (normalised convolution) before windowing, over a ladder
σ = 0–3 cells, plus σ* chosen from field properties alone: the blur at which radar's median lag-1 autocorrelation matches the
microwave field's. Collocation on the independent triplet (radar, GOES IR, microwave), centroid y, centroid x and dispersion
only. A synthetic calibration arm (T1 fields, radar-like observer blurred) shows what each cause predicts.
Prediction: if smoothness drives the real ranking, nf_radar − nf_microwave falls to ≤ 0 at σ*; if shared physics
does, it stays above 0.
Smoothness match: microwave lag-1 0.700; radar 0.633 unblurred, 0.759 at 0.5 cell → σ* = 0.5 cell.
| radar blur σ | n | nf_R − nf_MW, centroid y | centroid x | dispersion |
|---|---|---|---|---|
| 0.0 | 14,751 | +0.224 [0.196, 0.251] | +0.193 [0.164, 0.223] | +0.288 [0.222, 0.357] |
| 0.5 (σ*) | 14,819 | +0.214 [0.186, 0.240] | +0.181 [0.151, 0.210] | +0.304 [0.240, 0.374] |
| 1.0 | 14,978 | +0.193 [0.165, 0.223] | +0.161 [0.134, 0.191] | +0.333 [0.259, 0.408] |
| 1.5 | 15,129 | +0.181 [0.154, 0.212] | +0.144 [0.116, 0.174] | +0.373 [0.299, 0.445] |
| 2.0 | 15,263 | +0.166 [0.141, 0.192] | +0.128 [0.100, 0.154] | +0.404 [0.335, 0.483] |
| 3.0 | 15,467 | +0.155 [0.126, 0.186] | +0.111 [0.084, 0.140] | +0.463 [0.375, 0.539] |
| latitude band | n | GOES IR − radar (centroid y, cells; − = north) | MW − radar |
|---|---|---|---|
| (20, 30] | 2,315 | +0.46 | +0.41 |
| (30, 35] | 3,978 | -0.04 | +0.08 |
| (35, 40] | 2,588 | -0.16 | -0.05 |
| (40, 45] | 1,987 | -0.47 | +0.01 |
| (45, 55] | 3,717 | -0.90 | -0.12 |
Design (T6_PLAN.md): H_core says both satellites are pulled toward convective cores while radar sees the full
surface rain area. Tests on the (radar, GOES IR, microwave) triplet: P1 re-read every observer on its own core (cells ≥ its
window's 80th percentile); P2 split windows by radar light-rain mass fraction (< 5 mm/h); P3 check whether the satellites
sit nearer radar's core centroid than its full-area centroid.
| prediction under H_core | result | |
|---|---|---|
| P1 | core reading shrinks nf_R − nf_MW | not met: core +0.207 [0.179, 0.235] vs full +0.224 (centroid y) |
| P2 | inversion grows with light-rain fraction | met in form: top − bottom tercile +0.146 [0.089, 0.211]; but two-thirds of windows are all light rain, so the split is "has a heavy core" vs "all light" |
| P3 | satellites nearer radar's core | reversed: nearer the full area (median paired difference -0.96 cells GOES, -1.10 MW); caveat: core centroids are noisier |
Exploratory follow-ups: where does the inversion live? By radar window peak intensity, and by MRMS radar quality index (beam overshoot is the obvious alternative: radar could be genuinely worse in light, shallow rain far from the radar).
| radar peak (mm/h) | n | nf_R − nf_MW, centroid y | nf_R | nf_MW |
|---|---|---|---|---|
| ≤ 2.1 | 2,951 | +0.333 [0.257, 0.406] | 0.394 | 0.062 |
| ≤ 5.2 | 2,950 | +0.224 [0.170, 0.283] | 0.273 | 0.048 |
| ≤ 10.0 | 2,950 | +0.206 [0.149, 0.264] | 0.238 | 0.031 |
| ≤ 17.7 | 2,950 | +0.180 [0.143, 0.222] | 0.187 | 0.008 |
| ≤ 95.4 | 2,950 | +0.115 [0.086, 0.147] | 0.134 | 0.019 |
| window RQI | weak rain (below median peak) | strong rain |
|---|---|---|
| 0.25 | +0.262 [0.206, 0.329] | +0.165 [0.109, 0.222] |
| 0.82 | +0.259 [0.181, 0.335] | +0.143 [0.104, 0.180] |
| 0.96 | +0.317 [0.225, 0.427] | +0.169 [0.134, 0.204] |
Why: with three observers the inversion is algebraically r(GOES, MW) > r(radar, GOES); it cannot say whose error it is.
T1 showed a sharp, independent fourth observer can. Rain gauges are that observer: point measurements of surface rain used by
neither MRMS radar-only, IMERG Late nor GOES. Design (T7_PLAN.md): Probe A2 windows with ≥ 5 reporting gauges;
every observer read at the gauge points (its value in each gauge's 0.1° cell); point centroids; split at the median radar peak.
P0: the (radar, GOES, MW) triplet reproduces the inversion at point support. P1: replace GOES with gauges; a shared satellite
error predicts the inversion vanishes, a radar light-rain error predicts it stays. P2: GOES–MW error correlation with radar and
gauges as instruments; shared satellite error predicts > 0.
Sample: 2,402 window-hours (median 9 gauges per window); split at 15.8 mm/h. This sample is wetter than T6's (rain is required at the points).
| variable | stratum | P0: (R, GOES, MW) nf_R − nf_MW | P1: (R, MW, gauges) nf_R − nf_MW | P2: GOES–MW error corr. |
|---|---|---|---|---|
| centroid y | weak (n=1,201) | +0.195 [0.116, 0.281] | -0.196 [-0.260, -0.134] | +0.350 [0.287, 0.418] |
| centroid y | strong (n=1,201) | +0.185 [0.119, 0.255] | -0.216 [-0.270, -0.167] | +0.450 [0.386, 0.516] |
| centroid x | weak (n=1,201) | +0.203 [0.104, 0.312] | -0.259 [-0.335, -0.202] | +0.361 [0.284, 0.437] |
| centroid x | strong (n=1,201) | +0.302 [0.227, 0.393] | -0.365 [-0.444, -0.282] | +0.508 [0.458, 0.557] |
T7R_PLAN.md)T7 replaced GOES with gauges. Two checks it left open: the mirror triplet (replace microwave instead), and four-observer consistency. With four observers and one common signal, independent errors make three products of correlations equal ("vanishing tetrads"). A single shared GOES–microwave error inflates only r(GOES, MW), so the tetrad that excludes that pair (t3) should stay ≈ 0 while the two that include it (t1, t2) turn positive. Same sample, bootstrap seed 11.
| check | weak, y | weak, x | strong, y | strong, x | predicted |
|---|---|---|---|---|---|
| R1: nf_R − nf_GOES in (R, GOES, gauges) | -0.592 [-0.694, -0.494] | -0.624 [-0.730, -0.520] | -0.409 [-0.493, -0.330] | -0.560 [-0.661, -0.464] | < 0 |
| R1: nf_R − nf_gauges in (R, GOES, gauges) | -0.215 [-0.313, -0.125] | -0.255 [-0.372, -0.158] | -0.097 [-0.177, -0.026] | -0.247 [-0.361, -0.136] | < 0 |
| R2: nf_R with GOES dropped − with MW dropped | -0.029 [-0.072, 0.006] | -0.027 [-0.086, 0.024] | +0.036 [-0.002, 0.070] | +0.034 [-0.024, 0.088] | ≈ 0 |
| R3: tetrad t3 (excludes the GOES–MW pair) | +0.014 [-0.003, 0.033] | +0.012 [-0.010, 0.033] | -0.021 [-0.041, 0.001] | -0.014 [-0.037, 0.009] | ≈ 0 |
| R3: tetrad t1 | +0.120 [0.089, 0.153] | +0.137 [0.098, 0.177] | +0.140 [0.113, 0.167] | +0.203 [0.176, 0.234] | > 0 |
| R3: tetrad t2 | +0.134 [0.099, 0.173] | +0.148 [0.107, 0.191] | +0.120 [0.083, 0.156] | +0.189 [0.154, 0.229] | > 0 |
| triplet (weak, centroid y) | radar | GOES IR | microwave | gauges |
|---|---|---|---|---|
| radar, GOES, MW | 0.258 | 0.512 | 0.063 | — |
| radar, GOES, gauges | 0.033 | 0.625 | — | 0.248 |
| radar, MW, gauges | 0.063 | — | 0.259 | 0.225 |
| GOES, MW, gauges | — | 0.527 | 0.034 | 0.405 |
tetrad_audit): four observers
cannot tell a shared GOES–microwave error (relative to surface rain) from a shared radar–gauge error (relative to a cloud-system
signal). Reading it as a satellite error rests on taking surface rain as the target; a fifth observer, under explicit assumptions about its own signal and errors, could
separate the two.Design (T8_PLAN.md): anvil fraction = share of GOES cold-cloud cells with no radar surface rain. On the T7
gauge-instrumented sample, split into anvil terciles (means 0.12, 0.43,
0.75). P1: GOES–MW error correlation grows with anvil. P2: the (R, GOES, MW) inversion grows. P3: the
(R, MW, gauges) ranking keeps radar least noisy throughout. Anvil fraction correlates -0.34 with radar peak.
| anvil (mean) | GOES–MW error corr. | (R, GOES, MW) nf_R − nf_MW | (R, MW, G) nf R / MW / G | shared cov. (cells²) | error var. GOES / MW / gauges |
|---|---|---|---|---|---|
| 0.12 | +0.375 [0.282, 0.462] | +0.054 [-0.005, 0.114] | 0.028 / 0.217 / 0.180 | 1.31 | 5.32 / 2.29 / 2.31 |
| 0.43 | +0.409 [0.300, 0.499] | +0.178 [0.079, 0.268] | 0.049 / 0.217 / 0.207 | 1.63 | 6.15 / 2.57 / 3.24 |
| 0.75 | +0.389 [0.321, 0.464] | +0.362 [0.241, 0.512] | 0.081 / 0.325 / 0.248 | 2.64 | 9.75 / 4.72 / 4.70 |
Why: the external review (see the corrections box above) found that T1's blur did not conserve mass and that the satellite attribution assumed independent radar and gauge errors. Two pre-registered checks followed, with a decision gate after them.
T1BIS_PLAN.md)Truth rendered on a 64 × 64 canvas; blur is a true, mass-conserving Gaussian convolution; reads on the full canvas and in 15 × 15 windows (central and shifted). Analytical reference passed: centroid shift ≈ 10⁻¹⁵ cell, squared dispersion grows by 2σ² within 0.04%.
| region | S1–S2 error corr. (cy) | (cx) | (d) | max |error|, ranking: cy | d | d² |
|---|---|---|---|---|---|---|
| full canvas | -0.001 | +0.009 | +0.021 | 0.002 ✓ | 0.005 ✓ | 0.007 ✓ |
| central window | +0.009 | +0.018 | +0.057 | 0.003 ✓ | 0.011 ✓ | 0.012 ✓ |
| window shifted (+3,+3) | +0.019 | +0.015 | +0.123 | 0.006 ✓ | 0.024 ✓ | 0.024 ✓ |
| window shifted (−3,+4) | +0.023 | +0.020 | +0.140 | 0.005 ✓ | 0.031 ✓ | 0.031 ✓ |
Planted shared S1–S2 displacement, centroid y, full canvas: at σ_sh = 0.5 estimates R 0.090 / S1 0.095 (truth 0.046 / 0.135), not inverted; at σ_sh = 1.0 R 0.199 / S1 0.084 (truth 0.046 / 0.230), inverted. Five-observer benchmark (tetrad audit, 10 blocks): planted S1–S2 found 10/10, planted R–Gs (mirror) found 10/10, no false alarms with nothing planted.
T7S_PLAN.md)One-signal model for radar, gauges, GOES and microwave with an assumed radar–gauge error correlation ρ_RG (swept 0–0.5) and a free GOES–microwave error correlation, fitted by maximum likelihood. The fit is identical at every ρ_RG (the data cannot fix it), so the sweep traces the equivalence class.
| case | GOES–MW error corr. at ρ_RG = 0 | ρ*₁ (no longer detected) | ρ*₂ (ranking flips) | admissible |
|---|---|---|---|---|
| weak, centroid y | +0.361 [0.294, 0.427] | 0.5 | 0.425 | ≥ 0.5 |
| weak, centroid x | +0.368 [0.279, 0.447] | 0.5 | 0.475 | ≥ 0.5 |
| strong, centroid y | +0.431 [0.361, 0.498] | not reached (≤ 0.5) | 0.475 | ≥ 0.5 |
| strong, centroid x | +0.500 [0.442, 0.555] | not reached (≤ 0.5) | 0.5 | ≥ 0.5 |
GATE.md.T9_PLAN.md)| check | n | nf_R − nf_MW, centroid y | centroid x |
|---|---|---|---|
| baseline grid (15 × 15) | 14,751 | +0.224 [0.198, 0.255] | +0.193 |
| half-shifted grid | 14,691 | +0.199 [0.174, 0.227] | +0.175 |
| 25 × 25 windows | 8,435 | +0.181 [0.146, 0.211] | +0.191 |
| point reversal (radar, gauges, MW), half-shifted grid | 3,061 | -0.231 [-0.269, -0.196] | -0.297 |
| point reversal, 25 × 25 windows | 3,084 | -0.210 [-0.253, -0.174] | -0.248 |
| fixed sample, radar blurred to matched smoothness σ* = 0.4 | 14,725 | +0.218 [0.192, 0.250] | +0.188 |
| fixed sample, σ = 3 | 14,725 | +0.145 [0.121, 0.176] | +0.104 |
T10_PLAN.md)The July pipeline, frozen with script hashes, run on 2024-08-01 01:00 to 08-22 00:00 UTC; August data were fetched only after
the plan was frozen. Before any August analysis the period switch was added and July was rerun: every results file reproduced
byte-for-byte. An independent re-implementation from the plan files alone (audit/AUDIT.md) also reproduced 101 July
quantities to 4 × 10⁻⁹. Gates: 1,933 point-support window-hours, 14,738 area window-hours, largest
negative-variance share 0.10; not inconclusive.
| quantity | July (in-sample) | August (T10) | met | |
|---|---|---|---|---|
| H1 | area Δ cy | +0.221 [0.194, 0.250] | +0.259 [0.228, 0.289] | yes |
| H1 | area Δ cx | +0.193 [0.164, 0.224] | +0.189 [0.161, 0.214] | yes |
| H2 | point (R,GIR,MW) Δ weak cy | +0.195 [0.116, 0.281] | +0.244 [0.124, 0.366] | yes |
| H2 | point (R,GIR,MW) Δ weak cx | +0.203 [0.104, 0.312] | +0.244 [0.140, 0.362] | yes |
| H3 | point (R,MW,G) Δ weak cy | -0.196 [-0.260, -0.134] | -0.286 [-0.374, -0.181] | yes |
| H3 | point (R,MW,G) Δ weak cx | -0.259 [-0.335, -0.202] | -0.329 [-0.419, -0.249] | yes |
| H3 | point (R,MW,G) Δ strong cy | -0.216 [-0.270, -0.167] | -0.210 [-0.286, -0.138] | yes |
| H3 | point (R,MW,G) Δ strong cx | -0.365 [-0.444, -0.282] | -0.279 [-0.355, -0.215] | yes |
| H4 | mirror R1_R_minus_IR weak cy | -0.592 [-0.694, -0.494] | -0.572 [-0.675, -0.468] | yes |
| H4 | mirror R1_R_minus_G weak cy | -0.215 [-0.313, -0.125] | -0.174 [-0.276, -0.061] | yes |
| H4 | mirror R1_R_minus_IR weak cx | -0.624 [-0.730, -0.520] | -0.659 [-0.780, -0.541] | yes |
| H4 | mirror R1_R_minus_G weak cx | -0.255 [-0.372, -0.158] | -0.299 [-0.449, -0.154] | yes |
| H5 | c(GIR,MW) weak cy | +0.350 [0.287, 0.418] | +0.425 [0.317, 0.518] | yes |
| H5 | c(GIR,MW) weak cx | +0.361 [0.284, 0.437] | +0.402 [0.322, 0.487] | yes |
| H6 | tetrad t1 weak cy | +0.120 [0.089, 0.153] | +0.164 [0.108, 0.219] | yes |
| H6 | tetrad t2 weak cy | +0.134 [0.099, 0.173] | +0.158 [0.101, 0.215] | yes |
| H6 | tetrad t3 weak cy | +0.014 [-0.003, 0.033] | -0.006 [-0.025, 0.013] | yes |
T10_RESULTS.md): the
data root is chosen by working directory; a missing stations-table producer was added (byte-identical on July); the H1 interval uses
the Probe A2 bootstrap draws with Δ added; IMERG was fetched with one download per file (arrays identical on a July test file).
What T10 does not change: four observers still cannot separate the satellite reading from correlated radar–gauge errors, and both
months are adjacent warm-season CONUS.Finding IDs are stable identifiers (the trail refers to them); the list is ordered by weight, not by ID.
GATE.md. On real data the inversion is robust to the tested window grids and the smoothness match.
T10 (August replication): done, replicated (§12). Remaining, not started: a real fifth observer; lineage benchmark; a
different season or region.notes/synthetic-shared-error/.audit/AUDIT.md.Everything is in Documents/russell/precip-disagreement/. Raw files were never stored: each was streamed, reduced
(block means, crops, gauge-pixel samples) and discarded. Reduced arrays live in data/ (git-ignored, ~1.9 GB).
Credentials: an Earthdata token in secrets/ (git-ignored, owner-only).
cd precip-disagreement uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python numpy scipy pandas h5py eccodes eccodeslib matplotlib pypdf .venv/bin/python scripts/fetch_gauges.py # USCRN + ASOS -> data/gauges.csv .venv/bin/python scripts/make_stations.py # unique stations -> data/stations.csv (reproduces the original inline step) .venv/bin/python scripts/fetch_mrms.py # MRMS radar-only + RQI, top-of-hour -> data/mrms/ .venv/bin/python scripts/fetch_imerg.py # IMERG Late merged, cropped -> data/imerg/ .venv/bin/python scripts/fetch_imerg_extra.py # IMERG IR, MW, randomError -> data/imerg_x/ .venv/bin/python scripts/analyze.py # Experiment 1 -> data/results.json, samples*.csv PYTHONPATH=scripts .venv/bin/python scripts/probe_a.py # Probe A PYTHONPATH=scripts .venv/bin/python scripts/probe_a_posthoc.py # post-hoc (labelled) .venv/bin/python scripts/fetch_goes.py # GOES-16 band 13 -> data/goes/ PYTHONPATH=scripts .venv/bin/python scripts/probe_a2.py # Probe A2 PYTHONPATH=scripts .venv/bin/python scripts/t1_synthetic.py # T1 synthetic anchor (seed 20261015) PYTHONPATH=scripts .venv/bin/python scripts/t1_explore.py # T1 exploratory E1, E2 PYTHONPATH=scripts .venv/bin/python scripts/t5.py # T5 (synthetic arm, smoothness match, ladder) .venv/bin/python scripts/t5_offsets.py # T5 exploratory offsets PYTHONPATH=scripts .venv/bin/python scripts/t6.py # T6 core vs area PYTHONPATH=scripts .venv/bin/python scripts/t6_intensity.py # T6 exploratory: by intensity PYTHONPATH=scripts .venv/bin/python scripts/t6_rqi.py # T6 exploratory: by RQI PYTHONPATH=scripts .venv/bin/python scripts/t7.py # T7 gauges as fourth observer .venv/bin/python scripts/t7_robust.py # T7-R robustness (mirror triplet, tetrads) .venv/bin/python scripts/t1bis.py # T1-bis corrected synthetic audit (seed 20261016) .venv/bin/python scripts/t7s.py # T7-S radar–gauge sensitivity (seed 13) PYTHONPATH=scripts .venv/bin/python scripts/t9.py # T9 window grid + fixed-sample smoothness (seed 21) PYTHONPATH=scripts .venv/bin/python scripts/t10_area.py _july # T10 H1 interval on July (same draws as Probe A2) .venv/bin/python scripts/t10_score.py _july # T10 scorer, July reference # T10 August: cd runs/aug (data -> ../../data_aug), export PRECIP_PERIOD=aug, then # fetch_gauges, make_stations, fetch_mrms, fetch_goes, fetch_imerg_both; probe_a2, t10_area, t7, t7_robust, t7s, t10_score PYTHONPATH=scripts .venv/bin/python scripts/t8.py # T8 anvil fraction PYTHONPATH=scripts .venv/bin/python scripts/t8_abs.py # T8 exploratory absolute errors .venv/bin/python scripts/make_figures.py && .venv/bin/python build_labbook.py
Environment at build: Python 3.12.11 · numpy 2.5.4 · scipy 1.18.1 ·
pandas 3.0.6 · h5py 3.16.0 · matplotlib 3.11.2 · macOS-26.3-arm64-arm-64bit.
Randomness: bootstrap seeds fixed in code (scramble null 20261015; decision bootstrap 7; collocation 11; T1 fields 20261015, G bootstrap 3, E2 noise 99; T5 bootstrap 5; T6 bootstraps 5, 6, 8; T7 bootstrap 7; T8 bootstrap 9; T7-R bootstrap 11; T7-S 13; T9 21; T10 reuses each analysis's own seed).
Known deviations from plan: Experiment 1 excludes gauges within 1° of the domain edge (so the 1.0° sweep window fits);
Probe A2 dropped 2 GOES hours per its own rule; the stations table was built inline after the gauge fetch (now reproduced by scripts/make_stations.py, byte-identical).
| file | SHA-256 (first 16) |
|---|---|
scripts/fetch_gauges.py | ea8f390a5c858e98 |
scripts/fetch_mrms.py | a9694e880be9ca85 |
scripts/fetch_imerg.py | 0e59f72e3633f089 |
scripts/fetch_imerg_extra.py | 2a051abe9a7799b0 |
scripts/fetch_goes.py | b4b1f0bf67ed27b3 |
scripts/analyze.py | e30ebc58d0a866d7 |
scripts/probe_a.py | aa50a997b664759c |
scripts/probe_a_posthoc.py | 42eeddb7bac8fc06 |
scripts/probe_a2.py | 259d8714d7ebf466 |
scripts/t1_synthetic.py | 267fb3a4ddf95c91 |
scripts/t1_explore.py | 721399c799b67d23 |
scripts/t5.py | 40d1dbe4fcfcc001 |
scripts/t5_offsets.py | 697727c1eb7e1f55 |
scripts/t6.py | a1fa9be46a2a30de |
scripts/t6_intensity.py | 908889c5e3cb25e0 |
scripts/t6_rqi.py | 6cb3138686370578 |
scripts/t7.py | 84b440bf959a51b7 |
scripts/t7_robust.py | 4adfcdcf0daafdb3 |
scripts/t8.py | ec517db6599e6e1c |
scripts/t8_abs.py | 61a14f5e29988fb2 |
scripts/t1bis.py | fff1f4c999f787cf |
scripts/t7s.py | 0ebabbecc99c7262 |
scripts/t9.py | 6ca47b5bc59aa5aa |
scripts/period.py | d47a9cc89d651f4e |
scripts/make_stations.py | 3cadbeb12b243236 |
scripts/fetch_imerg_both.py | b7a713b095f019d0 |
scripts/t10_area.py | 22b88fd999ff3633 |
scripts/t10_score.py | 60af00bc5222bd5d |
scripts/make_figures.py | 13453196d7b2dd23 |
build_labbook.py | b410c6f7f0fbac45 |
FEASIBILITY_PLAN.md | 49d833ff9efa83bd |
FEASIBILITY_RESULTS.md | d7f2c06bb8c6dea3 |
RESEARCH_SYNTHESIS.md | de4c5f9e1cb72b22 |
PROBE_A_PLAN.md | b7d8d045863cc916 |
PROBE_A_RESULTS.md | c802fd2f6a88402c |
PROBE_A2_PLAN.md | 0748d5e94ea9db49 |
PROBE_A2_RESULTS.md | df5fd332c4a05369 |
T1_PLAN.md | dd6ddeaf3cff9c83 |
T1_RESULTS.md | 5d16a05cd01d7166 |
T5_PLAN.md | 970042e88b6d2bb4 |
T5_RESULTS.md | 51db8a402fb3a1d7 |
T6_PLAN.md | 17b3d99317e5607d |
T6_RESULTS.md | 31cacd1b961b6010 |
T7_PLAN.md | 00ec8a27cc6f66ad |
T7_RESULTS.md | bd1243beee2a6434 |
T7R_PLAN.md | c9f90abeed3bf6dd |
T8_PLAN.md | cf31d5b03a80c560 |
T8_RESULTS.md | 7ceba56926596906 |
T1BIS_PLAN.md | c459c8cb76f19c28 |
T1BIS_RESULTS.md | d3c020908f0305db |
T7S_PLAN.md | d7262cef23842258 |
T7S_RESULTS.md | 90d32b0426114561 |
T9_PLAN.md | 31a0f82f1739249d |
T9_RESULTS.md | 59f97a9998ab05fe |
T10_PLAN.md | cfaa617756b9769e |
T10_RESULTS.md | 67d777d9a25771cb |
GATE.md | a51f872eb9006c27 |
literature/INDEX.md | afaf9ed3e64bd015 |
data/results.json | 0a6de2a10b7c9c8a |
data/probe_a_results.json | ee0ca7455d5ec117 |
data/probe_a_posthoc.json | 4f0bb91ec710b41e |
data/probe_a2_results.json | ce9bc6ed07888b25 |
data/t1_results.json | 79f589b0d7b5ffaf |
data/t1_explore.json | c5d7848b51ee20a6 |
data/t5_results.json | e38186cfda30e725 |
data/t5_offsets.json | 02333b8022f4ad8c |
data/t6_results.json | afbf5a576c9ba9ae |
data/t6_intensity.json | 185e30a726b13f66 |
data/t6_rqi.json | 1549ac006d5a8dcf |
data/t7_results.json | cad351fc370d1a19 |
data/t7r_results.json | a56544ff658da0ef |
data/t8_results.json | 4693f67cd2b2e03c |
data/t8_abs.json | 8c52b2ba11008790 |
data/t1bis_results.json | 854d05db79fa1409 |
data/t7s_results.json | 2e90f4c04d63c2a3 |
data/t9_results.json | ec4206d4d0fb3c45 |
data/t10_area_july.json | 0789e8e01ffc1741 |
data/t10_score_july.json | f340c60ea60f3dc3 |
data_aug/t10_area.json | 90615d0d8b349132 |
data_aug/t10_score.json | dcbf27c6fd893548 |
data_aug/t7_results.json | b4a53bea93e24809 |
data_aug/t7r_results.json | bdfd77b1877b6b8e |
data_aug/t7s_results.json | 749780b0698403d3 |
data_aug/probe_a2_results.json | 2def94fc49c4cf20 |
Reduced input data (what every analysis reads; digest = SHA-256 over sorted file names and contents, first 16). Upstream archives can be reprocessed, so a rerun of the fetch scripts may not reproduce these digests exactly.
| directory / file | files | size | digest |
|---|---|---|---|
data/mrms/ | 504 | 227 MB | 2b590d699c3ca931 |
data/imerg/ | 1,008 | 988 MB | eb21d4753b446255 |
data/imerg_x/ | 1,008 | 131 MB | 59be2c248ba1e366 |
data/goes/ | 502 | 319 MB | 659e034be857a808 |
data_aug/mrms/ | 504 | 229 MB | f77e0243e4895db7 |
data_aug/imerg/ | 1,008 | 988 MB | d24aecdedf7c3ea9 |
data_aug/imerg_x/ | 1,008 | 138 MB | bbdf2afc5a5c6241 |
data_aug/goes/ | 504 | 320 MB | 9db03850a89f7f60 |
data/gauges.csv | 1 | 55.0 MB | 7161420d8187f783 |
data/stations.csv | 1 | 0.1 MB | ea22c9af9a53fcdb |
data_aug/gauges.csv | 1 | 55.1 MB | 5f17e6d3f214b021 |
data_aug/stations.csv | 1 | 0.1 MB | bfd5529bfa27ea04 |
Data sources: MRMS s3://noaa-mrms-pds; GOES-16 s3://noaa-goes16 (NOAA Open Data:
open, attribution requested); IMERG GPM_3IMERGHHL.07 at NASA GES DISC (Earthdata login); USCRN
ncei.noaa.gov/pub/data/uscrn/products/hourly02; ASOS via Iowa Environmental Mesonet asos.py.
Literature in literature/ (git-ignored PDFs; index in literature/INDEX.md).