Forward model: thinned marked temporal point process (TMTPP) over emission events, with per-event marks drawn from Tier I–IV posteriors and per-event detection thinning by per-satellite POD models.
This tier sits above the per-event physics tiers. Tiers I–IV answer “what’s the emission rate from this plume right now?” — single overpass, single source. Tier V answers a different family of questions:
Inventory accounting: “Given a population of detected plumes (and the ones we missed), what’s the true total emitted mass?”
Forecasting: “For a given facility class, when will the next emission event happen, and how big will it be?”
Bias diagnosis: “How biased is the per-overpass average rate when satellites only see the big leaks?”
Inventory and forecasting are co-equal products of Tier V — not just totals. The inverted intensity directly powers operational forecasts (dispatch windows, occurrence probabilities); see Persistency.
Sub-pages:
Instantaneous emission estimation — single-overpass ; the cross-tier interface that turns per-event posteriors into mark likelihoods.
Point process model (TMTPP) — the generative foundation: temporal intensity , marks , and detection thinning .
Persistency — operational forecasts from inverted : wait times, dispatch windows, occurrence probabilities.
Total emission estimation — the missing-mass paradox and POD-corrected regional/national totals.
TMTPP foundations — the three-term log-likelihood¶
The full population log-likelihood has three terms (derived in 06b; foundations in [daley2003,daleyVereJones2008]):
The third term is what makes and jointly identifiable — without it the two trade off.
Mark contribution and the soft-observation framing¶
The per-event posterior from Tiers I–IV is a soft observation of the (unknown) true mark . This is the same Bayesian-deconvolution / errors-in-variables structure used in measurement-error regression. The per-event mark contribution is:
where is the per-event likelihood, not the posterior. In sample-based practice (per-event posterior samples ):
with the per-event prior used at Tier I–IV. The ratio is the importance weight that re-points the per-event posterior at the population mark distribution.
This is the central math of cross-tier inference. Currently the prototype in plumax.population.fitting summarises per-event posteriors to point estimates before the population fit, side-stepping the importance correction. Formalising this is the v1 deliverable for 06_tier5a_instantaneous.md.
How the cycle adapts at population scale¶
The six-step cycle still applies, but the objects change:
Six-step cycle adaptation: Tier I–IV (per event) vs. Tier V (population).
| Step | Tier I–IV (per event) | Tier V (population) |
|---|---|---|
| 1 — Simple model | Forward physics (plume / PDE / RTM) | Generative TMTPP: + mark + POD |
| 2 — Model-based inference | MAP / MCMC over source params | NumPyro NUTS over . Cheap at events (minutes); hours-to-days at events (national catalog) |
| 3 — Model emulator | FNO / neural ODE on the PDE | Skip when NUTS fits in budget. Optionally a normalising flow over the population posterior for repeated re-fits or sensitivity studies |
| 4 — Emulator-based inference | PDE-free 4D-Var | Variational fit (numpyro.infer.SVI) or flow-based posterior approximation; required at national catalog scale |
| 5 — Amortized predictor | Per-overpass predictor | posterior over conditioned on per-event evidence and met-region context |
| 6 — Improve | Better physics | Spatial point process (links to Tier III); multi-satellite fusion; varying-coefficient POD (per-(basin, season, scene class) hierarchy); non-Poisson clustering (Hawkes / Cox) |
Tile definition: an H3 hex-resolution-7 cell (~5 km²) for sub-basin work, or a basin polygon for inventory accounting. History window: 30–365 days, hierarchical prior on the cutoff.
Varying-coefficient POD: parameters indexed by with hierarchical shrinkage to the global POD. Captures regional / seasonal detection differences without inflating parameter count.
Cross-tier interface — the load-bearing contract¶
Payload schema¶
Every per-event posterior consumed by Tier V must carry:
Per-event posterior payload — fields, types, notes.
| Field | Type | Notes |
|---|---|---|
posterior_samples | (S,) array of draws | OR posterior_summary for Gaussian shorthand |
posterior_summary | lognormal quick form when full samples are too heavy | |
per_event_prior_logpdf | callable | required for the importance correction; without it the population fit is biased |
instrument_id | str | dispatch into per-instrument POD |
t_detection | float (UTC seconds) | for |
x0_posterior | for spatial Cox-process upgrade | |
quality | dict | confidence flags from the Tier I–IV quality bitmask |
Independence assumption — the v1 caveat¶
The factorised likelihood above assumes detections at different overpasses are independent. Two overpasses of the same physical leak (e.g. GHGSat then TROPOMI two days later) violate this.
Validation strategy¶
Population SBC. Generate , simulate the full thinned-and-marked catalog with a synthetic per-event posterior layer, fit, check rank statistics across all hyperparameters. The Tier V analogue of Tier-I synthetic recovery.
Importance-weight ESS diagnostic. Per detection , the IS estimator’s effective sample size is a health metric. Low ESS (e.g. ) signals that the per-event posterior is far from the population mark distribution; the population fit is unreliable for that event. Report the ESS distribution as a fit diagnostic.
Per-event-prior swap-out. Refit the population using a different per-event prior at Tier I–IV (re-run Tiers I–IV with instead of the inventory-anchored prior). The population posterior on should not move beyond IS noise. If it does, the importance correction is mis-implemented.
Real-data benchmark. Compare corrected total emission for a well-studied basin (Permian) to published bottom-up inventories ([epa_ghgi,scarpelli2020sectoral], GHGRP) and top-down inverse-modelling estimates ([maasakkers2023ghgi,jacob2022quantifying], Sherwin et al.) — see 06d.
Module layout¶
The formerly standalone methane_pod library (intensity and POD registries, missing-mass simulator, NUTS fitter) now lives in tree under plumax.population. Generic point-process machinery — compensators, thinning samplers, Hawkes, goodness-of-fit — is meant to come from xtremax.point_processes rather than be re-implemented here (#106); only the methane-domain primitives stay in plumax.
Tier V module layout — concern, target module, status.
| Concern | Module | Status |
|---|---|---|
| Intensity registry | plumax.population.intensity (13 kernels) | ✓ in tree; xtremax generative layer ☐ #106 |
| POD registry | plumax.population.pod (10 models) | ✓ in tree |
| Missing-mass MC simulator | plumax.population.paradox | ✓ in tree |
| NUTS fitter | plumax.population.fitting (POD-modified power law) | ✓ in tree; importance-correction integration ☐ #108 |
| Per-event posterior summariser | plumax.population.catalog (PerEventPosterior.samples) | ☐ #107 |
| Per-event prior recall ( lookup) | plumax.population.catalog (PerEventPosterior.prior_logpdf) | ☐ #107 — required for importance weighting |
| Importance-weight calculator | plumax.population.importance | ☐ #108 |
| Multi-satellite POD union | plumax.population.pod.pod_union | ☐ #110 |
| Catalog schema (in-memory cross-tier) | plumax.population.catalog (EmissionEvent / EmissionCatalog) | 🚧 — in-memory Gaussian-summary catalog landed; CSV / parquet ingest #111 |
| Real-data CSV ingestion | plumax.population.ingest | ☐ #111 |
| Population SBC harness | plumax.population.validation | ☐ #114 |
| Importance-weight ESS diagnostic | plumax.population.importance.ess_report | ☐ #108 |
| Per-event-prior swap-out test | plumax.population.validation.prior_swap_test | ☐ #114 |
| Spatial Cox-process extension (v2) | plumax.population.spatial | ☐ v2 (temporal LGCP first: #115) |
The plumax.population subpackage holds the v1 core (catalog, size_distribution, point_process) and the methane-domain primitives ported from the former methane_pod library (intensity, pod, paradox, fitting). The port is self-contained; the remaining part of #106 is to rebuild the generative machinery on a git-pinned dependency on xtremax.point_processes (which already covers intensities, compensators, thinning samplers, Hawkes, marked processes, a ThinningProcess whose retention function is exactly , goodness-of-fit and survival / wait-time primitives). xtremax is not yet a declared dependency. The remaining rows are tracked under the Tier V epic #75.
Connection to Tier III — spatial structure¶
Tier III’s distributed source field is exactly a spatial inhomogeneous Poisson rate at the population level — temporally aggregated, this is the spatial intensity of a Cox process over emission events. The v2 spatial extension of Tier V is the same mathematical object Tier III already inverts at the per-event timescale, just averaged over a longer horizon. The two tiers should share the parameterisation: a Matérn GP prior on plays the role of both Tier III’s source-field prior and Tier V.v2’s spatial Cox-process intensity.
This isn’t a coincidence — it’s why plumax’s tier structure works: the same mathematical objects appear at different scales.
Status snapshot¶
Theory. ✓ TMTPP foundations (TMTPP theory), the intensity zoo and persistency are theory pages; the missing-mass paradox, intensity gallery and POD gallery are executed notebooks.
methane_podlibrary: ✓ in tree — intensity, POD, paradox simulator and NUTS fitter now live inplumax.population.{intensity,pod,paradox,fitting}. Rebuilding the generative layer onxtremax.point_processesis what remains of #106. What neither library has is the importance-weighted soft-observation mark likelihood — that stays #108.plumax.populationsubpackage: 🚧 — the v1 cross-tier catalog adapter (catalog.py), V.A hierarchical lognormal size-distribution fit (size_distribution.py), and V.B point-process core (point_process.py— closed-form Gamma-Poisson rate + log-linear inhomogeneous intensity) have landed (#14). The Gaussian-summary(emission_rate, emission_std)representation is consumed; the importance-corrected full-sample path is #107 + #108.Cross-tier integration: 🚧 — the tier-agnostic catalog (
event_from_posterioroverGaussianPosterior/LognormalPosterior/FusionPosterior) and per-event uncertainty propagation into the population fit have landed. Per-event posteriors still enter as Gaussian summaries; the extendedPerEventPosteriorpayload (samples + prior recall) is #107 and the importance correction — Tier V’s main outstanding code deliverable — is #108.Synthetic validation. The stationary NumPyro MCMC notebook recovers POD parameters on synthetic data without the soft-observation layer; the in-tree SBC harness is #114.
Real-data fit. ☐ No real-data fit notebook yet; IMEO / Tanager / Carbon Mapper / GHGSat ingestion is #111. Persistency metrics (V.C) are #112, the total-emission estimator (V.D) is #113, Hawkes / LGCP intensities are #115.