Do Catchers Age Differently?

Right: Peter Aiken-Imagn Images
Back in August when I published my research on fantasy specific aging curves, I noticed something unique: catchers were dominating the lists of “chalkiest” careers. I found this odd at the time and noted it as a potential topic for future research. Now that we’re in full (fantasy) off-season swing, now is the time to look into these curios. So, do catchers age differently from other players, with respect to fantasy performance? Turns out the answer is yes. But also, no. Read on to find out what I mean.
Refresher
Before embarking, I looked into the existing body of research on the subject. As it were, a similar question was examined by FanGraphs O.G. Dave Cameron almost 15 years ago. In that article, Dave found that catcher run value peaks at the same age as the broader population, but declines a smidge slower in a player’s mid- to late-30s. This formed my baseline expectation to not get my hopes up for making some sort of revolutionary finding.
As in my previous research, I am using the delta method of calculating aging curves, and using a spline regression to create a smoothed line. This method requires pairing off every consecutive set of player-seasons across a given sample, measuring the change (i.e., delta) of the chosen statistic between the two years, and attributing it to the age threshold (e.g., 22-23 or 34-35) which those seasons cover. If you do that over a lot players and a lot of seasons and take the average of the changes for each age pair, you can construct yourself an aging curve. I am using a standard 5×5 roto, 12-team, and 23-man roster setting over a time sample from 1985-2026.
Data and preliminary results
To create my sample, I used three different definitions of catcher eligibility to generate my seasonal pairs ranging from most to least strict. The strictest requires the player to be catcher-eligible in both seasons of the sample, the middle child requires the player to be catcher-eligible in at least one, and the least strict simply requires the player to be catcher-eligible at any point in their career. I wanted to use different eligibility requirements because each one answers a slightly different question. The strictest is less about measuring aging patterns of catchers broadly, and more about measuring the aging patterns of players who are catcher-eligible in fantasy. This is useful for measuring the impact of how staying behind the plate for extended periods of time effects your performance while you’re catching, but would exclude seasons from older, former catchers.
If we think catching has a unique long-term impact on aging patterns, then we’d want these guys, like Joe Mauer or Willson Contreras, to be in the sample. Rather than make an assumption about which one is best to use, I looked at all three throughout the various analyses. To avoid bias, I limited my data to players whose careers began after the start point in my data; if I didn’t, older players who had started their careers at catcher but moved off position by 1985 wouldn’t get caught in the “ever eligible” net.
Unsurprisingly, the amounts of players in each eligibility bucket matches expectation:
| Age Pair | C-Eligible Both Seasons | C-Eligible Either Season | Ever C-Eligible |
|---|---|---|---|
| 19-20 | 1 | 1 | 1 |
| 20-21 | 5 | 5 | 5 |
| 21-22 | 30 | 34 | 34 |
| 22-23 | 75 | 77 | 81 |
| 23-24 | 146 | 156 | 163 |
| 24-25 | 217 | 232 | 248 |
| 25-26 | 272 | 301 | 318 |
| 26-27 | 283 | 310 | 331 |
| 27-28 | 303 | 318 | 340 |
| 28-29 | 271 | 288 | 314 |
| 29-30 | 239 | 253 | 281 |
| 30-31 | 225 | 234 | 256 |
| 31-32 | 192 | 196 | 220 |
| 32-33 | 160 | 163 | 184 |
| 33-34 | 123 | 125 | 144 |
| 34-35 | 103 | 104 | 124 |
| 35-36 | 69 | 70 | 83 |
| 36-37 | 42 | 44 | 53 |
| 37-38 | 26 | 27 | 33 |
| 38-39 | 18 | 18 | 22 |
| 39-40 | 6 | 7 | 10 |
| 40-41 | 4 | 4 | 5 |
| 41-42 | 1 | 1 | 1 |
Interestingly, the curves themselves don’t differ that much. Once a catcher, always a catcher, I suppose:

Note the peak: age 27. In my earlier research, I found that fantasy performance, as measured by delta curves, peaks for hitters at 26. This is the first useful nugget and aligns neatly with conventional wisdom that it takes catchers a longer time to develop than other positions.
With this in mind, I wanted to compare the catcher aging curve directly to that of the complementary hitter populations for each eligibility specification. Here, we find our first surprise.

In all three cases, catchers peak later (which we just figured out) and also decline slower, in terms of raw dollar value, than the broader population of hitters. This surprised me. Catchers get hurt! They break down! How can it possibly be that they age less steeply than other hitters?
Deeper dive
Astute readers may note the caveat above: in terms of raw dollar value. If you’ve read any of my work, you’ll know that when I’m technical about my language, it’s for a reason. I’ll stop being coy and get to the point: catcher performance, as a population, is actually less variable than other hitters:

