<p><div><div><div><div data-width="100" data-show-faces="false" data-send="true" data-layout="button_count" data-height="21" data-href="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/"></div></div><div><a data-url="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/" data-counturl="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/" data-count="horizontal" data-text="Understanding beta binomial regression (using baseball statistics)" class="twitter-share-button" data-via="rbloggers" href="https://twitter.com/share"></a></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://varianceexplained.org/r/beta_binomial_baseball/"> Variance Explained</a></strong>, and kindly contributed to <a rel="nofollow" href="http://www.r-bloggers.com/">R-bloggers)</a> </div>
<p><strong>Previously in this series:</strong></p>
<ul>
<li><a target="_blank" href="http://varianceexplained.org/statistics/beta_distribution_and_baseball/">Understanding the beta distribution</a></li>
<li><a target="_blank" href="http://varianceexplained.org/r/empirical_bayes_baseball/">Understanding empirical Bayes estimation</a></li>
<li><a target="_blank" href="http://varianceexplained.org/r/credible_intervals_baseball/">Understanding credible intervals</a></li>
<li><a target="_blank" href="http://varianceexplained.org/r/bayesian_fdr_baseball/">Understanding the Bayesian approach to false discovery rates</a></li>
<li><a target="_blank" href="http://varianceexplained.org/r/bayesian_ab_baseball/">Understanding Bayesian A/B testing</a></li>
</ul>
<p>In this series we’ve been using the empirical Bayes method to estimate batting averages of baseball players. Empirical Bayes is useful here because when we don’t have a lot of information about a batter, they’re “shrunken” towards the average across all players, as a natural consequence of the beta prior.</p>
<p>But there’s a complication with this approach. <strong>When players are better, they are given more chances to bat</strong>! (Hat tip to Hadley Wickham to pointing this complication out to me). That means there’s a relationship between the number of at-bats (AB) and the true batting average. For reasons I explain below, this makes our estimates systematically inaccurate.</p>
<p>In this post, we change our model where all batters have the same prior to one where each batter has his own prior, using a method called <strong>beta-binomial regression</strong>. We show how this new model lets us adjust for the confounding factor while still relying on the empirical Bayes philosophy. We also note that this gives us a general framework for allowing a prior to depend on known information, which will become important in future posts.</p>
<h3>Setup</h3>
<p>As usual, I’ll start with some code you can use to catch up if you want to follow along in R. If you want to understand what it does in more depth, check out the previous posts in this series. (As always, all the code in this post can be found <a target="_blank" href="https://github.com/dgrtwo/dgrtwo.github.com/blob/master/_R/2016-05-31-beta_binomial_baseball.Rmd">here</a>).</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>dplyr</span><span>)</span>
<span>library</span><span>(</span><span>tidyr</span><span>)</span>
<span>library</span><span>(</span><span>Lahman</span><span>)</span>
<span>library</span><span>(</span><span>ggplot2</span><span>)</span>
<span>theme_set</span><span>(</span><span>theme_bw</span><span>())</span>

<span># Grab career batting average of non-pitchers
# (allow players that have pitched &lt;= 3 games, like Ty Cobb)
</span><span>pitchers</span> <span>&lt;-</span> <span>Pitching</span> <span>%>%</span>
  <span>group_by</span><span>(</span><span>playerID</span><span>)</span> <span>%>%</span>
  <span>summarize</span><span>(</span><span>gamesPitched</span> <span>=</span> <span>sum</span><span>(</span><span>G</span><span>))</span> <span>%>%</span>
  <span>filter</span><span>(</span><span>gamesPitched</span> <span>></span> <span>3</span><span>)</span>

<span>career</span> <span>&lt;-</span> <span>Batting</span> <span>%>%</span>
  <span>filter</span><span>(</span><span>AB</span> <span>></span> <span>0</span><span>)</span> <span>%>%</span>
  <span>anti_join</span><span>(</span><span>pitchers</span><span>,</span> <span>by</span> <span>=</span> <span>&quot;playerID&quot;</span><span>)</span> <span>%>%</span>
  <span>group_by</span><span>(</span><span>playerID</span><span>)</span> <span>%>%</span>
  <span>summarize</span><span>(</span><span>H</span> <span>=</span> <span>sum</span><span>(</span><span>H</span><span>),</span> <span>AB</span> <span>=</span> <span>sum</span><span>(</span><span>AB</span><span>))</span> <span>%>%</span>
  <span>mutate</span><span>(</span><span>average</span> <span>=</span> <span>H</span> <span>/</span> <span>AB</span><span>)</span>

