<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Temporal Disruption &#187; Tech</title>
	<atom:link href="http://www.temporaldisruption.com/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.temporaldisruption.com</link>
	<description></description>
	<lastBuildDate>Thu, 22 Jul 2010 04:28:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>A Personal Reminder of Where I Stand on Net Neutrality</title>
		<link>http://www.temporaldisruption.com/2009/10/29/a-personal-reminder-of-where-i-stand-on-net-neutrality/</link>
		<comments>http://www.temporaldisruption.com/2009/10/29/a-personal-reminder-of-where-i-stand-on-net-neutrality/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 16:29:52 +0000</pubDate>
		<dc:creator>Bryan Packman</dc:creator>
				<category><![CDATA[Politics]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[government transparency]]></category>
		<category><![CDATA[Net Neutrality]]></category>
		<category><![CDATA[Obama]]></category>

		<guid isPermaLink="false">http://www.temporaldisruption.com/?p=230</guid>
		<description><![CDATA[In the spring of 2008, I made my first attempt at blogging. The blog only lasted about 10 posts until I eventually lost interest. The site&#8217;s no longer up, but I have the wordpress database backed up, and I may decide to republish these early posts at some point. This morning, I decided to read [...]]]></description>
			<content:encoded><![CDATA[<p>In the spring of 2008, I made my first attempt at blogging.  The blog only lasted about 10 posts until I eventually lost interest.  The site&#8217;s no longer up, but I have the wordpress database backed up, and I may decide to republish these early posts at some point.</p>
<p>This morning, I decided to read through the posts of my original blog, just to get an idea of what was going through my mind about a year and a half ago.  A lot of these posts took place during the primaries and presidential election of 2008.  It seems that the things that mattered most to me at the time were government transparency and net neutrality.  It was a nice reminder of why I got behind President Obama, and what I really want to see happen during this presidential term.  Of course, this was before the <a href="http://en.wikipedia.org/wiki/Lehman_Brothers#Bankruptcy">Lehman Leap</a>, and priorities have changed.  But regardless, here are a few excerpts:</p>
<p>From <strong>Time Warner Starts to Meter Internet Access</strong> &#8211; 2008-06-02 23:22:37:</p>
<blockquote><p>
Time Warner Cable <a href="http://biz.yahoo.com/ap/080602/tec_time_warner_cable_internet.html?.v=2">announced plans to meter internet access</a> in Texas today.  Beginning Thursday, new subscribers in Beaumont, Texas will have a monthly data usage cap between 5 and 40GB. This plan will also have an overage charge of $1 per gigabyte of data usage beyond the set cap.  Comcast, the largest cable company in the U.S., also <a href="http://www.dslreports.com/shownews/94185?r=171">has plans to implement metered internet access</a>.</p>
<p>While I don&#8217;t disagree with the idea of metered bandwidth, per se, I find the business practices and potential first amendment infringements of major ISP&#8217;s infuriating.  While corporate media has monopolized newspapers and television, the internet provides a medium for any user to contribute and voice their opinion.  When a few large corporations monopolize the flow of information on a certain medium, that gatekeeper, aka Comcast or Time Warner Cable, can potentially inhibit or promote access to choice informants.  The internet has a chance to succeed where older forms of media have failed, but Time Warner and Comcast&#8217;s recent actions can potentially threaten <a href="http://www.savetheinternet.com/">network neutrality</a>.
</p></blockquote>
<p>From <strong>Obama &#8211; The Open Source Candidate</strong> &#8211; 2008-06-04 23:09:36:</p>
<blockquote><p>
The word, &#8220;change&#8221;, has been triumphed by Obama&#8217;s supporters and rendered meaningless by his opponents throughout his campaign.  But &#8220;change&#8221; IS NOT just a buzzword.  In recent years, America has fallen behind the rest of the world in the use of alternative fuels and in the area of mobile technology.  Pharmaceutical companies and big oil companies continue to control policies through their lobbyists.</p>
<p>One of the main issues on which Obama is running is the transparency of government.  Obama wants all pending bills and all meetings between congressmen and lobbyists to be publicly available and searchable.  Obama embodies the same principles that people of the open-source community have defended for years, and this main reason why I&#8217;ve been a big supporter of his throughout his campaign.
</p></blockquote>
<p>Unfortunately, we haven&#8217;t seen the transparency promised in the second excerpt.  But the administration is <a href="http://www.bryanpackman.com/blog/2009/10/27/net-neutrality-video-dump/">making a nice push for net neutrality</a>.  As much as I want to see health care reform, net neutrality might be the issue that matters most to me.  It was nice to be reminded of that by reading through some of my old work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.temporaldisruption.com/2009/10/29/a-personal-reminder-of-where-i-stand-on-net-neutrality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Net Neutrality Video Dump</title>
		<link>http://www.temporaldisruption.com/2009/10/27/net-neutrality-video-dump/</link>
		<comments>http://www.temporaldisruption.com/2009/10/27/net-neutrality-video-dump/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:07:44 +0000</pubDate>
		<dc:creator>Bryan Packman</dc:creator>
				<category><![CDATA[Politics]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Glenn Beck]]></category>
		<category><![CDATA[Jon Stewart]]></category>
		<category><![CDATA[Net Neutrality]]></category>
		<category><![CDATA[Rachel Maddow]]></category>

		<guid isPermaLink="false">http://www.temporaldisruption.com/?p=223</guid>
		<description><![CDATA[Glenn Beck is misinformed, and a jackass: Rachel Maddow is well-informed, and intelligent: Visit msnbc.com for Breaking News, World News, and News about the Economy And of course, Jon Stewart is awesome:]]></description>
			<content:encoded><![CDATA[<p>Glenn Beck is misinformed, and a jackass:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/-s-vTNoe2_Q&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/-s-vTNoe2_Q&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
<p>Rachel Maddow is well-informed, and intelligent:</p>
<div><iframe height="339" width="425" src="http://www.msnbc.msn.com/id/22425001/vp/33456265#33456265" frameborder="0" scrolling="no"></iframe>
<p style="font-size:11px; font-family:Arial, Helvetica, sans-serif; color: #999; margin-top: 5px; background: transparent; text-align: center; width: 425px;">Visit msnbc.com for <a style="text-decoration:none !important; border-bottom: 1px dotted #999 !important; font-weight:normal !important; height: 13px; color:#5799DB !important;" href="http://www.msnbc.msn.com">Breaking News</a>, <a href="http://www.msnbc.msn.com/id/3032507" style="text-decoration:none !important; border-bottom: 1px dotted #999 !important; font-weight:normal !important; height: 13px; color:#5799DB !important;">World News</a>, and <a href="http://www.msnbc.msn.com/id/3032072" style="text-decoration:none !important; border-bottom: 1px dotted #999 !important; font-weight:normal !important; height: 13px; color:#5799DB !important;">News about the Economy</a></p>
</div>
<p>And of course, Jon Stewart is awesome:<br />
<embed style='display:block' src='http://media.mtvnservices.com/mgid:cms:item:comedycentral.com:252516' width='360' height='301' type='application/x-shockwave-flash' wmode='window' allowFullscreen='true' flashvars='autoPlay=false' allowscriptaccess='always' allownetworking='all' bgcolor='#000000'></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://www.temporaldisruption.com/2009/10/27/net-neutrality-video-dump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculating FIP and WAR from Retrosheet Data, Part 1</title>
		<link>http://www.temporaldisruption.com/2009/08/31/calculating-fip-and-war-from-retrosheet-data-part-1/</link>
		<comments>http://www.temporaldisruption.com/2009/08/31/calculating-fip-and-war-from-retrosheet-data-part-1/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 19:17:47 +0000</pubDate>
		<dc:creator>Bryan Packman</dc:creator>
				<category><![CDATA[Baseball]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[FIP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[park factor]]></category>
		<category><![CDATA[retrosheet]]></category>
		<category><![CDATA[WAR]]></category>

		<guid isPermaLink="false">http://www.temporaldisruption.com/?p=48</guid>
		<description><![CDATA[Ok, I finally have the beginnings (Finally have the beginnings? That doesn&#8217;t sound right.) of FIP and WAR calculations for starting pitchers. After parsing pitching data out of retrosheet files from the 2007 season, I calculated FIP and WAR for SP on a per-game level. By taking a weighted average of these game-level FIP and [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, I finally have the beginnings (Finally have the beginnings? That doesn&#8217;t sound right.) of FIP and WAR calculations for starting pitchers.  After parsing pitching data out of retrosheet files from the 2007 season, I calculated FIP and WAR for SP on a per-game level.  By taking a weighted average of these game-level FIP and WAR values, one can derive a pitcher&#8217;s FIP and WAR for an entire season.</p>
<p><a href="http://www.bryanpackman.com/blog/2009/08/27/park-factors/">In a previous post</a>, I mentioned my intent to update such metrics after parsing each event from a retrosheet file or a stats feed.  Though I intend to eventually update these metrics in &#8220;real-time&#8221;, I am currently calculating FIP and WAR after parsing an entire season&#8217;s worth of data.  For now, I want to get these values into a database and make sure my math is correct.  Once done, I&#8217;ll go back and optimize things so that FIP, WAR, and other stats can update with each relevant event.</p>
<p>I&#8217;ll now go through the process in detail, using James Shields&#8217; 2007 season as an example.  Before going through the details, here are a few disclaimers:
<ol>
<li>This is my first attempt at calculating FIP and WAR, and I am by no means an expert on the process.  I make a few assumptions, which I will explain, that may be incorrect.  If I find out that any of these assumptions are wrong, I&#8217;ll go back and update this post with the corrections.</li>
<li>MySQL tables are NOT optimized for displaying leaderboards or other practical uses.  Optimizing tables will be an ongoing process.</li>
</ol>
<p>My parsing script places a starting pitcher&#8217;s stats for an individual game into a table with the following structure:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`pitcher_game_start`</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="st0">`rs_game_id`</span> char<span class="br0">&#40;</span>12<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_player_id`</span> char<span class="br0">&#40;</span>8<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_park_id`</span> char<span class="br0">&#40;</span>5<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_league_id`</span> char<span class="br0">&#40;</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_team_id`</span> char<span class="br0">&#40;</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`year`</span> smallint<span class="br0">&#40;</span>6<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`HR`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`BB`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`HBP`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`IBB`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`SO`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`ER`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`R`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`IP_outs`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`rs_player_id`</span><span class="sy0">,</span><span class="st0">`rs_game_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`year_league`</span> <span class="br0">&#40;</span><span class="st0">`year`</span><span class="sy0">,</span><span class="st0">`rs_league_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`park_year`</span> <span class="br0">&#40;</span><span class="st0">`rs_park_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`game_id`</span> <span class="br0">&#40;</span><span class="st0">`rs_game_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`pylt`</span> <span class="br0">&#40;</span><span class="st0">`rs_player_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="sy0">,</span><span class="st0">`rs_league_id`</span><span class="sy0">,</span><span class="st0">`rs_team_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`tly`</span> <span class="br0">&#40;</span><span class="st0">`rs_team_id`</span><span class="sy0">,</span><span class="st0">`rs_park_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`ty`</span> <span class="br0">&#40;</span><span class="st0">`rs_team_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE<span class="sy0">=</span>MyISAM</div>
</div>
<p>A field of significant interest is `rs_league_id`.  This field describes the league of the home team.  <strong>For interleague games, the home team&#8217;s league will be used for the pitchers on both sides</strong>.  Additionally, the league average ERA and RA, both used in calculating FIP and WAR, will be based on the home team&#8217;s league.</p>
<p>Here are Shields&#8217; rows in `pitcher_game_start` for 2007:</p>
<div class="codesnip-container" >
<table>
<tr>
<td>rs_game_id</td>
<td>rs_player_id</td>
<td>rs_park_id</td>
<td>rs_league_id</td>
<td>rs_team_id</td>
<td>year</td>
<td>HR</td>
<td>BB</td>
<td>HBP</td>
<td>IBB</td>
<td>SO</td>
<td>ER</td>
<td>R</td>
<td>IP_outs</td>
</tr>
<tr>
<td>SEA200709140</td>
<td>shiej002</td>
<td>SEA03</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>1</td>
<td>1</td>
<td>24</td>
</tr>
<tr>
<td>TBA200709090</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>2</td>
<td>2</td>
<td>21</td>
</tr>
<tr>
<td>TBA200709030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>6</td>
<td>1</td>
<td>4</td>
<td>21</td>
</tr>
<tr>
<td>BAL200708290</td>
<td>shiej002</td>
<td>BAL12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td>6</td>
<td>4</td>
<td>4</td>
<td>24</td>
</tr>
<tr>
<td>TBA200708240</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>8</td>
<td>2</td>
<td>2</td>
<td>25</td>
</tr>
<tr>
<td>TBA200708190</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>6</td>
<td>2</td>
<td>2</td>
<td>18</td>
</tr>
<tr>
<td>BOS200708130</td>
<td>shiej002</td>
<td>BOS07</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>1</td>
<td>1</td>
<td>18</td>
</tr>
<tr>
<td>DET200708080</td>
<td>shiej002</td>
<td>DET05</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>9</td>
<td>1</td>
<td>1</td>
<td>21</td>
</tr>
<tr>
<td>TBA200708030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>3</td>
<td>1</td>
<td>0</td>
<td>6</td>
<td>3</td>
<td>3</td>
<td>20</td>
</tr>
<tr>
<td>TBA200707280</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>7</td>
<td>3</td>
<td>3</td>
<td>15</td>
</tr>
<tr>
<td>NYA200707220</td>
<td>shiej002</td>
<td>NYC16</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>4</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>10</td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td>TBA200707170</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>2</td>
<td>2</td>
<td>2</td>
<td>21</td>
</tr>
<tr>
<td>TBA200707120</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>3</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>2</td>
<td>5</td>
<td>6</td>
<td>18</td>
</tr>
<tr>
<td>KCA200707060</td>
<td>shiej002</td>
<td>KAN06</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>6</td>
<td>4</td>
<td>4</td>
<td>23</td>
</tr>
<tr>
<td>CLE200707010</td>
<td>shiej002</td>
<td>CLE08</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>10</td>
<td>2</td>
<td>3</td>
<td>19</td>
</tr>
<tr>
<td>TBA200706260</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>11</td>
<td>5</td>
<td>5</td>
<td>21</td>
</tr>
<tr>
<td>ARI200706200</td>
<td>shiej002</td>
<td>PHO01</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>4</td>
<td>6</td>
<td>6</td>
<td>15</td>
</tr>
<tr>
<td>COL200706150</td>
<td>shiej002</td>
<td>DEN02</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>2</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>2</td>
<td>5</td>
<td>5</td>
<td>18</td>
</tr>
<tr>
<td>FLO200706090</td>
<td>shiej002</td>
<td>MIA01</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>0</td>
<td>2</td>
<td>0</td>
<td>9</td>
<td>2</td>
<td>2</td>
<td>21</td>
</tr>
<tr>
<td>TBA200706040</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>2</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>2</td>
<td>2</td>
<td>22</td>
</tr>
<tr>
<td>TBA200705300</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>3</td>
<td>3</td>
<td>27</td>
</tr>
<tr>
<td>CHA200705250</td>
<td>shiej002</td>
<td>CHI12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>3</td>
<td>2</td>
<td>0</td>
<td>2</td>
<td>4</td>
<td>4</td>
<td>21</td>
</tr>
<tr>
<td>TBA200705200</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>3</td>
<td>0</td>
<td>0</td>
<td>8</td>
<td>1</td>
<td>1</td>
<td>21</td>
</tr>
<tr>
<td>TBA200705150</td>
<td>shiej002</td>
<td>LBV01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>3</td>
<td>3</td>
<td>24</td>
</tr>
<tr>
<td>BAL200705090</td>
<td>shiej002</td>
<td>BAL12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>4</td>
<td>0</td>
<td>0</td>
<td>27</td>
</tr>
<tr>
<td>TBA200705030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>2</td>
<td>1</td>
<td>0</td>
<td>8</td>
<td>3</td>
<td>3</td>
<td>22</td>
</tr>
<tr>
<td>OAK200704270</td>
<td>shiej002</td>
<td>OAK01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>9</td>
<td>1</td>
<td>1</td>
<td>24</td>
</tr>
<tr>
<td>TBA200704220</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>12</td>
<td>2</td>
<td>2</td>
<td>24</td>
</tr>
<tr>
<td>TBA200704160</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>2</td>
<td>2</td>
<td>0</td>
<td>0</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td>19</td>
</tr>
<tr>
<td>TEX200704110</td>
<td>shiej002</td>
<td>ARL02</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>3</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>8</td>
<td>4</td>
<td>5</td>
<td>21</td>
</tr>
<tr>
<td>TBA200704060</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>0</td>
<td>2</td>
<td>1</td>
<td>0</td>
<td>3</td>
<td>3</td>
<td>3</td>
<td>20</td>
</tr>
</table>
</div>
<p>Next, I created a table for league constants with the following structure:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`league_constants`</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="st0">`rs_league_id`</span> char<span class="br0">&#40;</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`year`</span> smallint<span class="br0">&#40;</span>6<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`league_constant_name`</span> varchar<span class="br0">&#40;</span>32<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`league_constant_value`</span> float<span class="br0">&#40;</span>8<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;0.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`rs_league_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="sy0">,</span><span class="st0">`league_constant_name`</span><span class="br0">&#40;</span>8<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`year`</span> <span class="br0">&#40;</span><span class="st0">`year`</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE<span class="sy0">=</span>MyISAM</div>
</div>
<p>The constants I am concerned with for these calculations are: ERA, RA, and FIP_ERA.  ERA and RA are the league average ERA and RA, and FIP_ERA is the constant used to translate the league average ERA to the league average FIP.  I ran the following script to populate the table with said constants:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span></p>
<p><span class="re0">$sql</span> <span class="sy0">=</span> <br />
<span class="st0">&quot;SELECT &nbsp;`year`, `rs_league_id`, <br />
&nbsp; SUM(9*`ER`) / (SUM(`IP_outs`) / 3) &nbsp;as sp_era, <br />
&nbsp; SUM(9*`R`) / (SUM(`IP_outs`) / 3) &nbsp;as sp_ra,<br />
&nbsp; SUM(9*`ER` + 2*`SO` &#8211; 3*(`BB`-`IBB`+`HBP`) &#8211; 13*`HR`) / (SUM(`IP_outs`) / 3) AS sp_fip_era<br />
FROM `pitcher_game_start` <br />
FORCE INDEX (`year_league`)<br />
GROUP BY `year`, `rs_league_id`&quot;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$inserts</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$res</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$res</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$league</span> <span class="sy0">=</span> <span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;rs_league_id&#8217;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$year</span> <span class="sy0">=</span> <span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;year&#8217;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <a href="http://www.php.net/unset"><span class="kw3">unset</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;rs_league_id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <a href="http://www.php.net/unset"><span class="kw3">unset</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;year&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$row</span> <span class="kw1">as</span> <span class="re0">$key</span> <span class="sy0">=&gt;</span> <span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$inserts</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;(&#8216;<span class="es4">$league</span>&#8216;, &#8216;<span class="es4">$year</span>&#8216;, &#8216;<span class="es4">$key</span>&#8216;, &#8216;<span class="es4">$value</span>&#8216;)&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="re0">$sql</span> <span class="sy0">=</span> <br />
<span class="st0">&quot;INSERT IGNORE INTO `league_constants` (`rs_league_id`,`year`,`league_constant_name`, `league_constant_value`) <br />
VALUES &quot;</span> <span class="sy0">.</span> <a href="http://www.php.net/implode"><span class="kw3">implode</span></a><span class="br0">&#40;</span><span class="st_h">&#8216;,&#8217;</span><span class="sy0">,</span> <span class="re0">$inserts</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;<br />
ON DUPLICATE KEY UPDATE `league_constant_value` = VALUES(`league_constant_value`)&quot;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>And here are the values in the table:</p>
<div class="codesnip-container" >
<table>
<tr>
<td>rs_league_id</td>
<td>year</td>
<td>league_constant_name</td>
<td>league_constant_value</td>
</tr>
<tr>
<td>AL</td>
<td>2007</td>
<td>sp_era</td>
<td>4.686</td>
</tr>
<tr>
<td>AL</td>
<td>2007</td>
<td>sp_ra</td>
<td>5.064</td>
</tr>
<tr>
<td>AL</td>
<td>2007</td>
<td>sp_fip_era</td>
<td>3.408</td>
</tr>
<tr>
<td>NL</td>
<td>2007</td>
<td>sp_era</td>
<td>4.567</td>
</tr>
<tr>
<td>NL</td>
<td>2007</td>
<td>sp_ra</td>
<td>4.909</td>
</tr>
<tr>
<td>NL</td>
<td>2007</td>
<td>sp_fip_era</td>
<td>3.280</td>
</tr>
</table>
</div>
<p><strong>All league constants are derived from innings pitched solely by starting pitchers</strong>.  When calculating WAR for RP, probably in a later post, I&#8217;ll use another set of constants that averages values from innings pitched by relievers.</p>
<p>Now, we have everything we need to start calculating FIP and WAR for each game.  I used <a href="http://www.fangraphs.com/blogs/index.php/pitcher-win-values-explained-part-seven">Dave Cameron&#8217;s 7-part description</a> of WAR on fangraphs as a guide.  I created the following table to store game details for starting pitcher&#8217;s along with calculated FIPs and WARs:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`pitcher_game_start_fip`</span> <span class="br0">&#40;</span><br />
&nbsp; <span class="st0">`rs_game_id`</span> char<span class="br0">&#40;</span>12<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_player_id`</span> char<span class="br0">&#40;</span>8<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_park_id`</span> char<span class="br0">&#40;</span>5<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_league_id`</span> char<span class="br0">&#40;</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`rs_team_id`</span> char<span class="br0">&#40;</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`year`</span> smallint<span class="br0">&#40;</span>6<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`IP_outs`</span> tinyint<span class="br0">&#40;</span>4<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`PF`</span> float<span class="br0">&#40;</span>5<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;1.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`fip_era_const`</span> float<span class="br0">&#40;</span>5<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;0.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`avg_era`</span> float<span class="br0">&#40;</span>5<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;0.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`avg_ra`</span> float<span class="br0">&#40;</span>5<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;0.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`ERA`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`base_fip`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`FIP`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`fip_ra`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`fip_ra_prk`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`R_per_W`</span> float<span class="br0">&#40;</span>5<span class="sy0">,</span>3<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#8217;0.000&#8242;</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`RAR`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="st0">`WAR`</span> float<span class="br0">&#40;</span>4<span class="sy0">,</span>2<span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`rs_player_id`</span><span class="sy0">,</span><span class="st0">`rs_game_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`year_league`</span> <span class="br0">&#40;</span><span class="st0">`year`</span><span class="sy0">,</span><span class="st0">`rs_league_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`park_year`</span> <span class="br0">&#40;</span><span class="st0">`rs_park_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`game_id`</span> <span class="br0">&#40;</span><span class="st0">`rs_game_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`pylt`</span> <span class="br0">&#40;</span><span class="st0">`rs_player_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="sy0">,</span><span class="st0">`rs_league_id`</span><span class="sy0">,</span><span class="st0">`rs_team_id`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`tly`</span> <span class="br0">&#40;</span><span class="st0">`rs_team_id`</span><span class="sy0">,</span><span class="st0">`rs_park_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; <span class="kw1">KEY</span> <span class="st0">`ty`</span> <span class="br0">&#40;</span><span class="st0">`rs_team_id`</span><span class="sy0">,</span><span class="st0">`year`</span><span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE<span class="sy0">=</span>MyISAM</div>
</div>
<p>The first step is to insert the general game info, as well as PF, ERA, and base_fip columns into the table.  </p>
<ul>
<li>PF (park factor) comes from another table called, park_effects. </li>
<li>If not already obvious, ERA = (ER*9) / (IP_outs/3)</li>
<li>base_fip = (-2*SO + 3*(BB-IBB+HBP) + 13*HR) / (IP_outs/3)</li>
</ul>
<p>I used the following code snippet to populate those values:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; <span class="co1">//basic info, ERA, base_fip, PF</span><br />
&nbsp; <span class="re0">$sql</span> <span class="sy0">=</span> <br />
&nbsp; <span class="st0">&quot;INSERT IGNORE INTO `pitcher_game_start_fip` (`rs_game_id`, `rs_player_id`, `rs_park_id`, `rs_league_id`, `rs_team_id`, `year`, `IP_outs`, `PF`, `ERA`, `base_fip`)<br />
&nbsp; SELECT<br />
&nbsp; &nbsp; s.`rs_game_id`, s.`rs_player_id`, s.`rs_park_id`, s.`rs_league_id`, s.`rs_team_id`, s.`year`, s.`IP_outs`,<br />
&nbsp; &nbsp; p.`PF`, <br />
&nbsp; &nbsp; (s.`ER`*9) / (s.`IP_outs`/3) as ERA, <br />
&nbsp; &nbsp; (-2*s.`SO` + 3*(s.`BB`-s.`IBB`+s.`HBP`) + 13*s.`HR`) / (s.`IP_outs`/3) as base_fip<br />
&nbsp; &nbsp; FROM `pitcher_game_start` s <br />
&nbsp; &nbsp; LEFT JOIN `games` g ON s.`rs_game_id` = g.`rs_game_id`<br />
&nbsp; &nbsp; LEFT JOIN `park_effects` p ON s.`rs_park_id` = p.`rs_park_id` AND s.`year` = p.`year` AND g.`rs_home_team_id` = p.`rs_team_id`<br />
&nbsp; &nbsp; WHERE s.`year` = <span class="es4">$i</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">.</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Next, I populated the table with the appropriate values for league average ERA, league average RA, and the league constant used to translate ERA to FIP.  I used values from the `league_constants` table, calculated earlier, with the following piece of code:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; <span class="co1">//get league constants</span><br />
&nbsp; <span class="re0">$league_consts</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$sql</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT * FROM `league_constants` WHERE `year` = <span class="es4">$i</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$res</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_fetch_assoc"><span class="kw3">mysql_fetch_assoc</span></a><span class="br0">&#40;</span><span class="re0">$res</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$league_consts</span><span class="br0">&#91;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;rs_league_id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;league_constant_name&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">&#8216;league_constant_value&#8217;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; <span class="co1">//fip_era_const, avg_era, avg_ra</span><br />
&nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$league_consts</span> <span class="kw1">as</span> <span class="re0">$league_id</span> <span class="sy0">=&gt;</span> <span class="re0">$consts</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$sql</span> <span class="sy0">=</span> <br />
&nbsp; &nbsp; <span class="st0">&quot;UPDATE `pitcher_game_start_fip` <br />
&nbsp; &nbsp; &nbsp; SET<br />
&nbsp; &nbsp; &nbsp; &nbsp; `fip_era_const` = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$consts</span><span class="br0">&#91;</span><span class="st_h">&#8216;sp_fip_era&#8217;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#8217;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; `avg_era` = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$consts</span><span class="br0">&#91;</span><span class="st_h">&#8216;sp_era&#8217;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#8217;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; `avg_ra` = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$consts</span><span class="br0">&#91;</span><span class="st_h">&#8216;sp_ra&#8217;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#8217;<br />
&nbsp; &nbsp; &nbsp; WHERE <br />
&nbsp; &nbsp; &nbsp; &nbsp; `year` = &#8216;.<span class="es4">$i</span>.&#8217; AND<br />
&nbsp; &nbsp; &nbsp; &nbsp; `rs_league_id` = &#8216;&quot;</span><span class="sy0">.</span><span class="re0">$league_id</span><span class="sy0">.</span><span class="st0">&quot;&#8217;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>And now, calculate FIP and WAR for the starting pitcher of each game.  Here are the necessary formulas:</p>
<ol>
<li>Calculate FIP by adding the league FIP constant to the pitcher&#8217;s base FIP:<br />
FIP  = base_fip + fip_era_const</li>
<li>Turn FIP into a value reflecting runs rather than earned runs.  To do so, multiply FIP by the league RA/ERA ratio:<br />
fip_ra = FIP * (avg_ra/avg_era)</li>
<li>Adjust fip_ra to the park setting:<br />
fip_ra_prk = fip_ra / PF</li>
<li>Calculate how many runs are required to win in the current setting.  This is formula comes from Tango&#8217;s +2*1.5 formula: ((League RA + Pitcher’s RA)/2)+2)*1.5<br />
R_per_W = (((((54-IP_outs)*avg_ra) + (IP_outs*fip_ra_prk)) / 54) + 2) * 1.5</li>
<li>And finally, calculate WAR.  An average starter has a winning% of .500.  A replacement level starter has a winning percentage of .380% (.12 less than .500).  So, if we calculate the pitcher&#8217;s wins above replacement, multiplied by IP/9 inning game, we get WAR for the game in question:<br />
WAR = ((.12 + ((avg_ra &#8211; fip_ra_prk) / R_per_W)) * (IP_outs/3)) / 9</li>
</ol>
<p>Here&#8217;s the last part of the script, making the above calculations.</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="nu0">2007</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span><br />
&nbsp; <span class="sy0">.</span> &nbsp; &nbsp; <br />
&nbsp; <span class="co1">//calculate FIP, fip_ra, fip_ra_prk, R_per_W, WAR, RAR</span><br />
&nbsp; <span class="re0">$sql</span> <span class="sy0">=</span> <br />
&nbsp; <span class="st0">&quot;UPDATE `pitcher_game_start_fip` <br />
&nbsp; &nbsp; SET<br />
&nbsp; &nbsp; &nbsp; `FIP` = @fip:= (`base_fip` + `fip_era_const`),<br />
&nbsp; &nbsp; &nbsp; `fip_ra` = @fip_ra:= ((@fip * avg_ra) / avg_era),<br />
&nbsp; &nbsp; &nbsp; `fip_ra_prk` = @frp:= (@fip_ra / `PF`),<br />
&nbsp; &nbsp; &nbsp; `R_per_W` = @rpw:= ((( &nbsp;( ((54-`IP_outs`)*`avg_ra`) + (`IP_outs`*@frp) ) / 54) + 2) * 1.5),<br />
&nbsp; &nbsp; &nbsp; `WAR` = @war:= (((.12 + ((`avg_ra` &#8211; @frp) / @rpw)) * (`IP_outs`/3)) / 9), <br />
&nbsp; &nbsp; &nbsp; `RAR` = @war * @rpw<br />
&nbsp; &nbsp; WHERE `year` = &quot;</span><span class="sy0">.</span><span class="re0">$i</span><span class="sy0">;</span><br />
&nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="sy0">,</span> <span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>And here are the results for starts by James Shields:</p>
<div class="codesnip-container" >
<table>
<tr>
<td>rs_game_id</td>
<td>rs_player_id</td>
<td>rs_park_id</td>
<td>rs_league_id</td>
<td>rs_team_id</td>
<td>year</td>
<td>IP_outs</td>
<td>PF</td>
<td>fip_era_const</td>
<td>avg_era</td>
<td>avg_ra</td>
<td>fip_ra_const</td>
<td>ERA</td>
<td>base_fip</td>
<td>FIP</td>
<td>fip_ra</td>
<td>fip_ra_prk</td>
<td>R_per_W</td>
<td>RAR</td>
<td>WAR</td>
</tr>
<tr>
<td>SEA200709140</td>
<td>shiej002</td>
<td>SEA03</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>24</td>
<td>0.948</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.12</td>
<td>-0.50</td>
<td>2.91</td>
<td>3.14</td>
<td>3.31</td>
<td>9.430</td>
<td>2.56</td>
<td>0.27</td>
</tr>
<tr>
<td>TBA200709090</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.57</td>
<td>0.43</td>
<td>3.84</td>
<td>4.15</td>
<td>4.73</td>
<td>10.404</td>
<td>1.23</td>
<td>0.12</td>
</tr>
<tr>
<td>TBA200709030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.29</td>
<td>-1.29</td>
<td>2.12</td>
<td>2.29</td>
<td>2.61</td>
<td>9.166</td>
<td>2.76</td>
<td>0.30</td>
</tr>
<tr>
<td>BAL200708290</td>
<td>shiej002</td>
<td>BAL12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>24</td>
<td>1.109</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>4.50</td>
<td>0.88</td>
<td>4.29</td>
<td>4.63</td>
<td>4.18</td>
<td>10.006</td>
<td>1.85</td>
<td>0.19</td>
</tr>
<tr>
<td>TBA200708240</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>25</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.16</td>
<td>0.00</td>
<td>3.41</td>
<td>3.68</td>
<td>4.20</td>
<td>9.999</td>
<td>1.91</td>
<td>0.19</td>
</tr>
<tr>
<td>TBA200708190</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>18</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>3.00</td>
<td>-1.50</td>
<td>1.91</td>
<td>2.06</td>
<td>2.35</td>
<td>9.241</td>
<td>2.55</td>
<td>0.28</td>
</tr>
<tr>
<td>BOS200708130</td>
<td>shiej002</td>
<td>BOS07</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>18</td>
<td>1.177</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.50</td>
<td>-1.67</td>
<td>1.74</td>
<td>1.88</td>
<td>1.60</td>
<td>8.862</td>
<td>3.02</td>
<td>0.34</td>
</tr>
<tr>
<td>DET200708080</td>
<td>shiej002</td>
<td>DET05</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>1.051</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.29</td>
<td>-0.71</td>
<td>2.70</td>
<td>2.92</td>
<td>2.77</td>
<td>9.260</td>
<td>2.65</td>
<td>0.29</td>
</tr>
<tr>
<td>TBA200708030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>20</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>4.05</td>
<td>1.95</td>
<td>5.36</td>
<td>5.79</td>
<td>6.61</td>
<td>11.455</td>
<td>-0.13</td>
<td>-0.01</td>
</tr>
<tr>
<td>TBA200707280</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>15</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>5.40</td>
<td>-1.60</td>
<td>1.81</td>
<td>1.95</td>
<td>2.23</td>
<td>9.415</td>
<td>2.20</td>
<td>0.23</td>
</tr>
<tr>
<td>NYA200707220</td>
<td>shiej002</td>
<td>NYC16</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>10</td>
<td>1.070</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>27.00</td>
<td>6.90</td>
<td>10.31</td>
<td>11.14</td>
<td>10.41</td>
<td>12.081</td>
<td>-1.44</td>
<td>-0.12</td>
</tr>
<tr>
<td>TBA200707170</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.57</td>
<td>-0.14</td>
<td>3.27</td>
<td>3.53</td>
<td>4.03</td>
<td>9.994</td>
<td>1.74</td>
<td>0.17</td>
</tr>
<tr>
<td>TBA200707120</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>18</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>7.50</td>
<td>6.33</td>
<td>9.74</td>
<td>10.52</td>
<td>12.01</td>
<td>14.071</td>
<td>-3.51</td>
<td>-0.25</td>
</tr>
<tr>
<td>KCA200707060</td>
<td>shiej002</td>
<td>KAN06</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>23</td>
<td>1.033</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>4.70</td>
<td>-1.17</td>
<td>2.24</td>
<td>2.42</td>
<td>2.34</td>
<td>8.856</td>
<td>3.22</td>
<td>0.36</td>
</tr>
<tr>
<td>CLE200707010</td>
<td>shiej002</td>
<td>CLE08</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>19</td>
<td>1.132</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.84</td>
<td>-0.63</td>
<td>2.78</td>
<td>3.00</td>
<td>2.65</td>
<td>9.323</td>
<td>2.48</td>
<td>0.27</td>
</tr>
<tr>
<td>TBA200706260</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>6.43</td>
<td>0.57</td>
<td>3.98</td>
<td>4.30</td>
<td>4.91</td>
<td>10.505</td>
<td>1.10</td>
<td>0.10</td>
</tr>
<tr>
<td>ARI200706200</td>
<td>shiej002</td>
<td>PHO01</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>15</td>
<td>1.111</td>
<td>3.280</td>
<td>4.567</td>
<td>4.909</td>
<td>3.622</td>
<td>10.80</td>
<td>3.60</td>
<td>6.88</td>
<td>7.40</td>
<td>6.66</td>
<td>11.092</td>
<td>-0.23</td>
<td>-0.02</td>
</tr>
<tr>
<td>COL200706150</td>
<td>shiej002</td>
<td>DEN02</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>18</td>
<td>1.160</td>
<td>3.280</td>
<td>4.567</td>
<td>4.909</td>
<td>3.622</td>
<td>7.50</td>
<td>4.17</td>
<td>7.45</td>
<td>8.01</td>
<td>6.90</td>
<td>11.361</td>
<td>-0.42</td>
<td>-0.04</td>
</tr>
<tr>
<td>FLO200706090</td>
<td>shiej002</td>
<td>MIA01</td>
<td>NL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>1.068</td>
<td>3.280</td>
<td>4.567</td>
<td>4.909</td>
<td>3.622</td>
<td>2.57</td>
<td>0.14</td>
<td>3.42</td>
<td>3.68</td>
<td>3.44</td>
<td>9.508</td>
<td>2.03</td>
<td>0.21</td>
</tr>
<tr>
<td>TBA200706040</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>22</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.45</td>
<td>2.59</td>
<td>6.00</td>
<td>6.48</td>
<td>7.40</td>
<td>12.023</td>
<td>-0.73</td>
<td>-0.06</td>
</tr>
<tr>
<td>TBA200705300</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>27</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>3.00</td>
<td>-0.78</td>
<td>2.63</td>
<td>2.84</td>
<td>3.24</td>
<td>9.229</td>
<td>2.93</td>
<td>0.32</td>
</tr>
<tr>
<td>CHA200705250</td>
<td>shiej002</td>
<td>CHI12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>1.084</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>5.14</td>
<td>3.43</td>
<td>6.84</td>
<td>7.39</td>
<td>6.82</td>
<td>11.619</td>
<td>-0.28</td>
<td>-0.02</td>
</tr>
<tr>
<td>TBA200705200</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.29</td>
<td>-1.00</td>
<td>2.41</td>
<td>2.60</td>
<td>2.97</td>
<td>9.375</td>
<td>2.50</td>
<td>0.27</td>
</tr>
<tr>
<td>TBA200705150</td>
<td>shiej002</td>
<td>LBV01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>24</td>
<td>1.257</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>3.38</td>
<td>0.38</td>
<td>3.79</td>
<td>4.09</td>
<td>3.26</td>
<td>9.391</td>
<td>2.61</td>
<td>0.28</td>
</tr>
<tr>
<td>BAL200705090</td>
<td>shiej002</td>
<td>BAL12</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>27</td>
<td>1.109</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>0.00</td>
<td>-0.56</td>
<td>2.85</td>
<td>3.08</td>
<td>2.78</td>
<td>8.879</td>
<td>3.35</td>
<td>0.38</td>
</tr>
<tr>
<td>TBA200705030</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>22</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>3.68</td>
<td>-0.95</td>
<td>2.46</td>
<td>2.66</td>
<td>3.03</td>
<td>9.354</td>
<td>2.57</td>
<td>0.27</td>
</tr>
<tr>
<td>OAK200704270</td>
<td>shiej002</td>
<td>OAK01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>24</td>
<td>0.833</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>1.12</td>
<td>-0.25</td>
<td>3.16</td>
<td>3.41</td>
<td>4.10</td>
<td>9.951</td>
<td>1.92</td>
<td>0.19</td>
</tr>
<tr>
<td>TBA200704220</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>24</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>2.25</td>
<td>-1.00</td>
<td>2.41</td>
<td>2.60</td>
<td>2.97</td>
<td>9.200</td>
<td>2.84</td>
<td>0.31</td>
</tr>
<tr>
<td>TBA200704160</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>19</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>7.11</td>
<td>3.47</td>
<td>6.88</td>
<td>7.43</td>
<td>8.48</td>
<td>12.402</td>
<td>-1.36</td>
<td>-0.11</td>
</tr>
<tr>
<td>TEX200704110</td>
<td>shiej002</td>
<td>ARL02</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>21</td>
<td>0.979</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>5.14</td>
<td>3.71</td>
<td>7.12</td>
<td>7.69</td>
<td>7.86</td>
<td>12.225</td>
<td>-1.03</td>
<td>-0.08</td>
</tr>
<tr>
<td>TBA200704060</td>
<td>shiej002</td>
<td>STP01</td>
<td>AL</td>
<td>TBA</td>
<td>2007</td>
<td>20</td>
<td>0.876</td>
<td>3.408</td>
<td>4.686</td>
<td>5.064</td>
<td>3.786</td>
<td>4.05</td>
<td>0.45</td>
<td>3.86</td>
<td>4.17</td>
<td>4.76</td>
<td>10.427</td>
<td>1.15</td>
<td>0.11</td>
</tr>
</table>
</div>
<p>To get Shields&#8217; WAR for the 2007 season, we can take a weighted average of his starts, using the following query:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;">mysql<span class="sy0">&gt;</span> <span class="kw1">SELECT</span> SUM<span class="br0">&#40;</span>WAR<span class="br0">&#41;</span> <span class="kw1">FROM</span> pitcher_game_start_fip <span class="kw1">WHERE</span> rs_player_id <span class="sy0">=</span> <span class="st0">&#8216;shiej002&#8242;</span> <span class="kw1">AND</span> year <span class="sy0">=</span> <span class="nu0">2007</span>;<br />
<span class="sy0">+</span><span class="co1">&#8212;&#8212;&#8212;-+</span><br />
<span class="sy0">|</span> SUM<span class="br0">&#40;</span>WAR<span class="br0">&#41;</span> <span class="sy0">|</span><br />
<span class="sy0">+</span><span class="co1">&#8212;&#8212;&#8212;-+</span><br />
<span class="sy0">|</span> &nbsp; &nbsp; 4<span class="sy0">.</span>74 <span class="sy0">|</span> <br />
<span class="sy0">+</span><span class="co1">&#8212;&#8212;&#8212;-+</span><br />
1 row <span class="kw1">IN</span> <span class="kw1">SET</span> <span class="br0">&#40;</span><span class="nu0">0.00</span> sec<span class="br0">&#41;</span></div>
</div>
<p>Alternatively, you could calculate the pitcher&#8217;s weighted park factor, weighted league ERA, and weighted league RA and use these values with the pitcher&#8217;s IP, HR, SO, BB, etc for the season.</p>
<p>Well, there you have it.  The next thing to do is to store season FIP&#8217;s, WAR&#8217;s and other values for more practical comparisons of players.  Then, I&#8217;ll have to calculate the WAR of relief pitchers, something <a href="http://www.beyondtheboxscore.com/2009/4/29/856308/bullpen-chaining-and-reliever-war">a bit more complicated</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.temporaldisruption.com/2009/08/31/calculating-fip-and-war-from-retrosheet-data-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
