Water level: observed, NOAA, and the filter’s forecast
Last 48 hours of gauge readings, then a 36-hour forecast with its 95% band. Heights in feet above MLLW, times Pacific.
The residual: what NOAA’s prediction misses
Gray dots are z = observed − NOAA − barometer term. The teal line is the filter’s running estimate of it, projected forward with its uncertainty.
The most recent step, with real numbers
Parameters, re-estimated every night
NOAA’s tidal error, one constituent at a time
Amplitude of the correction the filter applies at each tidal frequency, with its 1σ uncertainty now, and how each has evolved day by day. A correction that settles away from zero is a real, repeatable error in the prediction, not weather.
Where the error lives in frequency
Amplitude spectrum of the raw residual (gray) and of the filter’s surge state η (teal). The spikes near 1 and 2 cycles/day are tidal. The harmonic states take them out, so what’s left in η is weather.
Forecast error by lead time
Root-mean-square error (ft) against what the gauge actually read. “NOAA + bias” only shifts the prediction by the filter’s current datum offset. It’s the fair baseline, so the filter gets no credit just for correcting the datum.
How the filter works
Numbers in teal are the filter’s live values, filled in from the latest run.
Use the data
Everything on this page comes from two public endpoints:
/api/tides/kalman — the filter’s full state, history, forecast, parameters and skill (JSON).
/api/tides/licor/download — the raw 5-minute gauge record, MLLW-referenced (CSV; add ?format=json).