<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/extreme-learning-machine/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://mlampros.github.io/mlampros.github.io/2018/07/05/the_extreme_learning_machine_package/"> mlampros</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>As of 2018-06-17 the <a rel="nofollow" href="https://cran.r-project.org/package=elmNN" target="_blank">elmNN</a> package was archived and due to the fact that it was one of the machine learning functions that I used when I started learning R (it returns the output results pretty fast too) plus that I had to utilize the package last week for a personal task I decided to reimplement the R code in Rcpp. It didn’t take long because the R package was written, initially by the author, in a clear way. In the next lines I’ll explain the differences and the functionality just for reference.</p>
<p></p>
<h3>Differences between the elmNN (R package) and the elmNNRcpp (Rcpp Package)</h3>
<ul>
<li>The reimplementation assumes that both the predictors ( <em>x</em> ) and the response variable ( <em>y</em> ) are in the form of a matrix. This means that <em>character</em>, <em>factor</em> or <em>boolean</em> columns have to be transformed (onehot encoded would be an option) before using either the <em>elm_train</em> or the <em>elm_predict</em> function.</li>
<li>The output predictions are in the form of a matrix. In case of regression the matrix has one column whereas in case of classification the number of columns equals the number of unique labels</li>
<li>In case of classification the unique labels should begin from 0 and the difference between the unique labels should not be greater than 1. For instance, <em>unique_labels = c(0, 1, 2, 3)</em> are acceptable whereas the following case will raise an error : <em>unique_labels = c(0, 2, 3, 4)</em></li>
<li>I renamed the <em>poslin</em> activation to <em>relu</em> as it’s easier to remember ( both share the same properties ). Moreover I added the <em>leaky_relu_alpha</em> parameter so that if the value is greater than 0.0 a leaky-relu-activation for the single-hidden-layer can be used.</li>
<li>The initilization weights in the <em>elmNN</em> were set by default to uniform in the range [-1,1] <em>( ‘uniform_negative’ )</em> . I added two more options : <em>‘normal_gaussian’ ( in the range [0,1] )</em> and <em>‘uniform_positive’ ( in the range [0,1] )</em> too</li>
<li>The user has the option to include or exclude <em>bias</em> of the one-layer feed-forward neural network</li>
</ul>
<p></p>
<h3>The elmNNRcpp functions</h3>
<p>The functions included in the <em>elmNNRcpp</em> package are the following and details for each parameter can be found in the package documentation,</p>
<p></p>
<table>
<thead>
<tr>
<th>elmNNRcpp</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>elm_train</strong>(x, y, nhid, actfun, init_weights = “normal_gaussian”, bias = FALSE, …)</td>
</tr>
<tr>
<td><strong>elm_predict</strong>(elm_train_object, newdata, normalize = FALSE)</td>
</tr>
<tr>
<td><strong>onehot_encode</strong>(y)</td>
</tr>
</tbody>
</table>
<p></p>
<h3>elmNNRcpp in case of Regression</h3>
<p>The following code chunk gives some details on how to use the <em>elm_train</em> in case of regression and compares the results with the <em>lm ( linear model )</em> base function,</p>
<p></p>
<div>
<div>
<pre><code><span>
</span><span># load the data and split it in two parts</span><span>
</span><span>#----------------------------------------</span><span>
</span><span>data</span><span>(</span><span>Boston</span><span>,</span><span> </span><span>package</span><span> </span><span>=</span><span> </span><span>'KernelKnn'</span><span>)</span><span>
</span><span>library</span><span>(</span><span>elmNNRcpp</span><span>)</span><span>
</span><span>Boston</span><span> </span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>Boston</span><span>)</span><span>
</span><span>dimnames</span><span>(</span><span>Boston</span><span>)</span><span> </span><span>=</span><span> </span><span>NULL</span><span>
</span><span>X</span><span> </span><span>=</span><span> </span><span>Boston</span><span>[,</span><span> </span><span>-</span><span>dim</span><span>(</span><span>Boston</span><span>)[</span><span>2</span><span>]]</span><span>
</span><span>xtr</span><span> </span><span>=</span><span> </span><span>X</span><span>[</span><span>1</span><span>:</span><span>350</span><span>,</span><span> </span><span>]</span><span>
</span><span>xte</span><span> </span><span>=</span><span> </span><span>X</span><span>[</span><span>351</span><span>:</span><span>nrow</span><span>(</span><span>X</span><span>),</span><span> </span><span>]</span><span>
</span><span># prepare / convert the train-data-response to a one-column matrix</span><span>
</span><span>#-----------------------------------------------------------------</span><span>
</span><span>ytr</span><span> </span><span>=</span><span> </span><span>matrix</span><span>(</span><span>Boston</span><span>[</span><span>1</span><span>:</span><span>350</span><span>,</span><span> </span><span>dim</span><span>(</span><span>Boston</span><span>)[</span><span>2</span><span>]],</span><span> </span><span>nrow</span><span> </span><span>=</span><span> </span><span>length</span><span>(</span><span>Boston</span><span>[</span><span>1</span><span>:</span><span>350</span><span>,</span><span> </span><span>dim</span><span>(</span><span>Boston</span><span>)[</span><span>2</span><span>]]),</span><span>
</span><span>ncol</span><span> </span><span>=</span><span> </span><span>1</span><span>)</span><span>
</span><span># perform a fit and predict [ elmNNRcpp ]</span><span>
</span><span>#----------------------------------------</span><span>
</span><span>fit_elm</span><span> </span><span>=</span><span> </span><span>elm_train</span><span>(</span><span>xtr</span><span>,</span><span> </span><span>ytr</span><span>,</span><span> </span><span>nhid</span><span> </span><span>=</span><span> </span><span>1000</span><span>,</span><span> </span><span>actfun</span><span> </span><span>=</span><span> </span><span>'purelin'</span><span>,</span><span>
</span><span>init_weights</span><span> </span><span>=</span><span> </span><span>&quot;uniform_negative&quot;</span><span>,</span><span> </span><span>bias</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>,</span><span> </span><span>verbose</span><span> </span><span>=</span><span> </span><span>T</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<div>
<div>
<pre><code><span>
</span><span>## Input weights will be initialized ...</span><span>
</span><span>## Dot product of input weights and data starts ...</span><span>
</span><span>## Bias will be added to the dot product ...</span><span>
</span><span>## 'purelin' activation function will be utilized ...</span><span>
</span><span>## The computation of the Moore-Pseudo-inverse starts ...</span><span>
</span><span>## The computation is finished!</span><span>
</span><span>## </span><span>
</span><span>## Time to complete : 0.09112573 secs</span><span>
</span></code></pre>
</div>
</div>
<div>
<div>
<pre><code><span>
</span><span>pr_te_elm</span><span> </span><span>=</span><span> </span><span>elm_predict</span><span>(</span><span>fit_elm</span><span>,</span><span> </span><span>xte</span><span>)</span><span>
</span><span># perform a fit and predict [ lm ]</span><span>
</span><span>#----------------------------------------</span><span>
</span><span>data</span><span>(</span><span>Boston</span><span>,</span><span> </span><span>package</span><span> </span><span>=</span><span> </span><span>'KernelKnn'</span><span>)</span><span>
</span><span>fit_lm</span><span> </span><span>=</span><span> </span><span>lm</span><span>(</span><span>medv</span><span>~</span><span>.</span><span>,</span><span> </span><span>data</span><span> </span><span>=</span><span> </span><span>Boston</span><span>[</span><span>1</span><span>:</span><span>350</span><span>,</span><span> </span><span>])</span><span>
</span><span>pr_te_lm</span><span> </span><span>=</span><span> </span><span>predict</span><span>(</span><span>fit_lm</span><span>,</span><span> </span><span>newdata</span><span> </span><span>=</span><span> </span><span>Boston</span><span>[</span><span>351</span><span>:</span><span>nrow</span><span>(</span><span>X</span><span>),</span><span> </span><span>])</span><span>
</span><span># evaluation metric</span><span>
</span><span>#------------------</span><span>
</span><span>rmse</span><span> </span><span>=</span><span> </span><span>function</span><span> </span><span>(</span><span>y_true</span><span>,</span><span> </span><span>y_pred</span><span>)</span><span> </span><span>{</span><span>
</span><span>out</span><span> </span><span>=</span><span> </span><span>sqrt</span><span>(</span><span>mean</span><span>((</span><span>y_true</span><span> </span><span>-</span><span> </span><span>y_pred</span><span>)</span><span>^</span><span>2</span><span>))</span><span>
</span><span>out</span><span>
</span><span>}</span><span>
</span><span># test data response variable</span><span>
</span><span>#----------------------------</span><span>
</span><span>yte</span><span> </span><span>=</span><span> </span><span>Boston</span><span>[</span><span>351</span><span>:</span><span>nrow</span><span>(</span><span>X</span><span>),</span><span> </span><span>dim</span><span>(</span><span>Boston</span><span>)[</span><span>2</span><span>]]</span><span>
</span><span># mean-squared-error for 'elm' and 'lm'</span><span>
</span><span>#--------------------------------------</span><span>
</span><span>cat</span><span>(</span><span>'the rmse error for extreme-learning-machine is :'</span><span>,</span><span> </span><span>rmse</span><span>(</span><span>yte</span><span>,</span><span> </span><span>pr_te_elm</span><span>[,</span><span> </span><span>1</span><span>]),</span><span> </span><span>'\n'</span><span>)</span><span>
</span><span>## the rmse error for extreme-learning-machine is : 22.00705</span><span>
</span><span>cat</span><span>(</span><span>'the rmse error for liner-model is :'</span><span>,</span><span> </span><span>rmse</span><span>(</span><span>yte</span><span>,</span><span> </span><span>pr_te_lm</span><span>),</span><span> </span><span>'\n'</span><span>)</span><span>
</span><span>## the rmse error for liner-model is : 23.36543</span><span>
</span></code></pre>
</div>
</div>
<p></p>
<h3>elmNNRcpp in case of Classification</h3>
<p>The following code script illustrates how <em>elm_train</em> can be used in classification and compares the results with the <em>glm ( Generalized Linear Models )</em> base function,</p>
<p></p>
<div>
<div>
<pre><code><span>
</span><span># load the data</span><span>
</span><span>#--------------</span><span>
</span><span>data</span><span>(</span><span>ionosphere</span><span>,</span><span> </span><span>package</span><span> </span><span>=</span><span> </span><span>'KernelKnn'</span><span>)</span><span>
</span><span>y_class</span><span> </span><span>=</span><span> </span><span>ionosphere</span><span>[,</span><span> </span><span>ncol</span><span>(</span><span>ionosphere</span><span>)]</span><span>
</span><span>x_class</span><span> </span><span>=</span><span> </span><span>ionosphere</span><span>[,</span><span> </span><span>-</span><span>c</span><span>(</span><span>2</span><span>,</span><span> </span><span>ncol</span><span>(</span><span>ionosphere</span><span>))]</span><span> </span><span># second column has 1 unique value</span><span>
</span><span>x_class</span><span> </span><span>=</span><span> </span><span>scale</span><span>(</span><span>x_class</span><span>[,</span><span> </span><span>-</span><span>ncol</span><span>(</span><span>x_class</span><span>)])</span><span>
</span><span>x_class</span><span> </span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>x_class</span><span>)</span><span> </span><span># convert to matrix</span><span>
</span><span>dimnames</span><span>(</span><span>x_class</span><span>)</span><span> </span><span>=</span><span> </span><span>NULL</span><span> </span><span># split data in train-test</span><span>
</span><span>#-------------------------</span><span>
</span><span>xtr_class</span><span> </span><span>=</span><span> </span><span>x_class</span><span>[</span><span>1</span><span>:</span><span>200</span><span>,</span><span> </span><span>]</span><span> </span><span>xte_class</span><span> </span><span>=</span><span> </span><span>x_class</span><span>[</span><span>201</span><span>:</span><span>nrow</span><span>(</span><span>ionosphere</span><span>),</span><span> </span><span>]</span><span>
</span><span>ytr_class</span><span> </span><span>=</span><span> </span><span>as.numeric</span><span>(</span><span>y_class</span><span>[</span><span>1</span><span>:</span><span>200</span><span>])</span><span>
</span><span>yte_class</span><span> </span><span>=</span><span> </span><span>as.numeric</span><span>(</span><span>y_class</span><span>[</span><span>201</span><span>:</span><span>nrow</span><span>(</span><span>ionosphere</span><span>)])</span><span>
</span><span>ytr_class</span><span> </span><span>=</span><span> </span><span>onehot_encode</span><span>(</span><span>ytr_class</span><span> </span><span>-</span><span> </span><span>1</span><span>)</span><span> </span><span># class labels should begin from 0 (subtract 1)</span><span>
</span><span># perform a fit and predict [ elmNNRcpp ]</span><span>
</span><span>#----------------------------------------</span><span>
</span><span>fit_elm_class</span><span> </span><span>=</span><span> </span><span>elm_train</span><span>(</span><span>xtr_class</span><span>,</span><span> </span><span>ytr_class</span><span>,</span><span> </span><span>nhid</span><span> </span><span>=</span><span> </span><span>1000</span><span>,</span><span> </span><span>actfun</span><span> </span><span>=</span><span> </span><span>'relu'</span><span>,</span><span>
</span><span>init_weights</span><span> </span><span>=</span><span> </span><span>&quot;uniform_negative&quot;</span><span>,</span><span> </span><span>bias</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>,</span><span> </span><span>verbose</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<div>
<div>
<pre><code><span>
</span><span>## Input weights will be initialized ...</span><span>
</span><span>## Dot product of input weights and data starts ...</span><span>
</span><span>## Bias will be added to the dot product ...</span><span>
</span><span>## 'relu' activation function will be utilized ...</span><span>
</span><span>## The computation of the Moore-Pseudo-inverse starts ...</span><span>
</span><span>## The computation is finished!</span><span>
</span><span>## </span><span>
</span><span>## Time to complete : 0.03604198 secs</span><span>
</span></code></pre>
</div>
</div>
<div>
<div>
<pre><code><span>
</span><span>pr_elm_class</span><span> </span><span>=</span><span> </span><span>elm_predict</span><span>(</span><span>fit_elm_class</span><span>,</span><span> </span><span>xte_class</span><span>,</span><span> </span><span>normalize</span><span> </span><span>=</span><span> </span><span>FALSE</span><span>)</span><span>
</span><span>pr_elm_class</span><span> </span><span>=</span><span> </span><span>max.col</span><span>(</span><span>pr_elm_class</span><span>,</span><span> </span><span>ties.method</span><span> </span><span>=</span><span> </span><span>&quot;random&quot;</span><span>)</span><span>
</span><span># perform a fit and predict [ glm ]</span><span>
</span><span>#----------------------------------------</span><span>
</span><span>data</span><span>(</span><span>ionosphere</span><span>,</span><span> </span><span>package</span><span> </span><span>=</span><span> </span><span>'KernelKnn'</span><span>)</span><span>
</span><span>fit_glm</span><span> </span><span>=</span><span> </span><span>glm</span><span>(</span><span>class</span><span>~</span><span>.</span><span>,</span><span> </span><span>data</span><span> </span><span>=</span><span> </span><span>ionosphere</span><span>[</span><span>1</span><span>:</span><span>200</span><span>,</span><span> </span><span>-2</span><span>],</span><span> </span><span>family</span><span> </span><span>=</span><span> </span><span>binomial</span><span>(</span><span>link</span><span> </span><span>=</span><span> </span><span>'logit'</span><span>))</span><span>
</span><span>pr_glm</span><span> </span><span>=</span><span> </span><span>predict</span><span>(</span><span>fit_glm</span><span>,</span><span> </span><span>newdata</span><span> </span><span>=</span><span> </span><span>ionosphere</span><span>[</span><span>201</span><span>:</span><span>nrow</span><span>(</span><span>ionosphere</span><span>),</span><span> </span><span>-2</span><span>],</span><span> </span><span>type</span><span> </span><span>=</span><span> </span><span>'response'</span><span>)</span><span>
</span><span>pr_glm</span><span> </span><span>=</span><span> </span><span>as.vector</span><span>(</span><span>ifelse</span><span>(</span><span>pr_glm</span><span> </span><span></span><span> </span><span>0.5</span><span>,</span><span> </span><span>1</span><span>,</span><span> </span><span>2</span><span>))</span><span>
</span><span># accuracy for 'elm' and 'glm'</span><span>
</span><span>#-----------------------------</span><span>
</span><span>cat</span><span>(</span><span>'the accuracy for extreme-learning-machine is :'</span><span>,</span><span> </span><span>mean</span><span>(</span><span>yte_class</span><span> </span><span>==</span><span> </span><span>pr_elm_class</span><span>),</span><span> </span><span>'\n'</span><span>)</span><span>
</span><span>## the accuracy for extreme-learning-machine is : 0.9337748</span><span>
</span><span>cat</span><span>(</span><span>'the accuracy for glm is :'</span><span>,</span><span> </span><span>mean</span><span>(</span><span>yte_class</span><span> </span><span>==</span><span> </span><span>pr_glm</span><span>),</span><span> </span><span>'\n'</span><span>)</span><span>
</span><span>## the accuracy for glm is : 0.8940397</span><span>
</span></code></pre>
</div>
</div>
<p></p>
<h3>Classify MNIST digits using elmNNRcpp</h3>
<p>I found an interesting <a rel="nofollow" href="https://www.kaggle.com/robertbm/extreme-learning-machine-example" target="_blank">Python implementation / Code on the web</a> and I thought I give it a try to reproduce the results. I downloaded the MNIST data from my <a rel="nofollow" href="https://github.com/mlampros/DataSets" target="_blank">Github repository</a> and I used the following parameter setting,</p>
<div>
<div>
<pre><code><span>
</span><span># using system('wget..') on a linux OS </span><span>
</span><span>#-------------------------------------</span><span>
</span><span>system</span><span>(</span><span>&quot;wget https://raw.githubusercontent.com/mlampros/DataSets/master/mnist.zip&quot;</span><span>)</span><span> </span><span>mnist</span><span> </span><span>&lt;-</span><span> </span><span>read.table</span><span>(</span><span>unz</span><span>(</span><span>&quot;mnist.zip&quot;</span><span>,</span><span> </span><span>&quot;mnist.csv&quot;</span><span>),</span><span> </span><span>nrows</span><span> </span><span>=</span><span> </span><span>70000</span><span>,</span><span> </span><span>header</span><span> </span><span>=</span><span> </span><span>T</span><span>,</span><span> </span><span>quote</span><span> </span><span>=</span><span> </span><span>&quot;\&quot;&quot;</span><span>,</span><span> </span><span>sep</span><span> </span><span>=</span><span> </span><span>&quot;,&quot;</span><span>)</span><span>
</span><span>x</span><span> </span><span>=</span><span> </span><span>mnist</span><span>[,</span><span> </span><span>-</span><span>ncol</span><span>(</span><span>mnist</span><span>)]</span><span>
</span><span>y</span><span> </span><span>=</span><span> </span><span>mnist</span><span>[,</span><span> </span><span>ncol</span><span>(</span><span>mnist</span><span>)]</span><span>
</span><span>y_expand</span><span> </span><span>=</span><span> </span><span>onehot_encode</span><span>(</span><span>y</span><span>)</span><span>
</span><span># split the data randomly in train-test</span><span>
</span><span>#--------------------------------------</span><span>
</span><span>idx_train</span><span> </span><span>=</span><span> </span><span>sample</span><span>(</span><span>1</span><span>:</span><span>nrow</span><span>(</span><span>y_expand</span><span>),</span><span> </span><span>round</span><span>(</span><span>0.85</span><span> </span><span>*</span><span> </span><span>nrow</span><span>(</span><span>y_expand</span><span>)))</span><span>
</span><span>idx_test</span><span> </span><span>=</span><span> </span><span>setdiff</span><span>(</span><span>1</span><span>:</span><span>nrow</span><span>(</span><span>y_expand</span><span>),</span><span> </span><span>idx_train</span><span>)</span><span>
</span><span>fit</span><span> </span><span>=</span><span> </span><span>elm_train</span><span>(</span><span>as.matrix</span><span>(</span><span>x</span><span>[</span><span>idx_train</span><span>,</span><span> </span><span>]),</span><span> </span><span>y_expand</span><span>[</span><span>idx_train</span><span>,</span><span> </span><span>],</span><span> </span><span>nhid</span><span> </span><span>=</span><span> </span><span>2500</span><span>,</span><span> </span><span>actfun</span><span> </span><span>=</span><span> </span><span>'relu'</span><span>,</span><span> </span><span>init_weights</span><span> </span><span>=</span><span> </span><span>'uniform_negative'</span><span>,</span><span> </span><span>bias</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>,</span><span>
</span><span>verbose</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>)</span><span>
</span><span># Input weights will be initialized ...</span><span>
</span><span># Dot product of input weights and data starts ...</span><span>
</span><span># Bias will be added to the dot product ...</span><span>
</span><span># 'relu' activation function will be utilized ...</span><span>
</span><span># The computation of the Moore-Pseudo-inverse starts ...</span><span>
</span><span># The computation is finished!</span><span>
</span><span># </span><span>
</span><span># Time to complete : 1.607153 mins </span><span>
</span><span># predictions for test-data</span><span>
</span><span>#--------------------------</span><span>
</span><span>pr_test</span><span> </span><span>=</span><span> </span><span>elm_predict</span><span>(</span><span>fit</span><span>,</span><span> </span><span>newdata</span><span> </span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>x</span><span>[</span><span>idx_test</span><span>,</span><span> </span><span>]))</span><span>
</span><span>pr_max_col</span><span> </span><span>=</span><span> </span><span>max.col</span><span>(</span><span>pr_test</span><span>,</span><span> </span><span>ties.method</span><span> </span><span>=</span><span> </span><span>&quot;random&quot;</span><span>)</span><span>
</span><span>y_true</span><span> </span><span>=</span><span> </span><span>max.col</span><span>(</span><span>y_expand</span><span>[</span><span>idx_test</span><span>,</span><span> </span><span>])</span><span>
</span><span>cat</span><span>(</span><span>'Accuracy ( Mnist data ) :'</span><span>,</span><span> </span><span>mean</span><span>(</span><span>pr_max_col</span><span> </span><span>==</span><span> </span><span>y_true</span><span>),</span><span> </span><span>'\n'</span><span>)</span><span>
</span><span># Accuracy ( Mnist data ) : 96.13 </span><span>
</span></code></pre>
</div>
</div>
<p></p>
<p>An updated version of the elmNNRcpp package can be found in my <a rel="nofollow" href="https://github.com/mlampros/elmNNRcpp" target="_blank">Github repository</a> and to report bugs/issues please use the following link, <a rel="nofollow" href="https://github.com/mlampros/elmNNRcpp/issues" target="_blank">https://github.com/mlampros/elmNNRcpp/issues</a>.</p>
<p></p>
	<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="http://mlampros.github.io/mlampros.github.io/2018/07/05/the_extreme_learning_machine_package/"> mlampros</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a rel="nofollow" href="https://www.r-project.org/" title="The R Project for Statistical Computing">R</a> news and <a rel="nofollow" href="https://www.r-bloggers.com/search/tutorial" title="R tutorials">tutorials</a> on topics such as: <a rel="nofollow" href="https://www.r-bloggers.com/search/data%20science" title="Data science">Data science</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Big%20Data" title="Big Data">Big Data, <a rel="nofollow" href="https://www.r-users.com/" title="R jobs">R jobs</a>, visualization (<a rel="nofollow" href="https://www.r-bloggers.com/search/ggplot2" title="ggplot and ggplot2 tutorials">ggplot2</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/boxplot" title="Boxplots using lattice and ggplot2 tutorials">Boxplots</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/map" title="Maps and gis">maps</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/animation" title="Animation in R">animation</a>), programming (<a rel="nofollow" href="https://www.r-bloggers.com/search/RStudio" title="RStudio IDE for R">RStudio</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/sweave" title="Sweave and literate programming">Sweave</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/LaTeX" title="LaTeX in R">LaTeX</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/SQL" title="SQL and databases">SQL</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/eclipse" title="Eclipse IDE for R">Eclipse</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/git" title="git and github, Version Control System">git</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/hadoop" title="Large data in R using Hadoop">hadoop</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Web+Scraping" title="Web Scraping of google, facebook, yahoo, twitter and more using R">Web Scraping</a>) statistics (<a rel="nofollow" href="https://www.r-bloggers.com/search/regression" title="Regressions and ANOVA analysis tutorials">regression</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/PCA" title="principal component analysis tutorial">PCA</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/time+series" title="Time series">time series</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/trading" title="finance trading">trading</a>) and more...
<img width="1" alt="" src="http://feeds.feedburner.com/~r/RBloggers/~4/O22QWOfa-go" height="1"></a></div>