<span># Add player names
</span><span>career</span> <span>&lt;-</span> <span>Master</span> <span>%>%</span>
  <span>tbl_df</span><span>()</span> <span>%>%</span>
  <span>dplyr</span><span>::</span><span>select</span><span>(</span><span>playerID</span><span>,</span> <span>nameFirst</span><span>,</span> <span>nameLast</span><span>)</span> <span>%>%</span>
  <span>unite</span><span>(</span><span>name</span><span>,</span> <span>nameFirst</span><span>,</span> <span>nameLast</span><span>,</span> <span>sep</span> <span>=</span> <span>&quot; &quot;</span><span>)</span> <span>%>%</span>
  <span>inner_join</span><span>(</span><span>career</span><span>,</span> <span>by</span> <span>=</span> <span>&quot;playerID&quot;</span><span>)</span>

<span># Estimate hyperparameters alpha0 and beta0 for empirical Bayes
</span><span>career_filtered</span> <span>&lt;-</span> <span>career</span> <span>%>%</span> <span>filter</span><span>(</span><span>AB</span> <span>>=</span> <span>500</span><span>)</span>
<span>m</span> <span>&lt;-</span> <span>MASS</span><span>::</span><span>fitdistr</span><span>(</span><span>career_filtered</span><span>$</span><span>average</span><span>,</span> <span>dbeta</span><span>,</span>
                    <span>start</span> <span>=</span> <span>list</span><span>(</span><span>shape1</span> <span>=</span> <span>1</span><span>,</span> <span>shape2</span> <span>=</span> <span>10</span><span>))</span>

<span>alpha0</span> <span>&lt;-</span> <span>m</span><span>$</span><span>estimate</span><span>[</span><span>1</span><span>]</span>
<span>beta0</span> <span>&lt;-</span> <span>m</span><span>$</span><span>estimate</span><span>[</span><span>2</span><span>]</span>
<span>prior_mu</span> <span>&lt;-</span> <span>alpha0</span> <span>/</span> <span>(</span><span>alpha0</span> <span>+</span> <span>beta0</span><span>)</span>

<span># For each player, update the beta prior based on the evidence
# to get posterior parameters alpha1 and beta1
</span><span>career_eb</span> <span>&lt;-</span> <span>career</span> <span>%>%</span>
  <span>mutate</span><span>(</span><span>eb_estimate</span> <span>=</span> <span>(</span><span>H</span> <span>+</span> <span>alpha0</span><span>)</span> <span>/</span> <span>(</span><span>AB</span> <span>+</span> <span>alpha0</span> <span>+</span> <span>beta0</span><span>))</span> <span>%>%</span>
  <span>mutate</span><span>(</span><span>alpha1</span> <span>=</span> <span>H</span> <span>+</span> <span>alpha0</span><span>,</span>
         <span>beta1</span> <span>=</span> <span>AB</span> <span>-</span> <span>H</span> <span>+</span> <span>beta0</span><span>)</span> <span>%>%</span>
  <span>arrange</span><span>(</span><span>desc</span><span>(</span><span>eb_estimate</span><span>))</span></code></pre>
</figure>
<p>Recall that the <code>eb_estimate</code> column gives us estimates about each player’s batting average, estimated from a combination of each player’s record with the beta prior parameters estimated from everyone (, ). For example, a player with only a single at-bat and a single hit () will have an empirical Bayes estimate of</p>
<p></p>
<p>Now, here’s the complication. Let’s compare at-bats (on a log scale) to the raw batting average:</p>
<figure>
<pre><code data-lang="r"><span>career</span> <span>%>%</span>
  <span>filter</span><span>(</span><span>AB</span> <span>>=</span> <span>20</span><span>)</span> <span>%>%</span>
  <span>ggplot</span><span>(</span><span>aes</span><span>(</span><span>AB</span><span>,</span> <span>average</span><span>))</span> <span>+</span>
  <span>geom_point</span><span>()</span> <span>+</span>
  <span>geom_smooth</span><span>(</span><span>method</span> <span>=</span> <span>&quot;lm&quot;</span><span>,</span> <span>se</span> <span>=</span> <span>FALSE</span><span>)</span> <span>+</span>
  <span>scale_x_log10</span><span>()</span></code></pre>