These plots show the distribution of dollar value movement for each age pair for the broadest eligibility setting. The others feature basically the same pattern. You’ll note that the boxes for catchers are narrower, and don’t extend as far up or as far down as the rest of the hitter pool. This implies that it’s possible that the steeper raw dollar decline we’re seeing from hitters is at least partially a function of the notion that they have a higher level to fall from. You know the old saying, “you’ve forgotten more than I’ll ever know”? Well, it’s like that, but with yearly auction value.
As for why this is the case, I can think of a couple reasons. For one, the defensive bar at catcher is simply so high that it naturally restricts the caliber of hitters that are eligible behind the plate and also caps their overall potential due to the physical rigor of the position. Worse counting stats will translate to worse fantasy performance. The steep positional adjustment for backstops will help in this respect, but not close the gap entirely. Another is that catchers generally don’t steal bases. In 5×5 settings, this will shrink the opportunities for player-to-player variance from five categories to four. Consider the statlines of Bryce Harper and James Wood, for example:
| Player | AVG | HR | R+RBI | SB | $ Value |
|---|---|---|---|---|---|
| James Wood | .265 | 30 | 183 | 21 | $32 |
| Bryce Harper | .269 | 29 | 180 | 7 | $26 |
These are virtually identical offensive seasons, except for the steals, which drive a major value difference between the two players. Differences like this are mundane in non-catcher positions; meanwhile, the league lead in catcher steals this year was Ivan Herrera’s eight, and he only caught once every three games.
How can we account for this? The way I settled on was by dividing the deltas by the standard deviation of dollar value for each position group, then calculating the delta curves with those scaled values. This allows us to see if there is any difference in the curves not attributable to the differences in distributional spread within the populations. Notably, I use the standard deviations for each population pooled across the full age spectrum specifically because this will leave in age-specific differences between the groups.
Once we do this, the curves change considerably:

Now, the non-catcher pool does not discernibly feature a steeper post-peak decline. In fact, these look like basically the same curve, just shifted one year to the right. We can test for whether or not this is (basically) the case.
Test 1: Constant offset
Here I present the first of a few complementary sets of statistical tests. First, we plot the yearly change (i.e. delta) for the non-catcher population (green line) and fit it with a spline. This is the same underlying data producing the curves depicted above, but without the extra math to create the arcing shape of the curve.


This test looks for the best constant offset (c) to account for the differences (i.e. vertical shifts), between the catcher and non-catcher data and conducts a version of a t-test to ascertain whether this gap is statistically different from zero. For both versions of the curve – raw dollar value and scaled – these tests pass with flying colors.
To make this comprehensible in the context of the original aging curve plot, let’s consider the peak values (where yearly change equals zero) and pull in a bit of algebra and gentle calculus concepts. Keep in mind that the aging curve represents the sum of all the deltas up to a given age. This means that the deltas themselves represent the slope of the curve for a given age pair. Our test requires the following equation:
- Catcher Yearly Change = Non-Catcher Yearly Change + c
Non-Catcher Yearly Change falls by some rate r (the slope of the yearly change line, i.e. the second derivative, is –r), and can be modeled as follows, assuming r is constant:
- Non-Catcher Yearly Change = r * ((Non_C Peak Age) – Age)
Therefore:
- Catcher Yearly Change = (r * (Non_C Peak Age – Age)) + c
If you pull r out of the right hand side, define c/r = k, and move the terms around:
- Catcher Yearly Change = r * ((Non_C Peak Age + k) – Age)
This is the same basic line as the non-catcher yearly change, except the inner parenthesis now has the k term. Since we’ve established above that c is non-zero, and r must also be non-zero (otherwise the aging curve would be a straight line, not a parabola shape), in order for the left-hand side to hit zero (i.e., peak) there must now be some non-zero value to offset the non-catcher peak age.
Congratulations, dear reader, you’ve just read something approximating a mathematical proof. I’ll note that the above doesn’t say anything about the full curve – just the peaks – but it shows how the peaks must be different given what we know about the curves.
Test 2: Different shape
Here, we take the baseline we established in the first test and ask, given that we know there is an offset, does the catcher line also need its own shape? We achieve this by fitting a spline to the catcher data and using another modified t-test to ascertain whether the difference in the shape coefficients between that spline and the non-catcher spline is statistically distinct from zero, while allowing for some difference in the coefficient for the intercept terms (c).


Here we differ based on which version of the aging curve we use. In raw dollar value, allowing the curve to take its own shape clearly improves the fit to a very statistically significant degree. However, this isn’t really the case in the scaled curves – the p-values do not pass muster except for the strictest definition for catcher, and even that value is not especially strong. This backs up what we saw visually in the earlier graphs – the raw dollar value curve clearly sloped differently while the scaled curve muted and, in some cases, removed statistical distinction between the shapes of the curves.
This test also, put in a different way, answers whether the offset differs based on age. Allowing the shape of the catcher curve to change is functionally also allowing the offset to vary. In the graphs below, the dashed green line represents the offset we found in test one – note that it is different from zero (which is what we found).

