Introducing wPD+ — Hitters Edition

I’m proud to introduce wPD+ (weighted plate discipline plus), a new metric that attempts to capture a given hitter’s level of plate discipline relative to the league average, which in this case will be 100. It takes into account a. what pitches is the hitter swinging at and b. what rate is he making contact with those pitches.

Photo: House of Houston

Part A

FanGraphs Plate Discipline Stats

O-Swing%: the percent of time a hitter swings at pitches outside the strike zone

Z-Swing%: the percent of time a hitter swings at pitches inside the strike zone

I took both of these stats and divided them by the league average for non-pitchers. Here’s what the calculations would look like for Michael Brantley…

O-Swing = (100% – 28.7% O-Swing) / 68.9% O-Swing [League Average] * 100 = 103

  • Note: the reason I subtracted Brantley’s O-Swing% from 100% is because that gives the percent of time Brantley lays off of pitches outside the strike zone.

Z-Swing = (61.2% Z-Swing / 68.8% Z-Swing [League Average]) * 100 = 89

Afterwards, I converted the two bolded values into a weighted average based on Michael Brantley’s Zone% (percent of time Brantley is thrown pitches in the strike zone)…

O-Z-Swing = {(100% – 45.2 Zone%) * 103 [O-Swing score]} + (45.2 Zone% * 89 [Z-Swing score]) = 97

  • Note: the reason I subtracted Brantley’s Zone% from 100% is because that gives the percent of pitches thrown to him that are outside the strike zone

Part B

FanGraphs Plate Discipline Stats

O-Contact%: the percent of time a hitter makes contact when he swings at pitches outside the strike zone

Z-Swing%: the percent of time a hitter makes contact when he swings at pitches inside the strike zone

Likewise, I took both of these metrics and divided them by the league average (for NPs). Here’s what the calculations would look like for Michael Brantley…

O-Contact = (83.7% O-Contact / 62.9% O-Contact [League Average]) * 100 = 133

Z-Contact = (96.5% Z-Contact / 85.1% Z-Contact [League Average]) * 100 = 113

For Part B, I also converged the two values, but this time a little bit differently.

45.2% of the pitches Brantley sees are in the strike zone. He swings at 61.2% of them, and he makes contact with them 96.5% of the time. If you multiply all those percents out and times the final number by 100, you get 26.7 — which means on average, for every 100 pitches Brantley sees, he will make contact with 26.7 of them inside the strike zone. If you repeat the same process for pitches Brantley sees that are outside the strike zone, you get 13.2 (which holds the same meaning as the one above expect it is with pitches outside the strike zone). Now we are ready to weigh the two original values…

O-Z-Contact = {(13.2 / 39.9 [13.2 + 26.7]) * 133} + (26.7 / 39.9 * 113) = 120

In order to arrive at the ultimate wPD+ rating, we need to average (weighted) the two primary scores [O-Z-Swing and O-Z-Contact)…

(97 [O-Z-Swing] * 0.35) + (120 [O-Z-Contact] * 0.65) = 111.9

I weighted O-Z-Contact more heavily mainly because whether or not a hitter is making contact (hopefully on pitches inside the strike zone rather than outside) is definitely more important than the actual pitches they are swinging at in my discretion.

Before I reveal the full wPD+ leaderboard, here are the wPD+ scores and their corresponding percentiles among qualified hitters…

  • 90.7 – 96.1: very bad (0.6 – 10.2 percentile)
  • 96.2 – 97.7: bad (10.8 – 20.4 percentile)
  • 97.9 – 99.0: below average (21.0 – 30.6 percentile)
  • 99.1 – 99.9: slightly below average (31.2 – 40.8 percentile)
  • 100.0 – 102.6: average (41.4 – 61.1 percentile)
  • 102.7 – 103.5: slightly above average (61.8 – 71.3 percentile)
  • 103.6 – 105.2: above average (72.0 – 81.5 percentile)
  • 105.5 – 108.3: good (82.2 – 91.7 percentile)
  • 108.4 – 111.9: very good (92.4 – 100 percentile)