</figure>
<p><img alt="center" src="http://i1.wp.com/varianceexplained.org/figs/2016-05-31-beta_binomial_baseball/unnamed-chunk-3-1.png?w=456" data-recalc-dims="1"></p>
<p>We notice that batters with low ABs have more variance in our estimates- that’s a familiar pattern because we have less information about them. But notice a second trend: as the number of at-bats increases, the batting average <em>also</em> increases. Unlike the variance, this is <em>not</em> an artifact of our measurement: it’s a result of the choices of baseball managers! Better batters get played more: they’re more likely to be in the starting lineup and to spend more years playing professionally.</p>
<p>Now, there are many other factors that are correlated with a player’s batting average (year, position, team, etc). But this one is particularly important, because it confounds our ability to perform empirical Bayes estimation:</p>
<p><img alt="center" src="http://i2.wp.com/varianceexplained.org/figs/2016-05-31-beta_binomial_baseball/unnamed-chunk-4-1.png?w=456" data-recalc-dims="1"></p>
<p>That horizontal red line shows the prior mean that we’re “shrinking” towards (). Notice that it is too high for the low-AB players. For example, the median batting average for players with 5-20 at-bats is 0.167, and they get shrunk <em>way</em> towards the overall average! The high-AB crowd basically stays where they are, because each has a lot of evidence.</p>
<p>So since low-AB batters are getting overestimated, and high-AB batters are staying where they are, we’re working with a biased estimate that is systematically <em>overestimating</em> batter ability. If we were working for a baseball manager (like in <a target="_blank" href="https://en.wikipedia.org/wiki/Moneyball">Moneyball</a>), that’s the kind of mistake we could get fired for!</p>
<h3>Accounting for AB in the model</h3>
<p>How can we fix our model? We’ll need to have AB somehow influence our priors, particularly affecting the mean batting average. In particular, we want the typical batting average to be linearly affected by .</p>
<p>First we should write out what our current model is, in the form of a <strong>generative process</strong>, in terms of how each of our variables is generated from particular distributions. Defining  to be the true probability of hitting for batter  (that is, the “true average” we’re trying to estimate), we’re assuming</p>
<p></p>
<p></p>
<p>(We’re letting the totals  be fixed and known per player). We made up this model in <a target="_blank" href="http://varianceexplained.org/r/empirical_bayes_baseball">one of the first posts in this series</a> and have been using it since.</p>
<p>I’ll point out that there’s another way to write the  calculation, by <strong>re-parameterizing</strong> the beta distribution. Instead of parameters  and , let’s write it in terms of  and :</p>
<p></p>
<p>Here,  represents the mean batting average, while  represents how spread out the distribution is (note that ). When  is high, the beta distribution is very wide (a less informative prior), and when  is low, it’s narrow (a more informative prior). Way back in <a target="_blank" href="http://varianceexplained.org/statistics/beta_distribution_and_baseball">my first post about the beta distribution</a>, this is basically how I chose parameters: I wanted , and then I chose a  that would give the desired distribution that mostly lay between .210 and .350, our expected range of batting averages.</p>
<p>Now that we’ve written our model in terms of  and , it becomes easier to see how a model could take AB into consideration. We simply define  so that it includes  as a linear term<sup><a target="_blank" href="http://varianceexplained.org/r/beta_binomial_baseball/#fn:linear">1</a></sup>:</p>
<p></p>
<p></p>
<p></p>
<p>Then we define the batting average  and the observed  just like before:</p>
<p></p>
<p></p>
<p>This particular model is called <strong>beta-binomial regression</strong>. We already had each player represented with a binomial whose parameter was drawn from a beta, but now we’re allowing the expected value of the beta to be influenced.</p>
<h3>Step 1: Fit the model across all players</h3>
<p>Going back to the <a target="_blank" href="http://varianceexplained.org/r/empirical_bayes_baseball">basics of empirical Bayes</a>, our first step is to fit these prior parameters: , , . When doing so, it’s ok to momentarily “forget” we’re Bayesians- we picked our  and  using maximum likelihood, so it’s OK to fit these using a maximum likelihood approach as well. You can use the <a target="_blank" href="https://cran.r-project.org/package=gamlss">gamlss</a> package for fitting beta-binomial regression using maximum likelihood.</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>gamlss</span><span>)</span>

