Monday, February 04, 2008

Beating a Dead Horse, pt. 2

Let’s examine how OPS and OPS+ actually weight offensive events when viewed as approximations of R/O. We had this equation for runs from aOPS:

Runs = (2.06(aOPS) - 1.06)*(AB - H)*.172

If you remember that LgOPS is a constant .715 for our sample, we can rewrite that formula as:

Runs = .495*OPS*(AB - H) - .182*(AB - H)

Then, we can differentiate to find the linear weights for each event:

LW = .495(O*dOPS + OPS*dO) - .182*(dO)

Where O is outs, dOPS is the derivative of OPS with respect to a given event, and dO is the derivative of outs with respect to a given event (1 for an out, 0 for anything else).

dOPS = dOBA + dSLG, with dOBA and dSLG defined similarily, and calculated thusly:

dOBA = (P*n - N*p)/P^2 where P = PA, N = H + W, n = 1 for an on base event, 0 for an out, p = 1 for all events

dSLG = (A*t - T*a)/A^2 where A = AB, T = TB, t = 1 for a single, 2 for a double, …, and a = 1 for all events except walks (0).

If you go through this process with an average team in our sample, you will find that the equation for runs can be rewritten for the average team as:

Runs = .45S + .82D + 1.18T + 1.55HR + .23W - .08(AB - H)

From this, you can see how OPS treats the offensive events, at least for an average player or team. It underweights singles a bit, while doubles get a pretty fair value, but it overvalues the triple and the home run while undervaluing the walk.

We can do the same thing with the OPS+ equation:

Runs = (1.06(OPS+) - .06)*(AB - H)*.172

Which reduces to:

Runs = .563*OBA*(AB - H) + .466*SLG*(AB - H) - .193*(AB - H)

Which can be differentiated to:

LW = .563*(OBA*dO + dOBA*O) + .466*(SLG*dO + dSLG*O) - .193*(dO)

Which, when applied to the average team, gives us this:

Runs = .47S + .81D + 1.16T + 1.50HR + .26W - .087(AB - H)

You can see that OPS+ is an improvement over OPS, as all of the weights come more in line to what we would expect--but it is still undervaluing the walks and overvaluing super extra base hits.

There is nothing novel about exposing the fact that OPS leaves something to be desired--this has been shown by others before, they are still not awful for a quick and dirty estimate, etc. I do think it is useful to document what exactly they are. But this whole series is rehashing old news, and I do not want anyone to get the impression that I am saying otherwise.

Let’s talk about another way that people combine OBA and SLG. One very common formula is 1.2*OBA + SLG. The reason that a weight of 1.2 is used is that on the macro level, SLG is generally around 20% higher than OBA. This obviously is a relationship that varies, but for the long-term sample I have been using, the SLG is .391 and the OBA is .324--a 1.21 ratio. This in essence is a way to get to the insight of OPS+ without bothering with league averages--OPS+ uses the exact ratio for any given year, and the denominators aren’t the same if you expand them out, but generally, 1.2*OBA + SLG can be considered as similar to OPS+.

I saw a post on from some years ago that referred to 1.2*OBA + SLG as OPS*, so for the sake of completeness, let’s figure the regression equations for aOPS*:

aR/O = 2.12(aOPS*) - 1.12
aR/P = 1.79(aOPS*) - .79

Focusing on the r/o equation, knowing that the LgOPS* is .780, we can rewrite it as:

Runs = (3.26*OBA + 2.72*SLG - 1.12)*(AB - H)*.172

Which can be differentiated to:

LW = .561(OBA*dO + dOBA*O) + .468*(SLG*dO + dSLG*O) - .193*(dO)

As compared to the equation we got for OPS+:

LW = .563*(OBA*dO + dOBA*O) + .466*(SLG*dO + dSLG*O) - .193*(dO)

Confirming our premise that OPS* is a close cousin of OPS+ for average league OBA/SLG combinations. Obviously, the closeness of the relationship will depend on the league SLG/OBA ratio. In our case, it is 1.21, so they are nearly identical when we convert to runs. In modern leagues, OPS+ will usually be “better”, simply because the OBA/SLG ratio is higher than 1.2, and the more weight on OBA, the better (to a point, a point which OPS+ is a long way off from).

Some people have of course tried to figure the best weight based on approaches other than just evening out the contribution of each component on the league level. I’m going to run a regression here to do the same. I prefer an approach to try to find the best match for LW values, but this series is focusing on regressions. For the 1961-2002 sample, this is the equation we find:

aR/O = 1.376(aOBA) + .899(aSLG) - 1.273

This one can be rewritten as:

Runs = (4.247*OBA + 2.299*SLG - 1.273)*(AB - H)*.172

You can see that OBA is weighted at 4.247/2.299 = 1.85 times SLG.

Continuing to break this down:

Runs = .730*(OBA*(AB - H)) + .395*(SLG*(AB - H)) - .219*(AB - H)

Which differentiates to:

LW = .730*(OBA*dO + dOBA*O) + .395*(SLG*dO + dSLG*O) - .219*(AB - H)

Which gives us this equation:

Runs = .51S + .81D + 1.10T + 1.39HR + .33W - .102(AB - H)

These weights match our expectations better than any we have yet seen. The equation has a RMSE of 24.05, which is better than the aOPS and OPS+ based R/O estimators but not as good as the versions that estimate R/PA. So let’s take a look at a R/PA estimator:

aR/P = .902(aOBA) + .894(aSLG) - .795

Which can be rewritten as:

Runs = (2.784*OBA + 2.286*SLG - .795)*.117*PA

Here, the relative weight of OBA against SLG is 2.784/2.286 = 1.22. Remember, though, that this formula is attempting to estimate only R/PA. To convert to R/O, you would have to divide by (1 - OBA), which gives a lot more weight to OBA.

The version above, estimating R/O, attempts to be a final rate stat in and of itself, and in that case, the 1.8 weight on OBA is justified. But it is really more logical to first estimate R/PA and then convert to R/O. If you want a pretty x*OBA + y*SLG + z model, though, that approach doesn’t fit the bill.

Continuing, we have:

Runs = .326*(OBA*PA) + .267*(SLG*PA) - .093*PA

Which differentiates to:

LW = .326*(OBA*p + dOBA*PA) + .267*(SLG*p + dSLG*PA) - .093*p

Which gives these weights:

Runs = .52S + .81D + 1.10T + 1.39HR + .34W - .103(AB - H)

At this point, we have basically reached agreement between the two approaches (estimating R/PA and estimating R/O). Note that I do not actually endorse using these formulas to estimate runs scored; I am only using them as a means of discussing OBA/SLG combinations. Linear Weights and Base Runs, depending on the question at hand, are the only run estimators I endorse (I’m using “run estimators” to refer to those methods that can be easily written as a simple formula, not approaches like markov modeling, simulators, and the like).

As I mentioned earlier, regression is by no means the only (or best) approach to determining what the weights for OBA and SLG should be. Other people have looked at this in different ways. I will point you to one such study, Tango Tiger’s “OPS: Begone” series (part one and part two).

Let’s deal with one more OBA/SLG combination, Aaron Gleeman’s Gross Production Average. GPA = (1.8*OBA + SLG)/4. GPA starts with the 1.8 weight on OBA, which as we have seen is pretty reasonable, and then rescales the result by dividing it by four, making the scale resemble batting average.

I have previously criticized the use of this scale shift with EQA, but I do find it a bit more palatable in the case of GPA. I always think that it is best to have a statistic expressed in terms of estimated units, with the unit being something fundamental (I would consider things like OBA, R/PA, R/O, and R/G in this category). Batting Average is fundamental in the sense that it is still the statistic most in use among the general baseball public, it has had great relevance throughout history, etc., but it is not fundamental to understanding baseball. I would consider hit frequency (H/PA) to be a much more fundamental measure than the batting average.

So while I’m not fond of the BA scale personally, I understand that some people like it. The reason why I don’t like EQA goes deeper; it is that it cannot really be used for any mathematical comparison between players without serious adjustment. In the case of GPA, 1.8*OBA + SLG is roughly equivalent to R/O in terms of scale. A team whose 1.8*OBA + SLG is 20% better than another team figures to score about 20% more runs.

Dividing by four does nothing to eliminate this property, which I would call “ratio comparability” (see here). Dividing everything by a constant does not affect ratio relationships.

There is also “differential comparability”. An example would be that an OBA of .400, when compared to an OBA of .350, can be taken to mean not only “on base 14% more often”, but also “.050 more times on base per PA” (or 5 per 100 PA, etc.). OBAs are comparably by both ratio and difference.

GPA, on the other hand, is not differentially comparable. A .400 GPA is not .050 more anything than a .350 GPA, other than GPA points. It is a unitless measure. However, the same is true for 1.8*OBA + SLG. So the transformation to GPA does not remove a property that would otherwise be present.

If you look at the same questions for EQA, the conversion that Clay Davenport makes from estimated RC/out to EQA destroys both multiplicative and differential comparability that previously existed. That is why I dislike the EQA scale, but have only the mild objection to GPA that it is not expressed in a meaningful estimated unit.

No comments:

Post a Comment

I reserve the right to reject any comment for any reason.