The brown line is the offset for each age pair in test two, with a 95% confidence interval in faded brown around it. In the raw dollar value curve, there is a significant stretch of ages where the green line is not overlapping with the confidence intervals. For the scaled curve, however, basically the entire spectrum of age ranges overlaps. This is why we lose statistical significance as described above.
Test 3: Mind the gap
Now that we’ve established that the offset between the two curves is real, and that any age-based difference for the offset is at best unreliable, I also want to actually derive the offset term because earlier it’s denominated in standard deviations, which is not very intuitive. To do this, I leveraged the k=c/r relationship we found earlier. Notably, that assumed that r was constant, or a straight line, which is what we’ll need to do here. I’m using the scaled version of the curve, since that is the one for which we can’t state that the offset isn’t linear over time.
Here we fit a simpler linear regression model:
- Delta = b0*catcher + b1*age
Here, catcher is a dummy variable indicating whether or not the player is a catcher. b0 will give us c, and b1 will give us r. We already know the c values from above, and estimating the regression for each catcher eligibility gives us the following r values, and subsequently the implicit k:
| Definition | Age Window | Non-Catcher Zero Crossing (Age) | Catcher Zero Crossing (Age) | Shift k (Years) | Yearly Change Decline Rate r (SD) |
|---|---|---|---|---|---|
| C-Eligible Both Seasons | 21-37 | 26.83 | 27.81 | 0.98 | 0.0472 |
| C-Eligible Either Season | 21-37 | 26.82 | 27.86 | 1.04 | 0.047 |
| Ever C-Eligible | 21-37 | 26.8 | 27.76 | 0.96 | 0.0473 |
Turns out that the eyeball estimate of one year was basically right! Now, again, I will refer to the linearity assumption. We know based on the graphs above that the offset probably isn’t linear. We can’t prove it statistically, but we also can’t deny what our eyes tell us. So we can’t state for certain that the offset is one year across the entire curve. More accurately, we would have to state that the average offset across all age pairs is roughly one year.
We can, though, look at where along the line the linearity assumption might hold better. This is where the wavy charts come in. The slope of the brown line is closest to zero around a player’s peak age window, where the confidence interval is readily overlapping the dashed line. Here, we get broadly similar results:
| Definition | Age Window | Non-Catcher Zero Crossing (Age) | Catcher Zero Crossing (Age) | Catcher Offset (SD per Yr) | Yearly Change Decline Rate (SD) | Shift (Years) | Shift 95% CI Low | Shift 95% CI High |
|---|---|---|---|---|---|---|---|---|
| C-Eligible Both Seasons | 25-31 | 26.12 | 26.84 | 0.033 | 0.045 | 0.72 | -0.05 | 1.44 |
| C-Eligible Either Season | 25-31 | 26.09 | 26.98 | 0.04 | 0.045 | 0.89 | 0.13 | 1.73 |
| Ever C-Eligible | 25-31 | 26.87 | 0.78 | 0.035 | 0.045 | 0.78 | 0.11 | 1.44 |
I’ve added some confidence intervals based on a bootstrap resampling estimation. Notably, we see one of the intervals dip below zero. This means that for the strict catcher eligibility definition, we can’t say that the curves definitely do differ with as much confidence as we can based on the other estimations. And, interestingly, the implied peak age (zero crossing) is about one year lower for both player groups. Avenues for future research, perhaps.
Conclusion
Overall though, I feel comfortable stating that this constellation of results shows that catchers age in basically the same way other hitters do, just delayed by a year. So the same, but different. Once you account for the fact that catchers accrue fantasy value in narrower distributions than other positions do, differences in the raw dollar value curves are whittled away to statistical noise.
As for what this means for the dynasty ranking model, I think we’ve settled on a useful tweak. I’ll have to decide whether I want to separate catchers and give them their own curve, or simply set their peak to be one year later and use the same curve as other hitters. Each option has its own benefits – the first is clearly more justifiable statistically; we’ve just spent 2300 words explaining that catchers have a narrower variance in their curve as well as an offset relative to other hitters. The second, though, is simpler to model and has the added benefit of a built-in penalty associated with the later peak and steeper raw decline curve. In other words, pre-peak catchers would be more penalized for a given age than non-catchers, and post-peak catchers would decline faster than they would with their own separate curve. This would likely reduce the need to manually nerf catchers, and would do so in an analytically justified way. In either case though, we’ve still achieved a great, if small outcome. It took us an admittedly long time to get there, but I think it was time well spent.
Jonathan is a contributor for RotoGraphs. He is a Tigers fan living in Philadelphia with his wife and dog and requests that you leave your best pizza topping combinations in the comments.