<span>fit</span> <span>&lt;-</span> <span>gamlss</span><span>(</span><span>cbind</span><span>(</span><span>H</span><span>,</span> <span>AB</span> <span>-</span> <span>H</span><span>)</span> <span>~</span> <span>log</span><span>(</span><span>AB</span><span>),</span>
              <span>data</span> <span>=</span> <span>career_eb</span><span>,</span>
              <span>family</span> <span>=</span> <span>BB</span><span>(</span><span>mu.link</span> <span>=</span> <span>&quot;identity&quot;</span><span>))</span></code></pre>
</figure>
<p>We can pull out the coefficients with the broom package (see <code>?gamlss_tidiers</code>):</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>broom</span><span>)</span>

<span>td</span> <span>&lt;-</span> <span>tidy</span><span>(</span><span>fit</span><span>)</span>
<span>td</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   parameter        term estimate std.error statistic p.value
## 1        mu (Intercept)   0.1426  0.001577      90.4       0
## 2        mu     log(AB)   0.0153  0.000215      71.2       0
## 3     sigma (Intercept)  -6.2935  0.023052    -273.0       0</code></pre>
</figure>
<p>This gives us our three parameters: , , and (since <code>sigma</code> has a log-link) .</p>
<p>This means that our new prior beta distribution for a player <em>depends on</em> the value of AB. For example, here are our prior distributions for several values:</p>
<p><img alt="center" src="http://i1.wp.com/varianceexplained.org/figs/2016-05-31-beta_binomial_baseball/unnamed-chunk-6-1.png?w=456" data-recalc-dims="1"></p>
<p>Notice that there is still uncertainty in our prior- a player with 10,000 at-bats could have a batting average ranging from about .22 to .35. But the range of that uncertainty changes greatly depending on the number of at-bats- any player with AB = 10,000 is almost certainly better than one with AB = 10.</p>
<h3>Step 2: Estimate each player’s average using this prior</h3>
<p>Now that we’ve fit our overall model, we repeat our second step of the empirical Bayes method. Instead of using a single  and  values as the prior, we choose the prior for each player based on their AB. We then update using their  and  just like before.</p>
<p>Here, all we need to calculate are the <code>mu</code> (that is, ) and <code>sigma</code> () parameters for each person. (Here, <code>sigma</code> will be the same for everyone, but that may not be true in more complex models). This can be done using the <code>fitted</code> method on the gamlss object (see <a target="_blank" href="http://varianceexplained.org/r/beta_binomial_baseball/TODO">here</a>):</p>
<figure>
<pre><code data-lang="r"><span>mu</span> <span>&lt;-</span> <span>fitted</span><span>(</span><span>fit</span><span>,</span> <span>parameter</span> <span>=</span> <span>&quot;mu&quot;</span><span>)</span>
<span>sigma</span> <span>&lt;-</span> <span>fitted</span><span>(</span><span>fit</span><span>,</span> <span>parameter</span> <span>=</span> <span>&quot;sigma&quot;</span><span>)</span>

