Creating Northwoods League WAR



The Northwoods League1 is one of the nation’s premier summer collegiate baseball leagues, providing hundreds of prospects from a range of collegiate levels to showcase their skills over a 72-game summer season. I spent my summer as the Statistics & Analytics Intern for the Battle Creek Battle Jacks2, operating as the official scorekeeper for each of the team’s 36 home games.

The Northwoods League’s Scorebook software is a phenomenal tool for tracking and displaying player statistics, but it doesn’t dig much deeper than the most elementary numbers. Ultimately, this led to emphasis being placed on the wrong player evaluation metrics, with too much focus on Batting Average (AVG) and not enough on On-Base (OBP) and Slugging Percentage (SLG). Halfway through the season, upon initial creation of Wins Above Replacement (WAR), this became evident when examining the league’s elected All-Stars3. Only 25 of the 54 All-Stars (46%), were deserving of the spot based on WAR alone4. Naturally, there are other factors, but such a discrepancy makes it clear that coaches, owners, broadcasters, and staff around the league were looking in the wrong place when assessing player performance.

My favorite example of this comes from two players in the Great Lakes Division:

2B Fisher Pyatt – Battle Creek Battle Jacks via San Diego State University

.241 AVG/.418 OBP/.353 SLG, 2 HR 23 RBI, 1.1 WAR (155 PA)

3B Grant Broussard – Wisconsin Rapids Rafters via Utah Valley University

.235 AVG/.321OBP/.347SLG, 3 HR 30 RBI, 0.1 WAR (194 PA) *ALL-STAR*

Wisconsin Rapids’ Broussard was elected to the All-Star Game, while Battle Creek’s Pyatt was not. Similar across most metrics, Pyatt’s elite 20% walk-rate led to an OBP of .418, giving him an entire WAR above Broussard.

(For the full list of players and a more in-depth analysis of Pyatt vs. Broussard, click here)

Clearly, development of a WAR metric would be beneficial to the league and all of its players. The first step in developing such a metric is to create a Run Expectancy Matrix5.

Run Expectancy Matrix

The Run Expectancy Matrix is the backbone of all of sabermetrics. The matrix contains 24 cells, one for each of the unique 24 base-out states in baseball. Inside each cell is the expected runs scored after reaching this state in an inning. From this number, we can assign estimated run values to each event based on their change in run expectancy.

As I mentioned earlier, I served as the official scorekeeper for all 36 Battle Creek home games. While in this position, I logged the play-by-play of every home and away game for the team, leading to 72 full games and 6,632 total observations. From this play-by-play, I constructed the following matrix:

Runners0 Outs1 Out2 Outs

Table 1: Northwoods League Run Expectancy Matrix, 2022

Offensive WAR

Fangraphs6 uses the following formula to calculate WAR for position players:

WAR = (Batting Runs + Base Running Runs + Fielding Runs + Positional Adjustment + League Adjustment +Replacement Runs) / (Runs Per Win)

Due to lack of adequate fielding and positional data, I alter it slightly to make for an easier calculation.

WAR = (Batting Runs + Base Running Runs + League Adjustment + Replacement Runs) / (Runs Per Win)

The first component of WAR is Batting Runs, which goes by the formula:

Batting Runs = wRAA + (lgR/PA – (PF*lgR/PA))*PA + (lgR/PA – GL or GP wRC/PA))*PA

There are numerous factors in this formula, and in order to reach this step we must climb the ladder, beginning with a player’s Weighted On-Base Average, or wOBA.

wOBA is a linear combination of each batting outcome with its respective linear weight. This is where the Run Expectancy Matrix comes in. Each outcome’s linear weight is the value of its mean change in run expectancy. Since wOBA is weighted, there are two adjustments to be made after this to arrive at the final value. For simplicity and to avoid negative numbers, each linear weight is not just a change in overall run expectancy but is a change in run expectancy above an out. Finally, wOBA is put on the same scale as a more well-known statistic: OBP. In the MLB, this value is usually near .310, but in the Northwoods League it is inflated to .372.

 For example, using the matrix, a double may change the base out state from runner on first with one out (1_100) to second and third with one out (1_023), for a change in run expectancy of 1.916 – 0.673 = +1.243. When compared to the average out, this play has a linear weight of 1.243 – (-0.429) = +1.672. When weighted at the wOBA scale, the final linear weight is 1.672 * 0.966 = 1.615. This is just an example for one specific plate appearance, the table below shows this process for the weight of each event.

EventRun Exp.Above OutScaled
All Outs-0.4290.0000.000
Hit By Pitch0.4870.9160.884
Home Run1.4281.8561.792

