<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/rootograms/"></div></div><div><a data-url="http://www.r-bloggers.com/rootograms/" data-counturl="http://www.r-bloggers.com/rootograms/" data-count="horizontal" data-text="Rootograms" 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://www.fromthebottomoftheheap.net/2016/06/07/rootograms/"> From the Bottom of the Heap - R</a></strong>, and kindly contributed to <a rel="nofollow" href="http://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>
Assessing the fit of a count regression model is not necessarily a straightforward enterprise; often we just look at residuals, which invariably contain patterns of some form due to the discrete nature of the observations, or we plot observed versus fitted values as a scatter plot. Recently, while perusing the latest statistics offerings on ArXiv I came across <span data-cites="Kleiber2016-pt">Kleiber and Zeileis (2016)</span> who propose the <em>rootogram</em> as an improved approach to the assessment of fit of a count regression model. <a target="_blank" href="http://arxiv.org/abs/1605.01311">The paper</a> is illustrated using R and the authors’ <strong>countreg</strong> package (currently on R-Forge only). Here, I thought I’d take a quick look at the rootogram with some simulated species abundance data.
</p>
<p>
Start by simulating some data to work with. Here I use my <strong>coenocliner</strong> package, and simulate three data sets, each of which uses the same environmental gradient, but with counts drawn from the following distributions
</p>
<ol type="1">
<li>
Poisson
</li>
<li>
Negative binomial
</li>
<li>
Zero-inflated negative binomial
</li>
</ol>
<p>
To follow along here you’ll need the latest version of <em>coenocliner</em> from CRAN (>= 0.2-2) as a bit of a bug entered into my code when changing between parameterizations of the negative binomial.
</p>
<p>
Load <em>coenocliner</em> and set up
</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>&quot;coenocliner&quot;</span><span>)</span>

<span>## parameters for simulating
</span><span>set.seed</span><span>(</span><span>1</span><span>)</span>
<span>locs</span> <span>&lt;-</span> <span>runif</span><span>(</span><span>100</span><span>,</span> <span>min</span> <span>=</span> <span>1</span><span>,</span> <span>max</span> <span>=</span> <span>10</span><span>)</span>     <span># environmental locations
</span><span>A0</span> <span>&lt;-</span> <span>90</span>                                  <span># maximal abundance
</span><span>mu</span> <span>&lt;-</span> <span>3</span>                                   <span># position on gradient of optima
</span><span>alpha</span> <span>&lt;-</span> <span>1.5</span>                              <span># parameter of beta response
</span><span>gamma</span> <span>&lt;-</span> <span>4</span>                                <span># parameter of beta response
</span><span>r</span> <span>&lt;-</span> <span>6</span>                                    <span># range on gradient species is present
</span><span>pars</span> <span>&lt;-</span> <span>list</span><span>(</span><span>m</span> <span>=</span> <span>mu</span><span>,</span> <span>r</span> <span>=</span> <span>r</span><span>,</span> <span>alpha</span> <span>=</span> <span>alpha</span><span>,</span> <span>gamma</span> <span>=</span> <span>gamma</span><span>,</span> <span>A0</span> <span>=</span> <span>A0</span><span>)</span>
<span>nb.alpha</span> <span>&lt;-</span> <span>1.5</span>                           <span># overdispersion parameter 1/theta
</span><span>zprobs</span> <span>&lt;-</span> <span>0.3</span>                             <span>#</span> <span>prob</span><span>(</span><span>y</span> <span>==</span> <span>0</span><span>)</span> <span>in</span> <span>binomial</span> <span>model</span></code></pre>
</figure>
<p>
Now we can simulate counts for the 100 locations along the gradient for each of the three count models
</p>
<figure>
<pre><code data-lang="r"><span>pois</span> <span>&lt;-</span> <span>coenocline</span><span>(</span><span>locs</span><span>,</span> <span>responseModel</span> <span>=</span> <span>&quot;beta&quot;</span><span>,</span> <span>params</span> <span>=</span> <span>pars</span><span>,</span> <span>countModel</span> <span>=</span> <span>&quot;poisson&quot;</span><span>)</span>
<span>nb</span>   <span>&lt;-</span> <span>coenocline</span><span>(</span><span>locs</span><span>,</span> <span>responseModel</span> <span>=</span> <span>&quot;beta&quot;</span><span>,</span> <span>params</span> <span>=</span> <span>pars</span><span>,</span> <span>countModel</span> <span>=</span> <span>&quot;negbin&quot;</span><span>,</span>
                   <span>countParams</span> <span>=</span> <span>list</span><span>(</span><span>alpha</span> <span>=</span> <span>nb.alpha</span><span>))</span>
