calibrated SPORTS

One measure, in full · Opportunity residual

Production beyond opportunity: receiving yards

Opportunity residual

Not published
Week-to-week carry-over
−145 – 202
Range of values
202
Highest estimate, shared
60 intervals reach it · players active in 2026
n = 83
Values in the opening slice

Definition

One definition, the column that binds its range, and what the figure is a share of.

receiving yards over the season minus what his targets + air_yards predicted, SUMMED over his games, so it grows with games played - band or rank on opportunity_residual.per_game.receiving_yards instead; the interval resamples his games and is conditional on the fitted line

opportunity_residual.receiving_yards

Source
pbp; n counts independent games
Bound column
starts 2009: pbp.receiver_player_id|incomplete_pass is not usable before it; fit receiving yards ~ targets + air_yards, OLS per season x position group over player-weeks; R^2 WR median 0.581 (0.548-0.651, 18 seasons); TE median 0.638 (0.584-0.696, 18 seasons); RB median 0.517 (0.406-0.589, 18 seasons); position group is the player's CURRENT nflverse position applied to every season, not as-of; SUMMED, so it scales with games: |value| against games played r 0.38 over 5729 player-seasons (per game: |value| against games played r 0.09 over 5729 player-seasons)
Columns it reads
pbp.receiver_player_id|incomplete_pass, pbp.receiver_player_id|complete_pass, pbp.air_yards|pass_attempt, weekly_stats.position
Denominator
Not a share: the figure has no denominator it splits with anyone.
Season range
Current 2009–2026. Current. Its inputs cover 2009 to 2026 and reach the season in progress.
Slices
season|position_group; the page opens on 2025|RB
Refreshed
This file was generated Tue, Oct 27, 9:32 AM ET. It does not state a refresh schedule.

Distribution

The middle half sits between −20 and 18.

Production beyond opportunity: receiving yards, 2025|RB · N = 83 with at least 5 games · 2009–2026

−160 to −140: 1−140 to −120: 0−120 to −100: 1−100 to −80: 0−80 to −60: 1−60 to −40: 6−40 to −20: 12−20 to 0: 240 to 20: 1820 to 40: 740 to 60: 660 to 80: 180 to 100: 5100 to 120: 0120 to 140: 0140 to 160: 0160 to 180: 0180 to 200: 0200 to 220: 1

Darker bars: 20 and up, 20 of 83 values, the top fifth (24%).

Does it carry?

No week-to-week carry-over is published for this measure. Its file holds a value per player with its interval; whether a week above average carries into the next is not in it.

Loading Production beyond opportunity: receiving yards…

What the file does and does not say

Four limits, stated plainly.

  1. Interval from resampling games with replacement, 2,000 times. Built at 95%. That coverage is nominal: this page does not check it against outcomes.
  2. n counts independent games, never rows. A value resting on fewer than 5 games is shown muted in the table and not read: it is left out of the range and the leaders.
  3. It covers 2009 to 2026, and says why in the producer's words: starts 2009: pbp.receiver_player_id|incomplete_pass is not usable before it; fit receiving yards ~ targets + air_yards, OLS per season x position group over player-weeks; R^2 WR median 0.581 (0.548-0.651, 18 seasons); TE median 0.638 (0.584-0.696, 18 seasons); RB median 0.517 (0.406-0.589, 18 seasons); position group is the player's CURRENT nflverse position applied to every season, not as-of; SUMMED, so it scales with games: |value| against games played r 0.38 over 5729 player-seasons (per game: |value| against games played r 0.09 over 5729 player-seasons).
  4. It has values for 1,629 players. One with no row in the file has no value here, which is not a value of zero.