Table 2: wOBA Linear Weights

Incorporating these values into player statistics, here are the top ten players in wOBA in the 2022 season, minimum 100 plate appearances.

1.Ross, BWIR.527
2.Sojka, AFDL.514
3.Hug, CWAU.504
4.Ross, SMAN.498
5.Jackson, OGB.494
6.Gomez, DROC.486
7.Comia, BFDL.485
8.Lipsey, TKZO.484
9.Mitchell, NFDL.483
10.Nankil, NWIR.483

Table 3: Northwoods League wOBA Leaders (minimum 100 plate appearances, 2022)

wOBA is a rate statistic, describing how many runs a player will provide to his team per plate appearance. In order to use this in the calculation of Batting Runs, it needs to be translated into a cumulative statistic, Weighted Runs Above Average, or wRAA, as is seen in the Batting Runs formula.

wRAA is the principal component in Batting Runs, to arrive at the final number only two adjustments need to be made. The first is for a player’s home ballpark. Different home ballparks have different run environments and therefore different Park Factors7, the primary example of this is Denver’s Coors Field favoring offense due to high altitude. A similar range of environments occur in the Northwoods League, for a variety of reasons. Here are the Park Factors for each of the 21 unique ballparks, calculated on data from 2021-2022 using the method by Baseball Reference8. 100 is league average, higher numbers indicate a higher run environment. For example, a PF of 105 has 5% more runs than average.

Great Lakes TeamOffenseDefenseGreat Plains TeamOffenseDefense
Battle Creek BC92.494.4Bismarck BIS93.695.8
Fond du Lac FDL103.4102.1Duluth DUL101.1102.1
Green Bay GB104.5106.6Eau Claire EC95.695.7
Kenosha KEN107.6107.2La Crosse LAC107.2108.5
Kokomo KMO95.096.4Mankato MAN92.791.3
Kalamazoo KZO99.199.4Minnesota MIN100.0100.0
Lakeshore LAK100.3100.1Rochester ROC101.4102.1
Madison MAD93.894.9St. Cloud STC102.497.7
Rockford RFD115.1115.7Waterloo WAT105.6106.8
Traverse City TVC90.387.8Willmar WIL101.198.6
Wausau WAU102.2101.9   
Wisconsin Rapids WIR97.094.3   

Table 4: Northwoods League Park Factors, 2021-2022

The final adjustment is league-based. The Northwoods League is split into two conferences: Great Lakes and Great Plains. There is no interleague play, so an adjustment must be made based on a player’s league/conference. Here is the strength of each leagues run environment, in a format similar to park factors.

Great LakesGreat Plains

Table 5: Northwoods League Division Factors, 2022

Putting it all together, here are the leaders for Batting Runs:

#PlayerTeamBatting Runs
1.Ross, SMAN34.61
2.Ross, BWIR34.44
3.Mitchell, NFDL32.72
4.Nett, JSTC32.14
5.Dykstra, RKZO25.97
6.Bobo, BWIR23.82
7.Stephan, AKZO23.76
8.Tuft, CWIR22.84
9.Campbell, KDUL22.48
10.Sojka, AFDL22.37

Table 6: Northwoods League Batting Runs Leaders, 2022

The next component is Base Running Runs, which is found from Weighted Stolen Bases. Advancement on batted balls will be disregarded due to lack of data.

wSB = SB * runSB + CS * runCS – lgwSB * (1B + BB + HBP – IBB)

Naturally, a stolen base adds to run expectancy and a caught stealing takes runs away. wSB allows us to factor in how many runs a player subtracts from their team when they don’t attempt to steal a base at all. For example, Eau Claire Express third-baseman Sam Kuchinski9 accumulated 246 plate appearances in 53 games but did not make a single stolen base attempt. Because of this, his wSB was -0.84. Although he was never caught stealing, the missed opportunity of advancing to the next base cost his team nearly an entire run.

Here are the leaders for wSB and, subsequently, Baserunning Runs:

#PlayerTeamBaserunning Runs
1.Guardino, RWAT5.27
2.Traficante, CTVC4.52
3.Seegers, MLAK4.47
4.Toole, MTVC3.87
5.Atkinson, ATVC3.75
6.Bateman, BWIL3.75
7.Rogers, JDDUL3.75
8.Kaiser, CLAK3.29
9.Payne, KWIL2.69
10.Donahue, JLAC2.60

Table 7: Northwoods League Baserunning Runs Leaders, 2022