<span>zinb</span> <span>&lt;-</span> <span>coenocline</span><span>(</span><span>locs</span><span>,</span> <span>responseModel</span> <span>=</span> <span>&quot;beta&quot;</span><span>,</span> <span>params</span> <span>=</span> <span>pars</span><span>,</span> <span>countModel</span> <span>=</span> <span>&quot;ZINB&quot;</span><span>,</span>
                   <span>countParams</span> <span>=</span> <span>list</span><span>(</span><span>alpha</span> <span>=</span> <span>nb.alpha</span><span>,</span> <span>zprobs</span> <span>=</span> <span>zprobs</span><span>))</span></code></pre>
</figure>
<p>
and combine them into a data frame with the gradient locations
</p>
<figure>
<pre><code data-lang="r"><span>df</span> <span>&lt;-</span> <span>setNames</span><span>(</span><span>cbind.data.frame</span><span>(</span><span>locs</span><span>,</span> <span>pois</span><span>,</span> <span>nb</span><span>,</span> <span>zinb</span><span>),</span>
               <span>c</span><span>(</span><span>&quot;x&quot;</span><span>,</span> <span>&quot;yPois&quot;</span><span>,</span> <span>&quot;yNegBin&quot;</span><span>,</span> <span>&quot;yZINB&quot;</span><span>))</span></code></pre>
</figure>
<p>
To each of these I’m going to fit a Poisson GLM to show how rootograms can facilitate model evaluation where we know what the underlying model is so we can see what might happen when the wrong model, in this case a Poisson GLM, is fitted to data
</p>
<figure>
<pre><code data-lang="r"><span>glm.pois</span> <span>&lt;-</span> <span>glm</span><span>(</span><span>yPois</span> <span>~</span> <span>poly</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>),</span> <span>data</span> <span>=</span> <span>df</span><span>,</span> <span>family</span> <span>=</span> <span>poisson</span><span>)</span>
<span>glm.nb</span>   <span>&lt;-</span> <span>glm</span><span>(</span><span>yNegBin</span> <span>~</span> <span>poly</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>),</span> <span>data</span> <span>=</span> <span>df</span><span>,</span> <span>family</span> <span>=</span> <span>poisson</span><span>)</span>
<span>glm.zinb</span> <span>&lt;-</span> <span>glm</span><span>(</span><span>yZINB</span> <span>~</span> <span>poly</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>),</span> <span>data</span> <span>=</span> <span>df</span><span>,</span> <span>family</span> <span>=</span> <span>poisson</span><span>)</span></code></pre>
</figure>
<p>
In each case, a Poisson GLM was fitted even though we knew that for <code>yNegBin</code> and <code>yZINB</code> that the data generating process was not the Poisson.<a target="_blank" href="http://www.fromthebottomoftheheap.net/2016/06/07/rootograms/#fn1"><sup>1</sup></a>
</p>
<p>
Next, generate rootograms for each of these models. I start by loading the <em>countreg</em> package as well as <strong>ggplot2</strong>, as I’ll plot the rootograms using the latter rather than base graphics.
</p>
<p>
Load the <em>countreg</em> package and <em>ggplot</em>. If you don’t have <em>countreg</em> installed, install it from R Forge using <code>install.packages(“countreg”, repos=“http://R-Forge.R-project.org”)</code>
</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>&quot;countreg&quot;</span><span>)</span>
<span>library</span><span>(</span><span>&quot;ggplot2&quot;</span><span>)</span></code></pre>
</figure>
<p>
Rootograms are calculated using the <code>rootogram()</code> function. You can provide the observed and expected (given the model) counts as arguments to <code>rootogram()</code> or, most usefully for our purposes, a fitted count model object from which the relevant values will be extracted. <code>rootogram()</code> knows about <code>glm</code>, <code>gam</code>, <code>gamlss</code>, <code>hurdle</code>, and <code>zeroinfl</code> objects at the time of writing.
</p>
<p>
Three different kinds of rootograms are discussed in the paper
</p>
<ol type="1">
<li>
Standing,
</li>
<li>
Hanging, and
</li>
<li>
Suspended.
</li>
</ol>
<p>
<span data-cites="Kleiber2016-pt">Kleiber and Zeileis (2016)</span> recommend <em>hanging</em> or <em>suspended</em> rootograms, for reasons I’ll mention shortly. Which type of rootogram is produced is controlled via argument <code>style</code>. The final option I use below is <code>plot = FALSE</code>, which suppresses plotting of the rootogram as I want to do that later using <em>ggplot</em>.
</p>
<p>
Generate the three rootograms
</p>
<figure>
<pre><code data-lang="r"><span>root.pois</span> <span>&lt;-</span> <span>rootogram</span><span>(</span><span>glm.pois</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;hanging&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>)</span>
<span>root.nb</span>   <span>&lt;-</span> <span>rootogram</span><span>(</span><span>glm.nb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;hanging&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>)</span>
<span>root.zinb</span> <span>&lt;-</span> <span>rootogram</span><span>(</span><span>glm.zinb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;hanging&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>)</span></code></pre>
</figure>
<p>
and gather them into an object for plotting — notice I’m using the <code>autoplot()</code> method to generate <em>ggplot2</em> plot objects, and adjusting the limits to make the plots comparable. The resulting figure is shown below the code
</p>
<figure>
<pre><code data-lang="r"><span>ylims</span> <span>&lt;-</span> <span>ylim</span><span>(</span><span>-2</span><span>,</span> <span>7</span><span>)</span>  <span># common scale for comparison
</span><span>plot_grid</span><span>(</span><span>autoplot</span><span>(</span><span>root.pois</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>autoplot</span><span>(</span><span>root.nb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> 
          <span>autoplot</span><span>(</span><span>root.zinb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>ncol</span> <span>=</span> <span>3</span><span>,</span> <span>labels</span> <span>=</span> <span>&quot;auto&quot;</span><span>)</span></code></pre>
</figure>
<figure>
<img alt="Hanging rootograms for a Poisson GLM fitted to simulated Poisson (a), negative binomial (b), and zero-inflated negative binomial (c) count data" src="http://i2.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-rootograms-1.png?w=456" data-recalc-dims="1">
<figcaption>
Hanging rootograms for a Poisson GLM fitted to simulated Poisson (a), negative binomial (b), and zero-inflated negative binomial (c) count data<br>
</figcaption>
</figure>
<p>
Looking first at panel <strong>a</strong> we see the main features of the rootogram:
</p>
<ul>
<li>
<em>expected</em> counts, given the model, are shown by the thick red line,
</li>
<li>
<em>observed</em> counts are shown as bars, which in a <em>hanging</em> rootogram are show hanging from the red line of expected counts,
</li>
<li>
on the <em>x</em>-axis we have the count bin, 0 count, 1 count, 2 count, etc,
</li>
<li>
on the <em>y</em>-axis we have the square root of the observed or expected count — the square root transformation allows for departures from expectations to be seen even at small frequencies
</li>
<li>
A reference line is drawn at a height of 0
</li>
</ul>
<p>
Because this is a <em>hanging</em> rootogram, we can think of the rootogram as relating to the <em>fitted</em> counts — if a bar doesn’t reach the zero line then the model <em>over predicts</em> a particular count bin, and if the bar exceeds the zero line it <em>under predicts</em>.
</p>
<p>
For the Poisson GLM fitted to counts generated from a Poisson distribution (panel a) we see general good agreement between the expected and observed counts, with a small amount of under prediction of some counts between 10–20. For the Poisson GLM fitted to the data generated from a negative binomial distribution (panel b) we see a much poorer fit — the zero count is under predicted whilst some low counts are over predicted, and a large number of count bins are under predicted between 4 and 10 counts. Focusing on the bottom of the bars we see an undulating pattern with runs either above or below the zero reference line, highlighting a general lack of fit in the model.
</p>
<p>
The fit of the Poisson GLM to data generated using a ZINB also shows considerable model lack of fit; strong under prediction of the zero bin and over prediction of the 1 count bin, with perhaps some general over prediction across most bins.
</p>
<p>
It is useful to compare rootograms showing the fits for incorrect and correct models side by side. To that end next I fit a negative binomial GLM and a ZINB using the <code>glm.nb()</code> function from package <strong>MASS</strong> and the <code>zeroinfl()</code> function from package <em>countreg</em> respectively, and create the relevant rootograms
</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>&quot;MASS&quot;</span><span>)</span>
<span>glm2.nb</span>   <span>&lt;-</span> <span>glm.nb</span><span>(</span><span>yNegBin</span> <span>~</span> <span>poly</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>),</span> <span>data</span> <span>=</span> <span>df</span><span>)</span>
<span>glm2.zinb</span> <span>&lt;-</span> <span>zeroinfl</span><span>(</span><span>yZINB</span> <span>~</span> <span>poly</span><span>(</span><span>x</span><span>,</span> <span>2</span><span>)</span> <span>|</span> <span>1</span><span>,</span> <span>data</span> <span>=</span> <span>df</span><span>,</span> <span>dist</span> <span>=</span> <span>&quot;negbin&quot;</span><span>)</span>
<span>## create rootograms
</span><span>root2.nb</span>   <span>&lt;-</span> <span>rootogram</span><span>(</span><span>glm2.nb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;hanging&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>)</span>
<span>root2.zinb</span> <span>&lt;-</span> <span>rootogram</span><span>(</span><span>glm2.zinb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;hanging&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>)</span></code></pre>
</figure>
<p>
First, we look at the negative binomial data and compare rootograms of the Poisson and negative binomial model fits
</p>
<figure>
<pre><code data-lang="r"><span>plot_grid</span><span>(</span><span>autoplot</span><span>(</span><span>root.nb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>autoplot</span><span>(</span><span>root2.nb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>ncol</span> <span>=</span> <span>2</span><span>,</span> <span>labels</span> <span>=</span> <span>&quot;auto&quot;</span><span>)</span></code></pre>
</figure>
<figure>
<img alt="Hanging rootograms for Poisson GLM (a) and negative binomial model (b) fits to the simulated negative binomial count data" src="http://i1.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-negbin-rootos-1.png?w=456" data-recalc-dims="1">
<figcaption>
Hanging rootograms for Poisson GLM (a) and negative binomial model (b) fits to the simulated negative binomial count data<br>
</figcaption>
</figure>
<p>
The rootogram for the negative binomial GLM fit (panel b) shows much better agreement with the data than that of the Poisson fit (panel a). Departures from expected counts are much smaller and the zero-count bin is much better fitted. Some small deviations from the observed data remain but that is to be expected.
</p>
<p>
Next we compare rootograms for the fits of the Poisson GLM and ZINB model
</p>
<figure>
<pre><code data-lang="r"><span>ylims</span> <span>&lt;-</span> <span>ylim</span><span>(</span><span>-2</span><span>,</span> <span>8.5</span><span>)</span>
<span>plot_grid</span><span>(</span><span>autoplot</span><span>(</span><span>root.zinb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>autoplot</span><span>(</span><span>root2.zinb</span><span>)</span> <span>+</span> <span>ylims</span><span>,</span> <span>ncol</span> <span>=</span> <span>2</span><span>,</span> <span>labels</span> <span>=</span> <span>&quot;auto&quot;</span><span>)</span></code></pre>
</figure>
<figure>
<img alt="Hanging rootograms for Poisson GLM (a) and zero-inflated negative binomial model (b) fits to the simulated zero-inflated negative binomial count data" src="http://i2.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-zinb-rootos-1.png?w=456" data-recalc-dims="1">
<figcaption>
Hanging rootograms for Poisson GLM (a) and zero-inflated negative binomial model (b) fits to the simulated zero-inflated negative binomial count data<br>
</figcaption>
</figure>
<p>
The rootogram for the ZINB model (panel b) shows better agreement with the zero-count bin than the Poisson model (panel a), though fits for the remaining count bins are similar to one another in both models. In particular, the ZINB model is still over predicting single counts.
</p>
<p>
Suspended rootograms are also recommended by <span data-cites="Kleiber2016-pt">Kleiber and Zeileis (2016)</span>. These rootograms show the <em>difference</em> between observed and expected counts, with bars hanging from the zero-line rather than the expected count line. Therefore we can think of this rootogram as showing information about the model residuals rather than the fitted values of the hanging rootogram. A suspended rootogram is produced using <code>style = “suspended”</code> and an example, for the ZINB model, is shown below
</p>
<figure>
<pre><code data-lang="r"><span>autoplot</span><span>(</span><span>rootogram</span><span>(</span><span>glm2.zinb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;suspended&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>))</span></code></pre>
</figure>
<figure>
<img alt="Suspended rootogram for a zero-inflated negative binomial model fitted to the simulated zero-inflated negative binomial count data" src="http://i0.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-zinb-suspended-1.png?w=456" data-recalc-dims="1">
<figcaption>
Suspended rootogram for a zero-inflated negative binomial model fitted to the simulated zero-inflated negative binomial count data<br>
</figcaption>
</figure>
<p>
Standing histograms are not recommended by <span data-cites="Kleiber2016-pt">Kleiber and Zeileis (2016)</span> as they simply show the expected and observed counts and the user then has to compare the height of each bar with the expected curve for each bin. By tying the bars to the expected curve or zero reference line in hanging or suspended rootograms, the assessment of fit is made by comparison of deviations from the reference line rather than bin-by-bin comparison of observed and expected counts. A standing rootogram, for completeness, is shown below for the ZINB model
</p>
<figure>
<pre><code data-lang="r"><span>autoplot</span><span>(</span><span>rootogram</span><span>(</span><span>glm2.zinb</span><span>,</span> <span>style</span> <span>=</span> <span>&quot;standing&quot;</span><span>,</span> <span>plot</span> <span>=</span> <span>FALSE</span><span>))</span></code></pre>
</figure>
<figure>
<img alt="Standing rootogram for a zero-inflated negative binomial model fitted to the simulated zero-inflated negative binomial count data" src="http://i0.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-zinb-standing-1.png?w=456" data-recalc-dims="1">
<figcaption>
Standing rootogram for a zero-inflated negative binomial model fitted to the simulated zero-inflated negative binomial count data<br>
</figcaption>
</figure>
<p>
A neat feature of the <em>countreg</em> package is that rootograms can be combined using the <code>c()</code> or <code>cbind()</code> methods, which makes plotting multiple rootograms much more simple than I showed above. For example, to compare the Poisson and negative binomial model fits to the negative binomial counts one could have used
</p>
<figure>
<pre><code data-lang="r"><span>autoplot</span><span>(</span><span>c</span><span>(</span><span>root.nb</span><span>,</span> <span>root2.nb</span><span>))</span></code></pre>
</figure>
<figure>
<img alt="Result of plotting two rootograms that were combined using cbind()" src="http://i2.wp.com/www.fromthebottomoftheheap.net/assets/img/posts/rootograms-plot-concatenated-rootograms-1.png?w=456" data-recalc-dims="1">
<figcaption>
Result of plotting two rootograms that were combined using <code>cbind()</code><br>
</figcaption>
</figure>
<p>
So, there we go; these are rootograms and they seem like a pretty useful tool for assessing fits of count models. I really recommend having a look at <span data-cites="Kleiber2016-pt">Kleiber and Zeileis (2016)</span> as it contains much more discussion and illustration of the proposed rootograms than I could possibly include here. They also have a nice ecological example of data from an investigation into horseshoe crab mating plus two other examples. Their paper will shortly appear in the journal <em>The American Statistician</em>, although at the time of writing I don’t have citation details for that version of the paper.
</p>
<div>
<h3>
References<br>
</h3>
<div>
<p>
Kleiber, Christian, and Achim Zeileis. 2016. “Visualizing Count Data Regressions Using Rootograms,” 4~may.
</p>
</div>
</div>
<section>
<hr>
<ol>
<li>
<p>
I’m kind of glossing over the fact that a quadratic function of <em>x</em> is not really the true model here, which is a generalised beta response function. This kind of sets up a follow-up post using a GAM fit…<a target="_blank" href="http://www.fromthebottomoftheheap.net/2016/06/07/rootograms/#fnref1">↩</a>
</p>
</li>
</ol>
</section>
<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/rootograms/"></div></div><div><a data-url="http://www.r-bloggers.com/rootograms/" data-counturl="http://www.r-bloggers.com/rootograms/" data-count="vertical" data-text="Rootograms" 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://www.fromthebottomoftheheap.net/2016/06/07/rootograms/"> From the Bottom of the Heap - R</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/bNMAAQtdk3U"></a></div>