§ A data investigation
PJM prices out 14,450 points on the New Jersey grid every five minutes, and publishes no diagram of how any of them connect. This is what happened when I reconstructed that map from the numbers alone — then used it to chase a heat wave through four public agencies that have no reason to agree with each other.
start → 01PJM's real-time price feed gives every node's price every five minutes,
but the price itself hides a locational signal. Split it into its two parts —
system_energy_price, which is identical at every node at
a given moment, and congestion + losses, which is not — and what's left is a
fingerprint of the actual electrical distance between points on the grid: nodes whose
congestion moves together are electrically close; nodes that diverge sit on opposite sides of
a constraint.
Turn that correlation into a proper distance metric, run a minimum spanning tree over it, and the tree is a real answer to a question PJM doesn't publish an answer to: which point on the grid connects to which.
PJM doesn't publish coordinates either, but substation names embed a location in a fixed-width prefix — an undocumented convention, reverse-engineered by inspection. Match the confidently-named nodes to real municipal boundaries, then let every other node's position fall out of the network itself: each unplaced node settles at the average of its already-placed neighbors, solved to convergence. Exact on a tree.
Once the map existed, an anomaly was hard to miss: prices across the whole region spiked hard on July 1st. Price alone isn't proof of anything — it can't testify to its own cause — so before trusting the story, it needed a witness that had nothing to do with the price feed.
The National Weather Service had issued an Extreme Heat Warning for that exact day. PJM's own metered-demand feed — actual measured megawatts, not a price proxy — independently confirmed it:
If this is really regional weather and not some artifact specific to how PJM prices its market, it shouldn't stop at PJM's border. NYISO — a different grid operator entirely, its own market design, no shared infrastructure with PJM beyond a couple of physical tie lines — should show the same spike independently. It did, and reacted harder:
| Zone | Operator | Jul 1 avg | Jul 1 peak |
|---|---|---|---|
| PSEG | PJM | $147 | $1,236 |
| Hudson Valley | NYISO | $270 | $2,318 |
Two agencies, no shared data system, same day — independent cross-validation of the heat-driven story, not a one-source coincidence.
New Jersey's marginal power plants are mostly gas-fired, so the next question was whether the pipeline feeding the region shows the same stress. Transco — the interstate gas line running from the Gulf Coast to New York City — publishes daily operational data, but nothing resembling an API: the public page is a JS-rendered shell around a form that has to be POSTed to set up a server-side session before a second request will render the actual report. Reverse-engineered that two-step flow, pulled the Zone 6 (NY/NJ/CT) delivery data, and found a real relationship:
The relationship generalizes — consistently across every NJ utility sharing that gas zone (PSEG, JCPL, AECO, all within 0.01 of each other), and, weaker but real, across the Mid-Atlantic utilities one zone further south (DOM, PEPCO, BGE, AEP, all around r = 0.45) — except one, Delmarva, which shows essentially zero correlation despite sitting in the same nominal gas zone. Flagged as an open question, not explained away. And it shows up more strongly still in NYISO's downstate zones (r = 0.70–0.73) — the same pipeline feeds both grids, and New York City's generation mix leans on gas even harder than New Jersey's.
The natural next question: not just that the region's price responds to gas pipeline stress, but where, specifically, on the grid. The first attempt — correlating each of 776 nodes' own price against gas deliveries — came back completely flat. Every single node showed almost the identical number, for a reason worth sitting with rather than working around: the fuel-cost component of price is literally identical at every node on the grid at a given moment, so there was no location left in the metric to map.
The real locational signal lives in
congestion, not total price — and correlating that against gas
deliveries produced real structure:
A plant that runs at fixed output regardless of demand becomes a friction point when everything flexible around it — the gas peakers ramping to meet a heat wave — has to be routed around a block that can't move. It's not a coincidence these are the same two units already flagged, independently, as the grid's most congestion-volatile in general.
The question this whole investigation actually grew out of was mundane: which utility serves a specific town near the New York border, when the local NJ utility (RECO) is a small subsidiary of a company that's mostly on the other grid entirely. Direct comparison, RECO (PJM) against Hudson Valley (NYISO):
| Metric | Result |
|---|---|
| Overall correlation | r = 0.901 |
| Average price, RECO | $63.18/MWh |
| Average price, Hudson Valley | $64.65/MWh |
| Jul 1 (heat peak) | NYISO spiked first, +$122 |
| Jul 2 (next day) | PJM spiked harder, +$196 |
The strongest correlation found anywhere in this whole project — two markets that share weather but nothing else, moving together almost every day. And yet the single sharpest divergence in the entire window happened exactly in the middle of the most extreme event in it, with the spike shifting from one grid to the other one day apart. Closely related and not interchangeable, both at once, and the data says exactly where the line is.
Everything in BUS 04 is a correlation, and correlation was never enough to close that case. A heat wave pushes gas-fired power plants and the pipeline feeding them at the same time it pushes everything else on the grid — so before r = 0.64 could be trusted as gas specifically moving price, rather than gas and price both just independently tracking the same afternoon, it needed a design that could tell those two apart.
The test: treat PSEG, JCPL, AECO, and RECO — the utilities actually served by Transco Zone 6 — as one group, and a set of PJM zones with no plausible connection to that pipeline (Illinois, Ohio, West Virginia) as a control group with no reason to feel it at all. Compare how each group's congestion moves on high-gas-stress days versus low ones, after subtracting out whatever every zone has in common on a given day — including a shared heat wave. If Zone 6 stress is doing something to price on top of the weather, the served zones should move differently from the unserved ones. If it's just weather wearing a gas pipeline's clothes, they shouldn't.
There was a more direct way to check the rival explanation than statistics alone: measure the actual weather. NOAA's own historical archives hadn't published this year's data yet — they finalize a year or more behind — so this pulled hourly readings for Newark Liberty airport, the geographic center of the Zone 6 utilities, from the near-real-time mirror of the same station network that utilities themselves lean on to fill that exact annual gap.
Two supposedly independent explanations for the same price pattern turn out to barely be independent at all. Measured temperature alone correlates with congestion almost as strongly as gas deliveries do, in every one of the four served zones:
| Zone | Temperature vs. congestion | Gas delivery vs. congestion |
|---|---|---|
| AECO | r = 0.58 | r = 0.65 |
| JCPL | r = 0.56 | r = 0.62 |
| PSEG | r = 0.55 | r = 0.61 |
| RECO | r = 0.55 | r = 0.57 |
BUS 04's headline number is real and it isn't going anywhere — gas deliveries and PSEG-area prices really did move together, all summer. Whether that's gas moving price, specifically, on top of what a thermometer already explains, is on the evidence collected here unresolved and leaning no. A hot afternoon turns on every air conditioner and every gas peaker at once; a pipeline gauge and a thermometer spent this whole project mostly describing the same thing.
Bergen Generating Station — a 1,229 MW gas combined-cycle plant, same PSEG zone as everything above — was a natural check on the flexible-unit idea from BUS 05: if Hope Creek and Salem's inflexibility is what makes them gas-sensitive, a big, flexible gas peaker sitting right next to them in the same zone should show the opposite pattern. It does.
Re-running that full 776-node ranking to place Bergen surfaced something that had nothing to do with Bergen. Tied for 2nd and 3rd — a hair behind the single most gas-sensitive point on the entire grid — sat two nodes named ONYX. Not a coincidence worth ignoring: Onyx is the real-estate owner of the NEST campus in Kenilworth, the exact site from BUS 04 through BUS 07's gas story, where a 250 MW AI data center is now under construction. Both nodes carry an effective date of June 10 — eight days into this project's own pull window. The site wasn't in the price data at the start of this investigation. It showed up in the middle of it, already ranked among the most gas-reactive points on the whole PSEG grid.
A node appearing mid-window is also a natural experiment: did anything nearby actually change when it showed up? Ranked every other PSEG node by how closely its own congestion tracked ONYX's after June 10 — the same electrical-distance proxy from BUS 01 — and split into the 25 most-correlated and 25 least. The method has no access to a map. It found one anyway:
| Group | Substations |
|---|---|
| 25 nearest by correlation | Springfield, Fanwood, Westfield, Aldene/Roselle Park — the towns around Kenilworth |
| 25 furthest by correlation | Bergenfield, Hillsdale, Maywood, New Milford, Waldwick — Bergen County, 20+ miles north |
Comparing how each group's congestion moved before versus after June 10, net of whatever both groups had in common on any given day (the same difference-in-differences shape as BUS 07, just with a date instead of a gas-stress measure):
None of this went looking for Kenilworth specifically. It fell out of checking a hypothesis about an unrelated plant twenty miles away. The map built in BUS 01 to find electrical neighbors, and the sensitivity metric built in BUS 05 to find outliers, found the data center's construction site before anyone thought to ask them to.
Linden, NJ hosts two large, separately-owned gas plants at roughly the same site: an independent ~974 MW cogeneration facility, physically wired via a 315 MW GE merchant transmission tie straight under the Arthur Kill to Con Edison's Goethals substation on Staten Island — and PSEG's own, separate Linden Generating Station next door. Two different companies sharing an address raised the obvious question: could the two be told apart in the price data, the way Bergen and Hope Creek/Salem (BUS 05) or Bergen and ONYX (BUS 08) could?
Twenty-some PSEG-zone pnodes carry a LINDEN prefix, splitting
cleanly into two internally-consistent clusters by naming pattern — steam/combustion-turbine
buses at 18 kV, and numbered UNIT buses at 13 kV. One cluster confirmed
real and coherent on its own: the 13 kV group's price series is byte-identical to a separate
aggregate node, LINDEN A, to fifteen significant figures — not similar,
the same settlement. The obvious next guess was that the two clusters were the two different
owners. It was wrong.
1101 CT, 1201 CT, 5 GT, 6 GT...) match both LINDEN pnode clusters, not one each
Both clusters are PSEG's — the steam/CT trains and the numbered units
alike. The independent cogeneration plant, the one actually wired to Staten Island, doesn't
appear under any findable name in this project's own pnode table at all: not
LINDEN, not COGEN, not the EIA-860 generator prefixes
(GTG, STG) it actually uses on its own filings. Whether that's a
naming convention this project hasn't found yet, or a plant PJM simply doesn't expose at
individual-generator granularity, is an open question here, not a resolved one.
Bergen Generating Station's hometown, Ridgefield NJ, turns out to host a second line to New York — not a repeat of BUS 09, structurally. Hudson Transmission Partners (HTP) is a 660 MW HVDC cable, not a VFT, running from a Ridgefield converter station straight to Con Edison's West 49th Street substation in Manhattan — a different borough than Linden's Staten Island tie, a different technology entirely, the same PJM zone. One real caveat this one carries that Linden's doesn't: NYPA holds 495 MW of the 660 MW under a long-term contract, so only 165 MW is genuinely merchant, price-driven flow — price data alone can't speak for the contracted majority.
| Metric | Linden VFT (Staten Island) | Hudson TP (Manhattan) |
|---|---|---|
| NYC side higher | 85.0% of intervals | 84.5% of intervals |
| Mean spread (PJM − NYC) | −$7.29/MWh | −$6.41/MWh |
| Correlation with NYC price | r = 0.500 | r = 0.500 |
Same direction, same rough magnitude, same correlation with the NY side to three decimal places — on two ties that don't share a technology, a converter station, or a borough. Checking whether that's a coincidence or the same underlying signal twice:
This is BUS 01's central fact showing up a third time from a new
angle: system_energy_price is uniform across every PJM node at a given moment, so
any PJM-side interface — whichever converter station, whichever NYC substation it actually
terminates at — mostly just reflects the same underlying PJM system price. The specific
location of the tie barely matters; which grid it's rooted in is almost the whole story.
Back to the question BUS 08 and BUS 09 never actually answered: what does CoreWeave's 250 MW Kenilworth request do to PSEG's price, once it's fully online? Not a production-cost model — the reduced-form version, fit directly against what's already in this dataset: PSEG's own hourly zone-average price regressed against PS-zone metered load, then evaluated at load-plus-250.
A quadratic fit beats linear decisively (R2 0.25 → 0.51) — real convexity, the textbook merit-order signature: cheap units cover typical load, progressively more expensive peakers get called in as load climbs toward the zone's own peak. That single fact matters more than any specific dollar figure below, because it means the price impact of new load isn't one number — it depends entirely on what the rest of the system is doing when that load shows up.
| Specification | at average load | at P90 load | at peak load |
|---|---|---|---|
| Full sample | +$7.37/MWh | +$39.10/MWh | +$90.74/MWh |
| Excluding top 1% of hours | +$5.44/MWh | +$16.70/MWh | +$32.06/MWh |
| Log-linear (level-free) | +$3.11/MWh | +$12.60/MWh | +$219.24/MWh |
One more split worth having: congestion-specific impact tops out around +$6–9/MWh at peak across specifications, far below the total-price numbers above. Most of the price effect of new load shows up as a system-wide shift, not a local congestion one — the same uniform-system-energy-price fact from BUS 01 and BUS 10, reappearing as the reason a single new load in Kenilworth mostly raises everyone's price a little, rather than raising Kenilworth's price a lot.
Everything on this page up to here is a mean, a correlation, or a regression coefficient — every one of them describing the middle of a distribution. None of it says anything about how violently these prices can move, or whether the wild moments cluster in time or scatter randomly. Ran that check, finally, across four series already central to this page: the PSEG zone average, ONYX, Bergen, and the Linden VFT interface.
| Series | Excess kurtosis | Skew | Top-1% tail share |
|---|---|---|---|
| PSEG zone average | 115.7 | +9.71 | 27.5% |
| ONYX | 92.7 | +8.79 | 26.0% |
| Bergen | 116.1 | +9.68 | 27.2% |
| Linden VFT | 116.1 | +9.70 | 27.4% |
Excess kurtosis over 90 everywhere — a normal distribution scores zero — and a Ljung-Box test rejects independent volatility outright for all four (p < 0.0000001, no exceptions): big price moves cluster in time rather than scattering randomly, consistent with real grid-stress events unfolding over sustained stretches, not isolated five-minute blips. Roughly a quarter of all price movement, measured as share of total deviation from the mean, is concentrated in the single most extreme 1% of five-minute intervals.
That's the finding, not the individual numbers: where a node sits
changes its average congestion sensitivity — Bergen and Hope Creek/Salem (BUS 05),
Bergen and ONYX (BUS 08) sit at opposite ends of that ranking. It doesn't change how
violently the tails behave. The fat tails and the volatility clustering come from shared,
system-wide scarcity events — the same uniform system_energy_price fact this
page keeps rediscovering, one more time, from the one angle nothing so far had actually
checked.
Every gas number on this page so far has been Zone 6, aggregated to
one total. The pull actually holds 566 distinct locations across all 8
Transco zones — 223 delivery points, 249 receipt points, 92 transit segments — so
the aggregate view was always throwing most of it away. Correlating each named location's own
volume against PSEG's price, the same way BUS 05 ranked price nodes, turned up something
PSE&G's own delivery meter didn't show: PUBLIC SERVICE E&G's own point
correlates at a middling r = 0.44 — whatever's driving PSEG's stress most
isn't most visible at PSEG's own meter.
Three upstream candidates got the harder test — not just correlation, but correlation checked against every confound available: Zone 1 (South Texas, closest this pipeline gets to Henry Hub), Zone 5 (the DMV corridor), and Leidy (the receipt points exchanging gas with the Leidy hub storage complex in Clinton County, PA) — run against all 23 PJM zones in this pull, not just PSEG, to see whether a relationship concentrates where Transco actually goes or scatters evenly everywhere.
| Upstream series | CDD-controlled pattern across 23 zones |
|---|---|
| Zone 1 (Henry-Hub-ward) | Nothing anywhere — best p = 0.12 |
| Zone 5 (DMV) | Inverted — strongest in COMED/AEP/OVEC (Illinois, Ohio), weakest in PSEG/JCPL/AECO |
| Leidy | Concentrated exactly where the pipeline goes — AECO/PECO/JCPL/PSEG/RECO on top, Midwest zones falling off |
Zone 5's pattern is worse than confounded — it's backwards. Its strongest correlation with PSEG stress runs through zones with no physical Transco connection at all. It isn't tracking anything PSEG-specific; it's a broad PJM-wide pattern that happens to show up hardest exactly where the pipeline isn't. Leidy is the opposite: a real geographic gradient, falling off toward the zones it has no reason to touch.
Leidy got pushed harder to see if it would break under the same scrutiny that killed the original Zone 6 claim (BUS 07):
| Controls on Leidy vs. PSEG | Partial r | p |
|---|---|---|
| CDD, Newark | 0.44 | 0.0008 |
| CDD (Newark) + Zone 6 delivery + weekend | 0.30 | 0.025 |
| CDD, Newark + CDD, State College (38 miles from Leidy) | 0.33 | 0.014 |
| All four at once | 0.32 | 0.018 |
Of every upstream-flow relationship tested against PJM price on this page — the original Zone 6 claim, the difference-in-differences test, Zone 1, Zone 5 — Leidy is the first that hasn't collapsed under a real confound check. Still correlational, still one summer, still 54 days, and surviving four specific controls isn't the same as ruling out every possible one. But it's the first result in this whole investigation that isn't just the weather again.