Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Three fields — a fully non-stationary GEV

Giving the shape ξ(s) its own Gaussian process too, and asking whether it helps

Abstract

The last step of the spatial build-up: every GEV parameter becomes its own Gaussian-process field. On top of the location μ(s) and scale σ(s) of notebook 08, the shape ξ(s) — the tail exponent — gets a third GP. The model is fully non-stationary, and fits with the same mean-field variational approximation as notebook 08. The point is as much diagnostic as predictive: ξ is barely identifiable even pooled globally (notebook 04), so we ask honestly whether a spatial prior can recover any tail geography, or whether the ξ(s) field just reproduces per-station noise. The answer shapes how far non-stationarity is worth pushing.

Keywords:non-stationary extremesGaussian processspatial shape parameteridentifiabilityvariational inference

Three fields: a fully non-stationary spatial GEV

Notebook 07 made the location spatial; notebook 08 added a spatial scale. The only parameter still forced to a single global value is the shape ξ\xi — the tail exponent that decides whether extremes are bounded (ξ<0\xi<0), light (ξ=0\xi=0) or heavy (ξ>0\xi>0). This notebook frees it too, giving the GEV a third Gaussian-process field and making it fully non-stationary:

ys,t∼GEV(μ(s), σ(s), ξ(s)),y_{s,t} \sim \mathrm{GEV}\big(\mu(s),\ \sigma(s),\ \xi(s)\big),
μ(s)=μ0+fμ(s)+εsμ,log⁡σ(s)=λ0+fσ(s)+εsσ,ξ~(s)=ξ0+fξ(s)+εsξ,ξ(s)=12tanh⁡ξ~(s),\begin{aligned} \mu(s) &= \mu_0 + f_\mu(s) + \varepsilon^\mu_s, \\ \log\sigma(s) &= \lambda_0 + f_\sigma(s) + \varepsilon^\sigma_s, \\ \tilde\xi(s) &= \xi_0 + f_\xi(s) + \varepsilon^\xi_s, \qquad \xi(s) = \tfrac12\tanh\tilde\xi(s), \end{aligned}

with three independent Matérn-3/2 GP fields, each with a fixed regional lengthscale and a fixed amplitude, plus per-station nuggets. The 12tanh⁡\tfrac12\tanh keeps ξ(s)\xi(s) in the stable, finite-mean band (−12,12)(-\tfrac12, \tfrac12) from notebook 04.

This is the natural end of the build-up — but more parameters is not the same as more knowledge. Notebook 04 showed ξ\xi is dominated by sampling noise even when estimated per station, and notebook 05 showed a hierarchy pools it almost to a constant. So the real question here is diagnostic: given a free spatial field, does ξ(s)\xi(s) discover any tail geography, or does it just paint the old per-station noise onto a map? We give fξf_\xi a deliberately small prior amplitude — the honest prior is that the tail barely varies — and look.

/Users/eman/code_projects/research_notebook/projects/spatial_extremes/.venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
source: REAL | stations 107 | years 1897-2025 (125)

The three-field model

The same gp_field helper as notebook 08, now called three times — each GP again uses a fixed lengthscale and amplitude (notebook 08 explains why a free amplitude is only weakly identified and destabilises the fit). The fixed amplitudes say how far we let each parameter roam: a few °C for the location, ~20% (in log units) for the scale, and a deliberately tight band for the shape — its honest setting is “nearly constant”, so the data must work hard to move it.

As in notebook 08, the scale also carries a linear covariate trend in elevation and distance-to-coast, log⁡σ(s)=λ0+β⊤c(s)+fσ(s)+εsσ\log\sigma(s) = \lambda_0 + \beta^\top c(s) + f_\sigma(s) + \varepsilon^\sigma_s — 08 showed elevation (not raw coordinates) is what the regional scale structure was really tracking, so we keep it here too.

Fit with mean-field VI

Mean-field VI fit in 13.3s · final ELBO loss 13978.3
<Figure size 600x320 with 1 Axes>

Read off the three fields

μ(s) range : 21.1 -> 43.4 °C
σ(s) range : 1.40 -> 3.98 °C
ξ(s) range : -0.338 -> +0.006 (global ξ in nb 07/08 was ≈ -0.19)
log-σ covariate effects (per 1 SD, 95% CI):
  β[elevation    ] = -0.093  (-0.11, -0.08)  ← excludes 0
  β[dist-to-coast] = -0.031  (-0.05, -0.01)  ← excludes 0

All three surfaces

Location, scale, and the newly-freed shape. Read the ξ(s)\xi(s) panel sceptically — and against the per-station ξ\xi scatter of notebook 04.

<Figure size 620x520 with 2 Axes>
<Figure size 620x520 with 2 Axes>
<Figure size 620x520 with 2 Axes>

Did freeing ξ buy anything?

The decisive check is signal vs noise for the shape field, the same ratio as notebook 04: the spread of ξ(s)\xi(s) across stations over the typical per-station 95% interval width. A value well below 1 means the across-station differences are small next to the uncertainty on each one — the map is mostly noise. (As in notebook 08 we fix the fξf_\xi amplitude rather than learn it, so it is this ratio — not an imposed field amplitude — that carries the verdict.)

ξ(s) signal/noise = SD(median) / mean CI width = 0.044 / 0.325 = 0.14
=> signal/noise 0.14 << 1: the across-station spread of ξ(s) is small next to
   the per-station uncertainty — little or no recoverable tail geography.
<Figure size 640x380 with 1 Axes>

Return levels — does the map move?

If the tail field is mostly noise, the z100z_{100} map should look much like the two-field model’s, but with wider intervals — the extra freedom in ξ\xi adds variance without adding signal. That trade-off is the whole lesson.

z100 median range : 25.3 -> 48.8 °C
z100 95% CI width : 10.4 °C avg (max 20.1) [nb 07 ≈ 2.7, nb 08 two-field for comparison]
<Figure size 620x520 with 2 Axes>
<Figure size 620x520 with 2 Axes>

Takeaway — where non-stationarity stops paying

The machinery scales effortlessly: three independent GP fields fit in the same few seconds, and the location and scale surfaces match notebooks 07–08. But the shape tells the cautionary half of the story. Freed in space, ξ(s)\xi(s) does not resolve into geography — its signal-to-noise stays well below one and its forest plot is the same wide, overlapping band we met at the very start in notebook 04. The data simply do not contain a recoverable map of the tail exponent; a spatial prior cannot conjure one, and paying for it in extra parameters only widens the return-level intervals.

That is the right note to end the build-up on. Spatial pooling is powerful exactly where there is structure to borrow — the location, and the scale (which, as the β\beta estimates above confirm, an elevation covariate carries better than a free GP) — and honest about where there is not. The useful working model for this dataset is notebook 08’s: a spatial location, an elevation-driven scale, and a global tail held in place by every station at once.