<span>head</span><span>(</span><span>mu</span><span>)</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##     1     2     3     4     5     6 
## 0.286 0.281 0.273 0.262 0.279 0.284</code></pre>
</figure>
<figure>
<pre><code data-lang="r"><span>head</span><span>(</span><span>sigma</span><span>)</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##       1       2       3       4       5       6 
## 0.00185 0.00185 0.00185 0.00185 0.00185 0.00185</code></pre>
</figure>
<p>Now we can calculate  and  parameters for each player, according to  and . From that, we can update based on  and  to calculate new  and  for each player.</p>
<figure>
<pre><code data-lang="r"><span>career_eb_wAB</span> <span>&lt;-</span> <span>career_eb</span> <span>%>%</span>
  <span>dplyr</span><span>::</span><span>select</span><span>(</span><span>name</span><span>,</span> <span>H</span><span>,</span> <span>AB</span><span>,</span> <span>original_eb</span> <span>=</span> <span>eb_estimate</span><span>)</span> <span>%>%</span>
  <span>mutate</span><span>(</span><span>mu</span> <span>=</span> <span>mu</span><span>,</span>
         <span>alpha0</span> <span>=</span> <span>mu</span> <span>/</span> <span>sigma</span><span>,</span>
         <span>beta0</span> <span>=</span> <span>(</span><span>1</span> <span>-</span> <span>mu</span><span>)</span> <span>/</span> <span>sigma</span><span>,</span>
         <span>alpha1</span> <span>=</span> <span>alpha0</span> <span>+</span> <span>H</span><span>,</span>
         <span>beta1</span> <span>=</span> <span>beta0</span> <span>+</span> <span>AB</span> <span>-</span> <span>H</span><span>,</span>
         <span>new_eb</span> <span>=</span> <span>alpha1</span> <span>/</span> <span>(</span><span>alpha1</span> <span>+</span> <span>beta1</span><span>))</span></code></pre>
</figure>
<p>How does this change our estimates?</p>
<p><img alt="center" src="http://i0.wp.com/varianceexplained.org/figs/2016-05-31-beta_binomial_baseball/unnamed-chunk-7-1.png?w=456" data-recalc-dims="1"></p>
<p>Notice that relative to the previous empirical Bayes estimate, this one is lower for batters with low AB and about the same for high-AB batters. This fits with our earlier description- we’ve been systematically over-estimating batting averages.</p>
<p>Here’s another way of comparing the estimation methods:</p>
<p><img alt="center" src="http://i1.wp.com/varianceexplained.org/figs/2016-05-31-beta_binomial_baseball/unnamed-chunk-8-1.png?w=456" data-recalc-dims="1"></p>
<p>Notice that we used to shrink batters towards the overall average (red line), but now we are shrinking them towards the overall <em>trend</em>– that red slope.<sup><a target="_blank" href="http://varianceexplained.org/r/beta_binomial_baseball/#fn:edgeR">2</a></sup></p>
<p>Don’t forget that this change in the posteriors won’t just affect shrunken estimates. It will affect all the ways we’ve used posterior distributions in this series: <a target="_blank" href="http://varianceexplained.org/r/credible_intervals_baseball">credible intervals</a>, <a target="_blank" href="http://varianceexplained.org/r/bayesian_fdr_baseball/">posterior error probabilities</a>, and <a target="_blank" href="http://varianceexplained.org/r/bayesian_ab_baseball">A/B comparisons</a>. Improving the model by taking AB into account will help all these results more accurately reflect reality.</p>
<h3>What’s Next: Bayesian hierarchical modeling</h3>
<p>This problem is in fact a simple and specific form of a <a target="_blank" href="https://en.wikipedia.org/wiki/Bayesian_hierarchical_modeling">Bayesian hierarchical model</a>, where the parameters of one distribution (like  and ) are generated based on other distributions and parameters. While these models are often approached using more precise Bayesian methods (such as <a target="_blank" href="https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo">Markov chain Monte Carlo</a>), we’ve seen that empirical Bayes can be a powerful and practical approach that helped us deal with our confounding factor.</p>
<p>Beta-binomial regression, and the gamlss package in particular, offers a way to fit parameters to predict “success / total” data. In this post, we’ve used a very simple model-  linearly predicted by AB. But there’s no reason we can’t include other information that we expect to influence batting average. For example, left-handed batters tend to have a slight advantage over right-handed batters- can we include that information in our model? In the next post, we’ll bring in additional information to build a more sophisticated hierarchical model. We’ll also consider some of the limitations of empirical Bayes for these situations.</p>
<h3>Footnotes</h3>
<div>
<ol>
<li>
<p>If you have some experience with regressions, you might notice a problem with this model: $mu$ can theoretically go below 0 or above 1, which is impossible for a $beta$ distribution (and will lead to illegal $alpha$ and $beta$ parameters). Thus in a real model we would use a “link function”, such as the <a target="_blank" href="https://en.wikipedia.org/wiki/Logistic_function">logistic function</a>, to keep $mu$ between 0 and 1. I used a linear model (and <code>mu.link = &quot;identity&quot;</code> in the <code>gamlss</code> call) to make the math in this introduction simpler, and because for this particular data it leads to almost exactly the same answer (try it). In our next post we’ll include the logistic link. <a target="_blank" href="http://varianceexplained.org/r/beta_binomial_baseball/#fnref:linear">↩</a></p>
</li>
<li>
<p>If you work in in my old field of gene expression, you may be interested to know that empirical Bayes shrinkage towards a trend is exactly what some differential expression packages such as <a target="_blank" href="https://bioconductor.org/packages/release/bioc/html/edgeR.html">edgeR</a> do with per-gene dispersion estimates. It’s a powerful concept that allows a balance between individual observations and overall expectations. <a target="_blank" href="http://varianceexplained.org/r/beta_binomial_baseball/#fnref:edgeR">↩</a></p>
</li>
</ol>
</div>
<p><div><div><div><div data-width="55" data-show-faces="false" data-send="true" data-layout="box_count" data-height="62" data-href="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/"></div></div><div><a data-url="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/" data-counturl="http://www.r-bloggers.com/understanding-beta-binomial-regression-using-baseball-statistics/" data-count="vertical" data-text="Understanding beta binomial regression (using baseball statistics)" class="twitter-share-button" data-via="rbloggers" href="https://twitter.com/share"></a></div><div></div></div><div></div></div>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="http://varianceexplained.org/r/beta_binomial_baseball/"> Variance Explained</a></strong>.</div>
<hr>
<a rel="nofollow" href="http://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="http://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a title="The R Project for Statistical Computing" rel="nofollow" href="http://www.r-project.org/">R</a> news and <a title="R tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=tutorial">tutorials</a> on topics such as: <a title="Data science" rel="nofollow" href="http://www.r-bloggers.com/?s=data%20science">Data science</a>, <a title="Big Data" rel="nofollow" href="http://www.r-bloggers.com/?s=Big%20Data">Big Data, <a title="R jobs" rel="nofollow" href="http://www.r-users.com/">R jobs</a>, visualization (<a title="ggplot and ggplot2 tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=ggplot2">ggplot2</a>, <a title="Boxplots using lattice and ggplot2 tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=boxplot">Boxplots</a>, <a title="Maps and gis" rel="nofollow" href="http://www.r-bloggers.com/?s=map">maps</a>, <a title="Animation in R" rel="nofollow" href="http://www.r-bloggers.com/?s=animation">animation</a>), programming (<a title="RStudio IDE for R" rel="nofollow" href="http://www.r-bloggers.com/?s=RStudio">RStudio</a>, <a title="Sweave and literate programming" rel="nofollow" href="http://www.r-bloggers.com/?s=sweave">Sweave</a>, <a title="LaTeX in R" rel="nofollow" href="http://www.r-bloggers.com/?s=LaTeX">LaTeX</a>, <a title="SQL and databases" rel="nofollow" href="http://www.r-bloggers.com/?s=SQL">SQL</a>, <a title="Eclipse IDE for R" rel="nofollow" href="http://www.r-bloggers.com/?s=eclipse">Eclipse</a>, <a title="git and github, Version Control System" rel="nofollow" href="http://www.r-bloggers.com/?s=git">git</a>, <a title="Large data in R using Hadoop" rel="nofollow" href="http://www.r-bloggers.com/?s=hadoop">hadoop</a>, <a title="Web Scraping of google, facebook, yahoo, twitter and more using R" rel="nofollow" href="http://www.r-bloggers.com/?s=Web+Scraping">Web Scraping</a>) statistics (<a title="Regressions and ANOVA analysis tutorials" rel="nofollow" href="http://www.r-bloggers.com/?s=regression">regression</a>, <a title="principal component analysis tutorial" rel="nofollow" href="http://www.r-bloggers.com/?s=PCA">PCA</a>, <a title="Time series" rel="nofollow" href="http://www.r-bloggers.com/?s=time+series">time series</a>, <a title="finance trading" rel="nofollow" href="http://www.r-bloggers.com/?s=trading">trading</a>) and more...
<img height="1" alt="" width="1" src="http://feeds.feedburner.com/~r/RBloggers/~4/DhZC4lcOvhg"></a></div>