Name TeamwPD+
Michael BrantleyAstros111.9
Joe PanikGiants111.7
David FletcherAngels111.0
Nick MarkakisBraves110.8
Anthony RendonNationals109.7
Josh ReddickAstros109.5
Tommy La StellaAngels109.5
Mookie BettsRed Sox109.4
Jesse WinkerReds108.6
Yuli GurrielAstros108.4
Jose RamirezIndians108.4
Jean SeguraPhillies108.4
Alex BregmanAstros108.3
DJ LeMahieuYankees108.1
Adam FrazierPirates108.0
Alex VerdugoDodgers108.0
Mike TroutAngels107.7
Justin TurnerDodgers107.2
Marcus SemienAthletics107.2
Ketel MarteDiamondbacks106.7
Jorge PolancoTwins106.4
Max KeplerTwins106.4
Adam EatonNationals106.2
Cesar HernandezPhillies106.1
Brett GardnerYankees106.0
Jose IglesiasReds105.8
Francisco LindorIndians105.7
Jeff McNeilMets105.5
Hanser AlbertoOrioles105.2
Kolten WongCardinals105.1
Miguel RojasMarlins105.1
Albert PujolsAngels105.0
Carlos SantanaIndians104.9
Starlin CastroMarlins104.9
Joey VottoReds104.4
Anthony RizzoCubs104.3
Charlie BlackmonRockies104.2
Yadier MolinaCardinals104.2
Brandon BeltGiants104.1
Tommy PhamRays104.1
Lorenzo CainBrewers104.1
Maikel FrancoPhillies104.0
Nolan ArenadoRockies103.7
Whit MerrifieldRoyals103.6
Jake BauersIndians103.5
Eddie RosarioTwins103.5
Jurickson ProfarAthletics103.2
Kevin Pillar– – –103.1
Victor RoblesNationals103.1
Jason KipnisIndians103.0
Yandy DiazRays103.0
Cody BellingerDodgers103.0
Alex GordonRoyals102.9
Nick AhmedDiamondbacks102.9
Jason HeywardCubs102.9
Wilson RamosMets102.9
Matt ChapmanAthletics102.8
Andrew BenintendiRed Sox102.8
Ozzie AlbiesBraves102.7
Mike MoustakasBrewers102.7
Justin SmoakBlue Jays102.6
Matt CarpenterCardinals102.6
Juan SotoNationals102.5
Rafael DeversRed Sox102.2
Freddie FreemanBraves102.2
Kris BryantCubs102.1
Ronald Acuna Jr.Braves102.1
Elvis AndrusRangers102.0
Joc PedersonDodgers101.9
Josh BellPirates101.9
Asdrubal CabreraRangers101.9
Paul DeJongCardinals101.7
Rhys HoskinsPhillies101.6
Miguel CabreraTigers101.5
Xander BogaertsRed Sox101.4
Kevin KiermaierRays101.4
J.D. MartinezRed Sox101.2
Hunter DozierRoyals101.2
Daniel VogelbachMariners100.9
Dansby SwansonBraves100.9
Dexter FowlerCardinals100.8
Jonathan VillarOrioles100.8
J.T. RealmutoPhillies100.7
Evan LongoriaGiants100.6
Yolmer SanchezWhite Sox100.6
Manny MachadoPadres100.6
Tim AndersonWhite Sox100.3
Paul GoldschmidtCardinals100.3
Nicholas CastellanosTigers100.2
Starling MartePirates100.2
Marwin GonzalezTwins100.1
Trey ManciniOrioles100.1
Michael ConfortoMets100.0
Jose AbreuWhite Sox99.9
Austin MeadowsRays99.8
David PeraltaDiamondbacks99.8
Brian DozierNationals99.8
C.J. CronTwins99.8
Enrique HernandezDodgers99.8
Adam JonesDiamondbacks99.7
Christian YelichBrewers99.7
Leury GarciaWhite Sox99.6
Edwin Encarnacion– – –99.5
Christin StewartTigers99.5
Eric HosmerPadres99.4
Eugenio SuarezReds99.4
Gleyber TorresYankees99.3
Nomar MazaraRangers99.2
Max MuncyDodgers99.1
Christian WalkerDiamondbacks99.0
Shin-Soo ChooRangers98.9
Kole CalhounAngels98.9
Orlando ArciaBrewers98.9
Peter AlonsoMets98.7
Yasmani GrandalBrewers98.5
Kyle SchwarberCubs98.5
Amed RosarioMets98.4
Trevor StoryRockies98.4
Ryan BraunBrewers98.2
Brandon CrawfordGiants98.1
Brian AndersonMarlins98.1
Dwight Smith Jr.Orioles98.0
Marcell OzunaCardinals98.0
Ian DesmondRockies98.0
Eduardo EscobarDiamondbacks97.9
Domingo SantanaMariners97.7
Randal GrichukBlue Jays97.3
Jay Bruce– – –97.3
Khris DavisAthletics97.2
Josh DonaldsonBraves97.2
Renato NunezOrioles97.1
Hunter RenfroePadres97.1
Willy AdamesRays97.1
Yasiel PuigReds97.1
Jorge SolerRoyals96.9
Mallex SmithMariners96.8
Niko GoodrumTigers96.4
Ramon LaureanoAthletics96.3
Stephen PiscottyAthletics96.3
Freddy GalvisBlue Jays96.3
Rougned OdorRangers96.2
Chris TaylorDodgers96.1
Luke VoitYankees96.0
Bryce HarperPhillies95.9
David DahlRockies95.2
Jackie Bradley Jr.Red Sox94.6
Willson ContrerasCubs94.4
Avisail GarciaRays94.0
Jonathan SchoopTwins93.7
Franmil ReyesPadres93.5
Wil MyersPadres93.1
Brandon LoweRays92.8
Yoan MoncadaWhite Sox92.7
Gary SanchezYankees92.4
Adalberto MondesiRoyals91.6
Michael ChavisRed Sox91.2
Javier BaezCubs90.7

Here is a complete wPD+ ranking for all 30 teams’ offenses (pitchers included)…

  • Note: average = 100.0
Red Sox101.2
Blue Jays99.0
White Sox97.9

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s