The next component is league adjustment, now factoring in baserunning runs as well. This figure was minor (< 0.1 for each league) so I will not explain any further.

The final component is replacement level. FanGraphs and Baseball Reference have agreed to the same replacement level, so I will follow it here: 1,000 total WAR in a full MLB season, with 57% attributed to position players and 43% to pitchers. The 2022 Northwoods League season comprised of only 756 games, so there will only be around 311 total WAR, ~177 for position players and ~134 for pitchers. Therefore, the following formula will output Replacement Level Runs:

Replacement Level Runs = (177.33 * (lgG/756) * (Runs Per Win/lgPA) * PA 

lgG and lgPA describe the total games and plate appearances across the entire league to the current date of calculation. Runs per win (RPW) is a Pythagorean10-based statistic that determines how many extra runs a team needs to score to add an extra win. In the NWL, the value of RPW is 12.3. Ultimately, a replacement level position player is worth about 0.0349 runs per plate appearance.

After adding every component and dividing by Runs Per Win, the final calculation of Offensive WAR is complete. Here are the top ten players:

#PlayerTeamNWL WAR162G WAR
1.Nett, JSTC3.68.7
2.Mitchell, NFDL3.68.2
3.Ross, SMAN3.68.6
4.Ross, BWIR3.57.9
5.Dykstra, RKZO2.96.4
6.Stephan, AKZO2.76.1
7.Campbell, KrDUL2.76.4
8.Bobo, BWIR2.76.1
9.Schwabe, CEC2.56.0
10.Tuft, CWIR2.55.6

Table 8: Northwoods League Offensive WAR Leaders, 2022

The fifth column illustrates a player’s WAR expanded onto a full 162 game MLB season, rather than the shortened summer season. It does not decrease in perfect order since teams in the Great Lakes played more games than those in the Great Plains (72 vs. 68) due to team count.

Wins Above Replacement and other advanced stats for every Northwoods League player can be found on my public database11.

Pitcher WAR

WAR for pitchers is slightly less straightforward than it is for position players, and I use the methodology given by FanGraphs12. Here is the formula:

WAR = [[([(League “FIP” – “FIP”) / Pitcher Specific Runs Per Win] + Replacement Level) * (IP/9)] * Leverage Multiplier for Relievers] + League Correction

The main change that I make is eliminating the leverage multiplier for relievers, mostly due to a lack of adequate data.

The first step is to calculate Fielding Independent Pitching (FIP). FIP is designed as a substitute for the more common Earned Run Average (ERA), leveling out batted ball luck. FanGraphs uses FIP with infield-fly balls, but due to lack of data regular FIP will be used, with the following formula:

FIP = ((13*HR)+(3*(BB+HBP))-(2*K))/IP + constant

The constants 13, 3, -2 reflect run values and were calculated from MLB data. Out of curiosity, I fit a linear model on individual Northwoods League pitcher data (min 36 IP, 2017-2021) and received the following coefficients:


Table 9: FIP Model Coefficients

Close enough to validate FIP as a Northwoods League statistic. The FIP constant exists to make FIP easily comparable to ERA, giving them the same league average. Here are the ten pitchers with the best FIP, minimum 36 innings pitched.

1.Wright, DMAD2.42
2.Lanoux, CBC2.83
3.Chalus, ELAK2.84
4.Schultz, DMAN2.98
5.Horvath, TKMO3.05
6.Clark, DTVC3.26
7.Novotny, TWIL3.36
8.Battaglia, JSTC3.47
9.Candiotti, CKEN3.50
10.Seebach, KRFD3.58

Table 10: Northwoods League FIP Leaders, 2022

Just like ERA, FIP does not describe all of the runs scored, as some are unearned. A simple adjustment turns FIP into FIP Runs Per 9 innings (FIPR9) accounting for the random, unearned runs. FIPR9 then undergoes near identical park and league adjustments as wRAA did for position players, becoming Runs Above Average Per 9 Innings (RAAP9).

The next important component is each pitcher’s Dynamic Runs Per Win (dRPW). This is similar to RPW for position players, but the difference is pitchers have more control over their run environment. If Pitcher A is a much better pitcher than Pitcher B, than Team A will need fewer runs to win than Team B does. Dividing the two metrics (RAAP9/dRPW) will output a player’s Wins Per Game Above Average (WPGAA).

However, WAR is above replacement, not average, meaning the next step is to add in replacement level. Unlike position players, this is not the same for everyone, depending on whether a pitcher is a starter or reliever, following this formula:

Replacement Level = 0.03*(1 – GS/G) + 0.12*(GS/G)

This method clearly favoritism to starting pitchers, giving them a much higher replacement leavel. This is usually accounted for by a reliever’s leverage index, which I am leaving out of the calculation. To make up for this, I move each constant halfway to the mean replacement level of 0.75, giving the following formula:

Replacement Level = 0.0525*(1 – GS/G) + 0.0975*(GS/G)

Once the replacement level is found, WPGAA becomes WPGAR. This value is multiplied by total “games” (IP/9) pitched and given a minuscule adjustment to finally become WAR. Here are the top ten pitchers in WAR:

#PlayerTeamNWL WAR162G WAR
1.Thompson, RRFD1.73.9
2.Schultz, DMAN1.74.1
3.Harrison, CLAC1.53.6
4.Buhr, DMAN1.53.5
5.Wright, DMAD1.43.2
6.Lanoux, CBC1.43.2
7.Habeck, JWIL1.43.3
8.Gustafson, ArTVC1.43.1
9.Candiotti, CKEN1.43.0
10.Chalus, ELAK1.32.9

Table 11: Northwoods League Pitching WAR Leaders

Wins Above Replacement and other advanced stats for every Northwoods League pitcher can be found on my public database11.


How well does WAR represent real team success? When compared with three different metrics (Win Percentage, Pythagorean Win Percentage, Simple Rating System13), WAR has a correlation near 0.83-0.85 for each one, making for a strong relationship.

Figure 1: Northwoods League WAR Per Game and Team Win Percentages, 2022

In the Win Percentage plot, the variance remains relatively equal throughout, without any large residuals, further enhancing the relationship.

Figure 2: Northwoods League WAR Per Game and Team Pythagorean Win Percentages, 2022

The Pythagorean Win Percentage plot is similar, just on a smaller y-axis window, leading to a slightly higher correlation.

Figure 3: Northwoods League WAR Per Game and Simple Rating System, 2022

Baseball Reference’s Simple Rating System yields the lowest correlation and highest variance. This is likely due to the statistic’s importance of strength of schedule, As we know, WAR does not factor in opponent strength, causing this factor to bump certain points further from the regression line.


The Wins Above Replacement statistic is an accurate and effective way to analyze both individual player and team success in the Northwoods League. This metric levels the playing field for hundreds of amateur players, allowing for a more valid form of evaluation.

In the future, similar statistics can be developed for the dozens of collegiate summer baseball leagues from coast to coast. One other example was Humbert Kilanowski’s calculation of WAR for the Cape Cod League in 201914. The ultimate goal is one, all-inclusive Amateur WAR value that adjusts for not only ballparks and divisions, but for the overall talent of each summer league. Such a metric would be labor intensive and require a strong knowledge of amateur leagues, but it is one of my biggest aspirations in baseball research.


  1. Northwoods League. (n.d.). Retrieved November 9, 2022, from
  2. Fan’s best friend. Battle Creek Battle Jacks. (n.d.). Retrieved November 9, 2022, from
  3. Admin. (2022, July 14). Northwoods League announces 2022 all-star selections. Northwoods League. Retrieved November 9, 2022, from
  4. Banks, J. (2022, July 20). Northwoods League All-War Team. Battle Creek Battle Jacks. Retrieved November 9, 2022, from
  5. Tango, T. (n.d.). Run expectancy matrix, 1950-2015. Retrieved November 9, 2022, from
  6. Slowinski, P. (n.d.). War for position players. Sabermetrics Library. Retrieved November 9, 2022, from
  7. Statcast Park factors. (n.d.). Retrieved November 9, 2022, from
  8. Park adjustments. Baseball Reference. (n.d.). Retrieved November 9, 2022, from
  9. Sam Kuchinski. Northwoods League. (n.d.). Retrieved November 9, 2022, from
  10. Pythagorean theorem of baseball. Baseball Reference. (n.d.). Retrieved November 9, 2022, from
  11. Banks, J. (n.d.). Advanced database.xlsx. Google Sheets. Retrieved November 9, 2022, from
  12. Slowinski, P. (n.d.). War for pitchers. Sabermetrics Library. Retrieved November 9, 2022, from
  13. SRS calculation details. Sports Reference. (n.d.). Retrieved November 9, 2022, from
  14. Kilanowski, H. (2020, June 16). cWAR: Modifying Wins Above Replacement with the Cape Cod Baseball League. Society for American Baseball Research. Retrieved November 9, 2022, from
  15. Marchi, M., Albert, J., & Baumer, B. S. (2019). Analyzing baseball data with R (Second Edition). CRC Press.

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *