{"id":192,"date":"2017-10-04T11:25:59","date_gmt":"2017-10-04T18:25:59","guid":{"rendered":"http:\/\/www.ootp.cavebutter.net\/blog\/?p=192"},"modified":"2017-10-04T11:25:59","modified_gmt":"2017-10-04T18:25:59","slug":"batting-stats-7-woba-corrected","status":"publish","type":"post","link":"http:\/\/www.ootp.cavebutter.net\/blog\/archives\/192","title":{"rendered":"Batting Stats 7: wOBA Corrected"},"content":{"rendered":"<p>I think I found one of the culprits: Intentional Walks. \u00a0Our two guys, Sink and McDonough, have IBB&#8217;s in that season well over the average. \u00a0I queried the database to find their IBB&#8217;s as well as league average for those seasons:<\/p>\n<pre class=\"line-numbers\"><code class=\"language-sql\">SELECT b.player_id\r\n  , concat(p.first_name, \" \", p.last_name) as player \r\n  , l.abbr\r\n  , b.year\r\n  , b.league_id as league \r\n  , b.ibb\r\n  , x.lg_avg_ibb\r\n  , b.ibb-x.lg_avg_ibb as diff\r\nFROM (  \t\r\n\tSELECT b.year\r\n\t , b.league_id\r\n\t , round(avg(b.ibb),0) as lg_avg_ibb\r\n\tFROM CalcBatting b\r\n\tINNER JOIN players p ON b.player_id-p.player_id\r\n\tWHERE b.ab&gt;200 AND p.position&lt;&gt;1 \r\n\tGROUP BY b.year, b.league_id\r\n\t) as x\r\n  INNER JOIN CalcBatting b ON x.year=b.year AND x.league_id=b.league_id\r\n  INNER JOIN players p ON b.player_id=p.player_id\r\n  INNER JOIN leagues l ON b.league_id=l.league_id\r\n WHERE b.player_id IN (2574, 472) AND b.year=2015;<\/code><\/pre>\n<p>You&#8217;ll see that both were well above average:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"186\" data-permalink=\"http:\/\/www.ootp.cavebutter.net\/blog\/?attachment_id=186\" data-orig-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg?fit=527%2C63\" data-orig-size=\"527,63\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ibb1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg?fit=527%2C63\" class=\"aligncenter size-full wp-image-186\" src=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg?resize=527%2C63\" alt=\"\" width=\"527\" height=\"63\" srcset=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg?w=527 527w, https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb1.jpg?resize=300%2C36 300w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/a>Sink is about 1 standard deviation above average while McDonough is off the charts at almost 6.<\/p>\n<p>I took a look at the 10 highest IBB variances to see if we can say with any certainty that we&#8217;re handling IBB&#8217;s incorrectly:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"187\" data-permalink=\"http:\/\/www.ootp.cavebutter.net\/blog\/?attachment_id=187\" data-orig-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg?fit=761%2C154\" data-orig-size=\"761,154\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ibb2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg?fit=739%2C150\" class=\"aligncenter size-full wp-image-187\" src=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg?resize=739%2C150\" alt=\"\" width=\"739\" height=\"150\" srcset=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg?w=761 761w, https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb2.jpg?resize=300%2C61 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a>Looking at this, I think it&#8217;s pretty clear that if nothing else, IBB is at least contributing to the differences in wOBA by weighting it too highly.<\/p>\n<p>It turns out that it&#8217;s not necessarily the weighting, but rather for formula for wOBA itself. \u00a0I removed IBB from the formula and recalculated wOBA for these 10 player-seasons:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"189\" data-permalink=\"http:\/\/www.ootp.cavebutter.net\/blog\/?attachment_id=189\" data-orig-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?fit=840%2C153\" data-orig-size=\"840,153\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ibb3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?fit=739%2C135\" class=\"aligncenter size-full wp-image-189\" src=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?resize=739%2C135\" alt=\"\" width=\"739\" height=\"135\" srcset=\"https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?w=840 840w, https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?resize=300%2C55 300w, https:\/\/i0.wp.com\/www.ootp.cavebutter.net\/blog\/wp-content\/uploads\/2017\/10\/ibb3.jpg?resize=768%2C140 768w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a>Every single one of them improved. \u00a0Not yet perfect, but now that I have the outliers at least within the medium range, I feel comfortable moving on for real. \u00a0So, here&#8217;s the revised script for CalcBatting with the corrected formula for wOBA:<\/p>\n<pre class=\"line-numbers\" data-line=\"41-43\"><code class=\"language-sql\">#Calculated batting stats for OOTP\r\n    DROP TABLE IF EXISTS CalcBatting;\r\n    CREATE TABLE IF NOT EXISTS CalcBatting AS\r\n\r\n    SELECT b.year\r\n    , b.league_id\r\n    , b.player_id\r\n    , b.stint #We can eventually move this down the list\r\n    , b.split_id #We can eventually remove\r\n    , b.team_id #We can eventually move this down the list\r\n    , l.abbr as Lg\r\n    , t.abbr as Team\r\n    , b.g\r\n    , b.ab\r\n    , @PA := b.ab+b.bb+b.sh+b.sf+b.hp AS PA\r\n    , b.r \r\n    , b.h\r\n    , b.d\r\n    , b.t\r\n    , b.hr\r\n    , b.rbi\r\n    , b.sb\r\n    , b.cs\r\n    , b.bb\r\n    , b.k\r\n    , b.ibb\r\n    , b.hp\r\n    , b.sh\r\n    , b.sf\r\n    , b.gdp\r\n    , b.ci\r\n    , @BA := round(b.h\/b.ab,3) AS ba\r\n    , round(b.k\/@PA,3) as krate\r\n    , round((b.bb)\/@PA,3) as bbrate\r\n    , @OBP := round((b.h + b.bb + b.hp)\/(@PA-b.sh-b.ci),3) AS obp\r\n    , round(100*(@OBP\/r.woba),0) as OBPplus\r\n    , @SLG := round((b.h+b.d+2*b.t+3*b.hr)\/b.ab,3) as slg\r\n    , round(@OBP+@SLG,3) as ops\r\n    , round(@SLG-@BA,3) as iso\r\n    , round((b.h-b.hr)\/(b.ab-b.k-b.hr+b.sf),3) as babip\r\n    , round((r.wobaBB*(b.bb-b.ibb) + r.wobaHB*b.hp + r.woba1B*(b.h-b.d-b.t-b.hr) +\r\n       r.woba2B*b.d + r.woba3B*b.t + r.wobaHR*b.hr)\r\n       \/(b.ab+b.bb-b.ibb+b.sf+b.hp),3) as woba\r\n    \/* NOT yet modified for OOTP and MySQL\r\n    , round((([woba]-r.lgwoba)\/r.wobascale)*[PA],1) as wRAA\r\n    , round(((([woba]-r.lgwoba)\/r.wobascale)+(l.totr\/l.totpa))*[PA],0) as wRC\r\n    , ((([wRAA]\/[PA] + l.RperPA) + (l.RperPA - t.bpf*l.RperPA))\/(lb.wRC\/lb.PA))*100 AS [wRC+]\r\n    *\/\r\n    FROM \r\n      players_career_batting_stats b \r\n      INNER JOIN leagues l ON b.league_id=l.league_id \r\n      INNER JOIN teams t ON b.team_id=t.team_id\r\n      INNER JOIN tblRunValues2 r ON b.year=r.year AND b.league_id=r.league_id\r\n    WHERE b.ab&lt;&gt;0 AND b.split_id=1\r\n    ORDER BY b.player_id, b.year<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>I think I found one of the culprits: Intentional Walks. \u00a0Our two guys, Sink and McDonough, have IBB&#8217;s in that season well over the average. \u00a0I queried the database to find their IBB&#8217;s as well as league average for those seasons: SELECT b.player_id , concat(p.first_name, &#8221; &#8220;, p.last_name) as player , l.abbr , b.year ,&hellip; <a class=\"more-link\" href=\"http:\/\/www.ootp.cavebutter.net\/blog\/archives\/192\">Continue reading <span class=\"screen-reader-text\">Batting Stats 7: wOBA Corrected<\/span> <span class=\"meta-nav\" aria-hidden=\"true\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[25],"tags":[14,7,4,22],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-batting","tag-batting","tag-mysql","tag-ootp","tag-players"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9cxb5-36","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":2,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/posts\/192\/revisions"}],"predecessor-version":[{"id":194,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/posts\/192\/revisions\/194"}],"wp:attachment":[{"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/media?parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/categories?post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.ootp.cavebutter.net\/blog\/wp-json\/wp\/v2\/tags?post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}