Fifty American cities, one strange season, and the mathematics of displacement
There is a moment, sometime around the second week of February, when a winter declares itself. By then the cumulative evidence is in: the coats you needed or did not, the mornings you scraped ice or skipped the step entirely. By February you know what kind of winter it was, even if you lack the vocabulary to say so precisely. This past winter, in many American cities, the vocabulary failed.
In Denver, February felt like early April. In Boston, winter held a grudge. Snow piled on snow. The T ran late, then later, then not at all.
We set out to measure this. Fifty cities across the United States, compared against thirty years of their own history. Winter 2025–26—December through February—against the 1991–2020 period, which climatologists call the “normal.” The word deserves its quotation marks. Normal is just the past tense of weather, averaged.
A note on what we measured and what we did not. Fifty cities is not America. Our sample skews toward the Northeast and toward large metros. Rural weather, which is most of the country’s geography if not its population, is absent here. The Southern Plains are underrepresented. Hawaii is missing entirely. What follows is a portrait of fifty places, not a census. That said: even in this biased sample, the patterns are striking.
The national average temperature anomaly across our fifty cities came out to +1.4°F. A small number. But national averages are to weather what GDP is to the economy—a figure that describes no one’s actual experience. Twenty cities ran warmer than their norms. Fifteen ran cooler. Fifteen landed within the range of the expected.
The average itself carries a quiet limitation. Our baseline, 1991–2020, already includes three decades of warming. The “normal” is not some fixed, Platonic climate. It is a sliding window that absorbs the recent past, making each generation’s strange weather the next generation’s ordinary. A +1.4-degree anomaly measured against an already-warm baseline is more remarkable than it sounds.
The West ran warm. Denver posted +11.1°F above its thirty-year average. Billings, Montana came in +9.1°F above. Las Vegas, +7.0°F. Phoenix, +6.7°F. Boise, Reno, Albuquerque, Tucson, Salt Lake City—all five or more degrees above the script.
The East cooled. New York posted -5.3°F below normal. Boston dropped -3.7°F and added snow beyond what history would suggest is plenty. Buffalo added to its surplus. Cleveland, Detroit, the great frozen crescent of the Northeast and Great Lakes—they all bent deeper.
This east-west dipole is not random. The jet stream—that atmospheric river at thirty thousand feet—buckled and held its shape for much of the season. A persistent ridge of high pressure sat over the West like a warm lid, while a trough funneled Arctic air south and east. This pattern has a name in meteorology: an amplified Rossby wave. It is consistent with what La Niña winters tend to produce—the tropical Pacific’s cold phase nudges the jet stream northward over the West and drops it southward over the East, splitting the continent thermally.
NOAA’s Climate Prediction Center had forecast a “tilt of the odds” toward exactly this pattern for a La Niña winter. The forecast was correct in direction, though the magnitude—eleven degrees hot in Denver, five degrees cold in New York—exceeded what seasonal outlooks typically capture. The atmosphere followed the script’s stage directions but ad-libbed the dialogue.
The most useful thing we did with this data was to ask a question borrowed from science fiction: if your city’s winter was teleported, where did it land?
The method is straightforward. Take each city’s actual winter and compare it to the thirty-year normal of every other city. The closest match, measured by normalized Euclidean distance, tells you whose winter you actually had.
Denver became Albuquerque. Boston became Burlington, Vermont. New York became Albany. Las Vegas turned into El Paso. Anchorage, which expected snow and did not get it, landed nearest to Burlington—not because Anchorage got warm, but because its snow deficit made it unrecognizable as itself.
Seven cities stayed close enough to their own norms that their nearest match was themselves. Phoenix was among them, though barely. These are the places where winter still resembles winter. The autobiography holds.
The teleportation question tells you where your city went. But the distance matrix tells you something more fundamental: how alone your city is. Not emotionally. Mathematically. Every city sits at a point in climate space, and some points have neighbors and some do not.
Cities at the temperature extremes—Miami, Anchorage, Phoenix—live in a kind of climate solitude. Their nearest neighbor in the distance matrix is still far away. Anchorage’s nearest match is Burlington, VT, at a distance of 0.259. Miami’s is Tampa at 0.149. These cities have no close twins in our dataset. Their weather is too distinctive for comparison. They are the only copies of themselves.
Anchorage was the most displaced city in the dataset. Its self-distance—the distance between its actual winter and its own thirty-year normal—was 0.492, the highest of all fifty cities. Its winter was the furthest from its own autobiography. And yet its z-scores are modest: -1.18 for temperature. This is the interesting part. The model and the distance metric agree: Anchorage was weird, but weird across multiple dimensions simultaneously. Temperature alone does not capture it. The combination of warmer temperatures, less snow, and less precipitation pushed Anchorage far from itself—a displacement that no single variable reveals.
Richmond, VA occupies the opposite position. Its average distance to all other cities was 0.371, the lowest in the dataset. Richmond sits in the mathematical center of American winter—close enough to many cities that it could almost belong anywhere south of the Mason-Dixon line and east of the Mississippi. Portland, Oregon is its inverse: the highest average distance at 0.779. Portland is climatically alone, a mild wet anomaly in a dataset of cold dry winters and hot dry ones.
At the pair level, the extremes confirm what intuition suspects. Albany and Burlington are practically the same city, climatically, with a distance of 0.038. Miami and Anchorage are the most different pair at 1.443—which surprises no one, but it is nice when the math confirms the obvious.
More interesting are the cities that stayed themselves. Ten cities matched themselves—their actual winter was closer to their own thirty-year normal than to any other city’s. Tampa was the most emphatically itself, with a self-distance of just 0.040. Minneapolis was right behind at 0.042. Seven of the ten self-matching cities were either in very warm climates (Miami, Tampa, Phoenix) or very cold ones (Minneapolis, Burlington). The extremes held. The middle drifted.
There is a pattern in that. The cities with the most distinctive climates—the ones that sit at the edges of the distribution—are the ones that stayed put. They have nowhere to go. A mild winter in Miami is still Miami. A warm winter in Minneapolis is still, recognizably, Minneapolis. But a warm winter in Denver is Albuquerque. A cold winter in New York is Albany. The cities in the middle of the distribution have more neighbors, and when the weather shifts, it shifts them into someone else’s territory. The center does not hold because the center has options.
Our snowfall figures come from Open-Meteo’s reanalysis archive, which derives snowfall from precipitation and temperature using the ERA5 climate model. This method systematically underestimates actual measured snowfall, particularly in lake-effect regions (Buffalo, Cleveland) and mountain cities (Denver, Salt Lake City), where local atmospheric dynamics produce more snow than a gridded model captures. Buffalo’s historical average appears as roughly 28 inches in our data; the actual measured December–February average is closer to 55 inches.
The analysis remains valid because we are comparing each city against its own baseline from the same source. The deltas, z-scores, and climate matches are internally consistent. But the absolute snowfall numbers should not be taken at face value.
How strange was this winter, statistically? To answer that, you need a model.
Ours begins with a smooth curve fitted through thirty years of data: a B-spline, which bends to follow the data without chasing every wiggle. This gives the national trajectory—the slow, nonlinear drift of American winters over three decades.
But cities are not the nation. Miami is not Minneapolis. So each city gets its own intercept (its baseline personality) and its own slope (its individual rate of change over time). The technical name is a mixed-effects model. The fixed effect is the national trend. The random effects are each city’s departures from it.
There is a further refinement. Not all cities are equally predictable. Miami’s winter temperature varies little from year to year. Billings swings wildly. Our model assigns each city its own error variance—its own sigma—so that a two-sigma event in Miami (where sigma is 1.18°F) means something different from a two-sigma event in Billings (where sigma is 4.84°F). The technical term is heteroscedastic, from the Greek for “different scatter.” It sounds like a disease but describes something sensible.
Denver’s temperature z-score was 2.70. In a normal distribution, that occurs less than one percent of the time. Only two of the fifty cities exceeded the two-sigma threshold for temperature. The mean absolute z-score across all cities was 1.06—broadly unusual, not just locally.
When you give each city its own intercept and slope, you can ask: do warmer cities warm faster?
They do. The correlation between random intercepts and random slopes for temperature is 0.591—a moderately strong positive relationship. Cities that start warmer in our thirty-year baseline also tend to have steeper warming trends over time. This is not a trivial finding. It suggests that whatever is driving the warming is amplified in places that are already warm—possibly through feedback mechanisms like reduced snow cover, urban heat island intensification, or changes in regional circulation.
For snowfall, the correlation reverses: -0.287. Snowier cities tend to be losing snow faster, though the signal is weaker. For precipitation, there is essentially no correlation (0.097). Temperature is where the feedback loop lives.
Why would warmer cities warm faster? Three possibilities, none mutually exclusive. First, the urban heat island: warmer cities tend to be larger, sunbelt metros with more concrete and less vegetation, and these features amplify warming. Zhao et al. (2014) documented the nonlinear relationship between city size and heat island intensity. Second, snow-albedo feedback: cities that start warmer have less snow cover, which means less solar reflection, which means more absorbed heat, which means faster warming. The loop feeds itself. Third, regional circulation changes: the jet stream patterns that warmed the West this winter may disproportionately affect cities that were already on the warm side of the continental divide.
The correlation is not proof of any of these mechanisms. It is an observation that demands explanation. In the literature, it rhymes with what Manabe and Wetherald found as early as 1975 regarding polar amplification—though here we are seeing it not at the poles but at the warm end of the urban spectrum. The pattern deserves more investigation than a dashboard can provide.
The national temperature trend across our fifty cities is +0.506°F per decade. This is not statistically significant at conventional levels (p = 0.16), which may surprise people accustomed to hearing that warming is settled science. It is settled—but a thirty-year window with fifty cities is a small lens through which to measure a global phenomenon, and the year-to-year noise in winter temperatures is substantial. Our model explains 94.5% of the temperature variance, but almost all of that (94.2%) is city-to-city differences, not temporal trends. Winter temperature is overwhelmingly a function of where you are, not when you are.
Snowfall shows no meaningful trend (+0.038"/decade, p = 0.94). Neither does precipitation (-0.004"/decade, p = 0.99). If winter is changing, it is changing in the background, beneath a fog of natural variability that a three-decade sample cannot fully resolve.
Our findings are consistent with the broader literature. La Niña winters have been linked to amplified jet stream patterns that warm the western US and cool the east since at least Ropelewski and Halpert’s 1986 work on ENSO teleconnections. The warm-cities-warming-faster pattern echoes research on urban heat islands and temperature feedback loops documented by Zhao et al. (2014) and others. The heteroscedasticity we observe—continental interiors varying more than coastal or tropical cities—reflects the well-documented influence of maritime moderation and distance from oceanic heat reservoirs.
What is newer, and less well-studied, is the magnitude of the current displacement. Denver running eleven degrees above normal is not merely a warm winter. It is a winter that no longer belongs to Denver. Whether the frequency of such displacements is itself increasing—whether the dice are not just loaded but increasingly so—is a question our thirty-year sample can gesture toward but not resolve.
The thirty-year average will update next year. It always does. The window slides forward, absorbing anomalies, making the strange familiar. In a decade, this winter will be part of the baseline.
This is both a feature and a limitation of how we measure climate normals. The 1991–2020 baseline already includes significant warming compared to the mid-twentieth century. An anomaly measured against it is an anomaly against an already-shifting reference point. Denver’s +11.1°F is extraordinary even by modern standards. Against a 1961–1990 baseline, it would be more extraordinary still.
Seven cities out of fifty had a normal winter. The other forty-three did not, and each of them did not in its own way. The strangeness was not evenly distributed. It rarely is.
Data: Open-Meteo Archive API
Normals: 1991–2020 winter seasons (Dec–Feb)
Model: weather ~ spline(year) + (year | city); sigma ~ city
Sample: 50 US cities (not nationally representative)
The recipe behind the numbers, step by step, with no jargon left unexplained.
We needed winter weather data for American cities. Lots of it. Thirty-five winters’ worth.
The source is Open-Meteo’s Archive API, which serves ERA5 reanalysis data from the European Centre for Medium-Range Weather Forecasts. Reanalysis means a global climate model ingested billions of observations—satellites, weather stations, ocean buoys, radiosondes—and produced a physically consistent gridded dataset. It is not raw station data. It is what a very good model thinks the weather was, everywhere, all the time.
This matters. The numbers you see here are model-derived, not thermometer readings from the airport. ERA5 is excellent for temperature. It is less excellent for snowfall, a fact we will return to.
Thirty-five seasons × 50 cities × 3 metrics = 5,250 data points. Not big data. A spreadsheet could hold it. But enough to find patterns.
We wanted to know: which cities had similar winters this year? Which ones did not?
The answer is a distance matrix. Take every pair of cities—that is 1,225 pairs from 50 cities—and compute how different their 2024–25 winter was.
“Different” needs a definition. We used normalized Euclidean distance across the three metrics. Here is the recipe:
On the heatmap in the Matrix tab: darker cells mean more similar winters. Lighter cells mean more different. The diagonal is always dark. If you see a dark off-diagonal block, those cities had nearly identical winters.
Some findings from the matrix:
Cities at climate extremes have no close twins. Miami, Anchorage, and Phoenix sit on the edges of the distribution. Anchorage’s nearest neighbor is Burlington, VT, at a distance of 0.259—which is like calling someone your best friend because they are the only person in the room.
A distance matrix tells you what happened. A model tells you what should have happened. We built one so we could measure surprise.
The model is a B-spline mixed-effects regression with heteroscedastic errors. That sentence has too many words in it. Here is what each part means:
In notation that looks like code but is not quite code:
We fit three separate models: one for temperature, one for snowfall, one for precipitation. Same structure, different data. The model does not know that snow and temperature are related. It treats each metric on its own.
A model is only useful if you know where it works and where it fails. We ran the diagnostics.
Variance decomposition tells you where the signal lives. For temperature:
Translation: where a city is located explains almost everything about its winter temperature. The 35-year warming trend is statistically detectable but explains less than half a percent of total variance. The remaining 4.8% is noise—year-to-year chaos that even a good model cannot predict.
This is not a flaw. This is physics. Minneapolis is always colder than Miami. The warming trend nudges both of them, but the nudge is tiny compared to the gap between them.
R² by metric:
| Metric | R² | Verdict |
|---|---|---|
| Temperature | 0.945 | Excellent. The model captures almost all temperature variation. |
| Snowfall | 0.780 | Good. Snow is lumpy and localized, but the model handles it. |
| Precipitation | 0.652 | Adequate. Rain is chaotic. This is about as good as it gets with seasonal aggregates. |
This hierarchy makes physical sense. Temperature is determined mostly by latitude and elevation—stable facts about geography. Snowfall depends on temperature and moisture—two variables instead of one. Precipitation depends on storm tracks, frontal systems, and atmospheric rivers—things that vary wildly from year to year. The model captures the predictable part. It cannot capture the chaos.
Per-city σ captures real differences in volatility. Miami’s estimated σ is 1.18°F. Its winters are boringly consistent. Billings, Montana, comes in at 4.84°F. Its winters are a coin flip. The model knows this. A 3°F anomaly in Miami would be a screaming outlier. The same anomaly in Billings would be a Tuesday.
Here is the central question: which cities had a weird winter?
We answer it two ways, and they agree. That is how we know they are right.
Method 1: Self-distance as displacement. Remember the distance matrix from Section 2? Every city has a distance to every other city, based on its 35-year average. But we can also compute each city’s distance to itself—that is, how far the 2024–25 winter was from that city’s own historical normal. We call this the “displacement score.” A low score means the city had a typical winter. A high score means it did not.
| Most Displaced | Score | Least Displaced | Score |
|---|---|---|---|
| Anchorage, AK | 0.492 | Tampa, FL | 0.040 |
| Dallas, TX | 0.356 | Miami, FL | 0.041 |
| Reno, NV | 0.318 | Minneapolis, MN | 0.042 |
| Denver, CO | 0.295 |
Method 2: Model z-scores. The model predicts each city’s expected temperature, snowfall, and precipitation. It also knows how much noise each city has (σ from Section 3). A z-score is: how many standard deviations was the actual observation from the model’s prediction? A z-score above 2 means the city’s winter was, roughly, a 1-in-20 event given its history.
Only two cities exceeded 2σ:
The two methods use different information. Displacement scores use the distance matrix, which knows nothing about the model. Z-scores use the model, which knows nothing about the distance matrix. Both point at the same cities. Denver is weird. Salt Lake City is weird. Anchorage is weird. Tampa is fine.
Every analysis is a stack of choices. Here are ours, and what happens if you change them.
30-year baseline (1991–2020). This is the standard climatological reference period. It already includes significant warming. Our anomalies are measured against a world that has already warmed. This makes them conservative. A colder baseline would make everything look weirder.
50-city sample. We chose 50 cities, biased toward the Northeast and large metros. Rural America is absent. The Great Plains are underrepresented. If your town is not on the list, it is not because we think your weather does not matter. It is because we had to draw the line somewhere, and we drew it at cities people have heard of.
ERA5 reanalysis. Excellent for temperature. Less trustworthy for snowfall. ERA5 systematically underestimates snow, especially lake-effect snow near the Great Lakes and orographic snow in the mountains. If Syracuse or Salt Lake City look less snowy than you remember, this is probably why.
December–February as “winter.” November can be brutal. March can be worse. We used the meteorological definition of winter and ignored the shoulder months. A freak November blizzard does not appear in our data. A warm March that felt like spring does not either.
Normalization before distance. This is the choice that prevents temperature from eating the distance metric alive. Winter temperature ranges from about 10°F to 75°F (65-degree spread). Snowfall ranges from 0 to 90 inches. Without normalization, the temperature difference between two cities would usually be the only thing that matters. By rescaling each metric to [0, 1], we give temperature, snowfall, and precipitation equal votes.
This is not an academic paper. It is a dashboard. We built it to answer a specific question: was this winter weird, and where? We did not build it to survive peer review. Here is what a more rigorous analysis would include, if you are the sort of person who wants to build one:
Temporal autocorrelation. A warm winter tends to follow a warm fall. Our model ignores this. A proper treatment would add AR(1) or ARMA structure to the residuals. We did not, because seasonal aggregates already smooth out most short-term autocorrelation, and because this is a dashboard, not a dissertation.
ENSO as a covariate. El Niño and La Niña are the single biggest drivers of year-to-year winter variability in the United States. We mention ENSO in the essay. We did not include it in the model as a predictor. A better model would. We classified seasons by ENSO phase after the fact rather than letting the model learn the relationship.
Model selection via LOO-CV or WAIC. We picked a model and ran it. We did not systematically compare it against simpler alternatives using leave-one-out cross-validation or the Widely Applicable Information Criterion. This is the sort of thing you do when publishing. We were not publishing.
Building up from simpler models. Good practice is to start simple (random intercept only), then add complexity (add slope, add heteroscedastic sigma) and check whether each addition is justified. We skipped to the complex model because we had domain knowledge about what the model should capture. This works until it does not.
More data. Weekly or monthly resolution instead of seasonal aggregates. Daily extremes instead of means. Humidity, wind, sunshine hours. More data is always better, until it is not.
Representative sampling. A population-weighted or geographically stratified sample of cities would be more defensible than our ad hoc list. Pittsburgh and Philadelphia are 300 miles apart and probably do not have independent weather. We treated them as independent anyway, because this is a dashboard, not a dissertation.
Spatial correlation. Cities near each other are not independent. A proper spatial model would account for this using a Gaussian process or a conditional autoregressive structure. We did not, because spatial models are computationally expensive and because our audience does not want to wait for a Gaussian process to converge.
Want to replicate this? The full code—data fetching, model fitting, and this dashboard—is on GitHub.
View on GitHub →