Gridded forecast
A GRIB or NetCDF file containing the model field(s)
you want to verify. The fcst dictionary in the config selects which fields
and levels to read.
Point-Stat is the MET tool you reach for when your “truth” is not a grid but a scattered set of measurements — surface stations, rawinsondes (weather balloons), aircraft, ships, buoys. It interpolates the gridded forecast down to each observation point, forms matched pairs, and then rolls those pairs up into a wide menu of verification statistics across the masking regions, thresholds, and observation types you choose.
Forecast models produce values on a regular grid. Many of the best observations, however, live at irregular points on the map. Point-Stat bridges that mismatch: it “matches gridded forecasts to point observation locations and supports several different interpolation options,” then computes continuous, categorical, and probabilistic statistics from the resulting pairs.
The everyday users are forecast verifiers and model developers who want to know, for example, “How good was my 2 m temperature forecast at the surface stations across the domain?” or “How well did predicted upper-air winds match the rawinsonde network?” Point-Stat answers those questions one observation type at a time, over the regions and thresholds you define.
A handful of terms recur throughout this page:
Gridded forecast — A model field laid out on a regular lattice of grid points — temperature, wind, precipitation, and so on.
Point observation — A measurement taken at a single location (a station, balloon, ship, or aircraft report), not on a grid.
Matched pair — One observed value paired with the forecast value interpolated to that same location and time. Matched pairs are the atoms from which every statistic is built.
Message type — A categorical label (inherited from PrepBUFR) that groups observations by platform — e.g. ADPSFC for surface synoptic, ADPUPA for upper-air.
Point-Stat takes two data inputs plus a configuration file.
Gridded forecast
A GRIB or NetCDF file containing the model field(s)
you want to verify. The fcst dictionary in the config selects which fields
and levels to read.
Point observations
A MET NetCDF point-observation file. You do not feed raw observations
directly — they are first reformatted by PB2NC (PrepBUFR) or
ASCII2NC (text). Python embedding for point obs is also supported.
Everything Point-Stat reports flows from a single operation: build matched pairs. For each qualifying observation, the tool interpolates the forecast field to that observation’s location (and, where needed, its vertical level), then stores the pair (forecast value, observed value) together with the station ID, coordinates, level, and the interpolation method used.
Vertical matching is handled before horizontal interpolation. When forecast and
observation levels coincide, they pair directly; when they differ, pressure-level forecasts
interpolate in the natural log of pressure, and height-above-ground forecasts interpolate
linearly in height. Surface forecasts are matched to the observation message types that the
configuration maps to the SURFACE group.
Once a population of matched pairs exists for a given field, region, threshold set, and message type, the statistics are simply summaries of that population — means and errors for continuous fields, contingency-table counts for yes/no events, reliability and Brier scores for probabilities, and so on.
How you bring the grid to the point is a real modeling choice. Each method works inside an
interpolation width W and a shape
(SQUARE or CIRCLE) that together define the neighborhood of grid
points around each observation. A width of 1 means “just the nearest grid point”; a width of
2 uses the 2×2 set of points enclosing the observation; a width of 3 uses the 3×3 square of
nine points centered on the nearest grid point.
| Method | What it does |
|---|---|
Nearest Neighbor | Assigns the value of the single closest grid point. No interpolation (W = 1). |
Bilinear | Linear interpolation using the four closest grid squares — i.e. the four grid points surrounding the observation — applied in each of the two dimensions in turn. |
Unweighted Mean | Simple average of all grid points in the neighborhood; distance is ignored. |
Distance-weighted mean (DW_MEAN) | Weights are the reciprocal of squared distance in grid coordinates, so closer points count more. |
Gaussian | Weighted sum following a Gaussian distribution; nearby points contribute more weight. |
Median | The median value within the interpolation neighborhood. |
Min / Max | The minimum or the maximum value within the neighborhood. |
Least-squares fit (LS_FIT) | Fits a plane z = α·x + β·y + γ over the W×W subgrid by least squares, then evaluates it at the observation point. |
Corner Point | Uses the four closest grid squares, interpolating to a chosen corner (upper/lower, left/right). |
Geography Match | Nearest grid point that also satisfies land/sea-mask and topography criteria. |
Best | Selects, from the neighborhood, the grid value that most closely matches the observation. |
.stat file.Point-Stat does not compute one number for the whole domain and stop. It slices the matched pairs along three axes, producing a separate set of statistics for each combination.
maskThe mask dictionary restricts which observations contribute to a given region:
grid — named grids (e.g. "FULL" for the entire domain).poly — polyline regions defined by lat/lon vertices.sid — explicit lists of station IDs.Finer station control comes from sid_inc / sid_exc (include or
exclude specific stations) and from obs_quality_inc / obs_quality_exc
(filter on observation quality flags).
message_typeObservations carry a message type, and Point-Stat “performs verification using observations
for one message type at a time.” The message_type entry in the obs
dictionary lists which to use; message_type_group_map bundles related types into
logical groups (by default the surface types map to SURFACE). Common types
include ADPSFC (surface synoptic), ADPUPA (upper-air),
SFCSHP (ship reports), and MSONET (mesonet).
cat_thresh / cnt_threshCategorical verification needs an event definition. cat_thresh applies a
threshold (for example, “precipitation ≥ 1 mm”) to both the forecast and the observation,
turning each pair into a yes/no outcome that feeds the contingency-table line types.
cnt_thresh conditions the continuous statistics on a value range.
Point-Stat writes a single STAT file
(point_stat_*…*.stat) holding every requested line type, and — when you ask for it
— optional per-type ASCII files (*_TYPE.txt). Each line type is toggled in the
output_flag dictionary to NONE, STAT, or
BOTH. The table groups the line types by the kind of verification they support.
| Line type | What it contains |
|---|---|
MPR | Matched-pair data — the raw (forecast, observation) values per point, with station ID, location, level, the interpolation method/points, applied thresholds, and any climatology values. |
FHO | Forecast, Hit, and Observation rates for a dichotomous (yes/no) event. |
CTC | Contingency Table Counts — the 2×2 cells: hits, false alarms, misses, correct negatives. |
CTS | Contingency Table Statistics derived from the 2×2 table — accuracy, bias, POD (probability of detection), FAR (false alarm ratio), CSI (critical success index), HSS (Heidke skill score), and more — with confidence intervals. |
MCTC | Multi-category Contingency Table Counts for variables with more than two categories. |
MCTS | Multi-category Contingency Table Statistics — accuracy, the Hanssen-Kuipers discriminant (true-skill statistic), HSS, and the Gerrity score (which gives more credit for correctly forecasting the rarer categories). |
CNT | Continuous Statistics — means, standard deviations, correlation, error metrics, and percentiles, with confidence intervals. |
SL1L2 | Scalar L1L2 partial sums — running totals (sums of the forecasts, observations, their products and squares, plus the count) rather than finished scores. L1L2 denotes the first- and second-moment sums. These component sums are what scalar continuous statistics are computed from, and they recombine exactly across runs (see the callout below). |
SAL1L2 | Scalar Anomaly L1L2 partial sums — like SL1L2 but built on anomalies (departures from a climatological baseline). Available only when a climatology is supplied; see climo_mean below. |
VL1L2 | Vector L1L2 partial sums — component sums for vector (wind) continuous statistics. |
VAL1L2 | Vector Anomaly L1L2 partial sums — vector anomaly partial sums against climatology. |
VCNT | Vector Continuous Statistics for wind — speed, direction, and vector-difference metrics. |
PCT | Probability Contingency Table Counts across probability bins, for probabilistic forecasts. |
PSTD | Probabilistic Statistics for dichotomous outcomes — reliability, resolution, the Brier score (mean squared error of the probability forecasts), and ROC area (how well the probabilities discriminate events from non-events). |
PJC | Probabilistic Joint/Conditional factorization — calibration, refinement, and likelihood by probability bin. |
PRC | Probabilistic ROC points — detection vs. false-detection rates across thresholds. |
ECLV | Economic Cost/Loss relative Value across cost/loss ratios. |
ECNT | Ensemble Continuous Statistics — HiRA only (High Resolution Assessment: the grid points in the neighborhood around an observation are treated as a small ensemble). The neighborhood values are scored as that ensemble. |
ORANK | Ensemble matched-pair / observation-rank information — HiRA only. |
RPS | Ranked Probability Score — HiRA only. |
SEEPS | Stable Equitable Error in Probability Space — a precipitation score that grades forecasts across dry / light / heavy categories and weights climatologically rarer events more heavily. |
SEEPS_MPR | SEEPS scores for individual matched pairs. |
Point-Stat’s behavior lives almost entirely in its configuration file. The entries below are the ones you touch most often.
fcst / obs — Select the forecast and observation fields, levels, and (in obs) the message_type list. When the two share naming conventions you can write obs = fcst; to copy the forecast settings.
output_flag — One switch per line type — NONE skips the computation entirely, STAT writes to the unified .stat file, and BOTH also emits a separate per-type ASCII file.
interp — The interpolation method, width, shape (SQUARE/CIRCLE), and vld_thresh (the fraction of the neighborhood that must hold valid data).
mask — The verification regions — grid, poly, and sid.
cat_thresh / cnt_thresh — Thresholds that define categorical events and condition continuous statistics.
ci_alpha / boot — Confidence-interval controls. ci_alpha sets the alpha (e.g. 0.05); methods include parametric (normal approximation) and nonparametric bootstrap, which resamples matched pairs with replacement.
regrid — Optional regridding applied before matching.
duplicate_flag / obs_summary — How to handle duplicate observations and how to summarize multiple observations that fall together (NONE, MIN, MAX, MEAN, MEDIAN).
land_mask / topo_mask — Land/sea and topography constraints used by the geography-match interpolation.
climo_mean / climo_stdev / climo_cdf — An external climatology — a long-term average baseline for the field (what is “normal” for this time and place). Supplying it unlocks anomaly statistics (an anomaly is the forecast’s or observation’s departure from that baseline) and skill scores, which measure how much better the forecast does than simply predicting the climatological normal.
hira — Enables the High Resolution Assessment neighborhood method (flag, width, shape, vld_thresh, cov_thresh), producing the ECNT/ORANK/RPS line types.
seeps — Controls the SEEPS precipitation score.
On the command line, Point-Stat is invoked as point_stat fcst_file obs_file config_file
plus optional flags such as -outdir, -obs_valid_beg /
-obs_valid_end (override the observation time window),
-point_obs (add more NetCDF obs files), -log, and
-v (verbosity 0–9, default 2).
PB2NC or text with ASCII2NC into a MET NetCDF point-observation file.fcst/obs fields, message_type, mask regions, cat_thresh, interp method/width, and switch on the line types you want in output_flag.point_stat with the forecast file, the NetCDF observation file, and the config, sending results to -outdir..stat file (or the per-type .txt files). Each row carries header columns plus the statistics for its line type, region, message type, and threshold..stat output to Stat-Analysis to combine across cases, and on to METviewer / METplotpy for plots.Point-Stat is one stage in a longer verification pipeline. Its job is to turn forecasts and point observations into matched pairs and statistics; other tools take it from there.
If your “truth” is itself a grid (such as an analysis or a radar mosaic) rather than scattered points, its sibling tool Grid-Stat is the right counterpart — it applies the same statistical machinery to grid-to-grid comparisons.
A derived, human-readable re-presentation — not official documentation. Sources: MET User’s Guide — Point-Stat Tool