<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/causal-mediation-estimation-measures-the-unobservable/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://www.rdatagen.net/post/causal-mediation/"> ouR data generation</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>I put together a series of demos for a group of epidemiology students who are studying causal mediation analysis. Since mediation analysis is not always so clear or intuitive, I thought, of course, that going through some examples of simulating data for this process could clarify things a bit.</p>
<p>Quite often we are interested in understanding the relationship between an exposure or intervention on an outcome. Does exposure <span>\(A\)</span> (could be randomized or not) have an effect on outcome <span>\(Y\)</span>?</p>
<p><img src="https://i0.wp.com/www.rdatagen.net/img/post-mediation/Model_1.png?w=456&ssl=1" data-recalc-dims="1"></p>
<p>But sometimes we are interested in understanding <em>more</em> than whether or not <span>\(A\)</span> causes or influences <span>\(B\)</span>; we might want to have some insight into the mechanisms <em>underlying</em> that influence. And this is where mediation analysis can be useful. (If you want to delve deeply into the topic, I recommend you check out this <a rel="nofollow" href="https://global.oup.com/academic/product/explanation-in-causal-inference-9780199325870?cc=us&lang=en&" target="_blank">book</a> by Tyler VanderWeele, or this nice <a rel="nofollow" href="https://www.mailman.columbia.edu/research/population-health-methods/causal-mediation" target="_blank">website</a> developed at Columbia University.)</p>
<p>In the example here, I am using the simplest possible scenario of an exposure <span>\(A\)</span>, a mediator <span>\(M\)</span>, and an outcome <span>\(Y\)</span>, without any confounding:</p>
<p><img src="https://i1.wp.com/www.rdatagen.net/img/post-mediation/Model_2.png?w=456&ssl=1" data-recalc-dims="1"></p>
<p>A key challenge of understanding and conducting a mediation analysis is how we should <em>quantify</em> this concept of mediation. Sure, <span>\(A\)</span> has an effect on <span>\(M\)</span>, which in turn has an effect on <span>\(Y\)</span>, and <span>\(A\)</span> also may have an effect on <span>\(Y\)</span> through other pathways. But how can we make sense of all of this? One approach, which is a relatively recent development, is to use the <em>potential outcome</em> framework of causal inference to define the various estimands (or quantities) that arise in a mediation analysis. (I draw on a <a rel="nofollow" href="https://www.jstor.org/stable/41058997?seq=1#metadata_info_tab_contents" target="_blank">paper</a> by Imai, Keele and Yamamoto for the terminology, as there is not complete agreement on what to call various quantities. The estimation methods and software used here are also described in the paper.)</p>
<div>
<h3>Defining the potential outcomes</h3>
<p>In an earlier <a rel="nofollow" href="https://www.rdatagen.net/post/be-careful/" target="_blank">post</a>, I described the concept of potential outcomes. I extend that a bit here to define the quantities we are interested in. In this case, we have two effects of the possible exposure: <span>\(M\)</span> and <span>\(Y\)</span>. Under this framework, each individual has a potential outcome for each level of <span>\(A\)</span> (I am assuming <span>\(A\)</span> is binary). So, for the mediator, <span>\(M_{i0}\)</span> and <span>\(M_{i1}\)</span> are the values of <span>\(M\)</span> we would observe for individual <span>\(i\)</span> without and with exposure, respectively. That is pretty straightforward. (From here on out, I will remove the subscript <span>\(i\)</span>, because it gets a little unwieldy.)</p>
<p>The potential outcomes under <span>\(Y\)</span> are less intuitive, as there are four of them. First, there is <span>\(Y_{0M_0}\)</span>, which is the potential outcome of <span>\(Y\)</span> <em>without</em> exposure for <span>\(A\)</span> and whatever the potential outcome for <span>\(M\)</span> is <em>without</em> exposure for <span>\(A\)</span>. This is what we observe when <span>\(A=0\)</span> for an individual. <span>\(Y_{1M_1}\)</span> is the potential outcome of <span>\(Y\)</span> <em>with</em> exposure for <span>\(A\)</span> and whatever the potential outcome for <span>\(M\)</span> is <em>with</em> exposure for <span>\(A\)</span>. This is what we observe when <span>\(A=1\)</span> for an individual. That’s all fine.</p>
<p>But we also have <span>\(Y_{0M_1}\)</span>, which can never be observed unless we can intervene on the mediator <span>\(M\)</span> somehow. This is the potential outcome of <span>\(Y\)</span> <em>without</em> exposure for <span>\(A\)</span> and whatever the mediator would have been had the individual been exposed. This potential outcome is controversial, because it is defined across two different universes of exposure to <span>\(A\)</span>. Finally, there is <span>\(Y_{1M_0}\)</span>. It is analogously defined across two universes, but in reverse.</p>
</div>
<div>
<h3>Defining the causal mediation effects and direct effects</h3>
<p>The estimands or quantities that we are interested are defined in terms of the potential outcomes. The <strong><em>causal mediation effects</em></strong> for an individual are</p>
<p><span>\[<br>
\begin{aligned}<br>
CME_0 &amp;= Y_{0M_1} – Y_{0M_0} \\<br>
CME_1 &amp;= Y_{1M_1} – Y_{1M_0},<br>
\end{aligned}<br>
\]</span></p>
<p>and the <strong><em>causal direct effects</em></strong> are</p>
<p><span>\[<br>
\begin{aligned}<br>
CDE_0 &amp;= Y_{1M_0} – Y_{0M_0} \\<br>
CDE_1 &amp;= Y_{1M_1} – Y_{0M_1}.<br>
\end{aligned}<br>
\]</span></p>
<p>A few important points. (1) Since we are in the world of potential outcomes, we do not observe these quantities for everyone. In fact, we don’t observe these quantities for anyone, since some of the measures are across two universes. (2) The two causal mediation effects under do not need to be the same. The same goes for the two causal direct effects. (3) Under a set of pretty strong assumptions related to unmeasured confounding, independence, and consistency (see <a rel="nofollow" href="https://www.jstor.org/stable/41058997?seq=1#metadata_info_tab_contents" target="_blank"><em>Imai et al</em></a> for the details), the average causal mediation effects and average causal direct effects can be estimated using <em>observed</em> data only. Before I simulate some data to demonstrate all of this, here is the definition for the <strong><em>total causal effect</em></strong> (and its decomposition into mediation and direct effects):</p>
<p><span>\[<br>
\begin{aligned}<br>
TCE &amp;= Y_{1M_1} – Y_{0M_0} \\<br>
&amp;= CME_1 + CDE_0 \\<br>
&amp;= CME_0 + CDE_1<br>
\end{aligned}<br>
\]</span></p>
</div>
<div>
<h3>Generating the data</h3>
<p>I’m using the <code>simstudy</code> package to generate the data. I’ll start by generating the binary potential outcomes for the mediator, <span>\(M_0\)</span> and <span>\(M_1\)</span>, which are correlated in this example. <span>\(P(M_1=1) > P(M_0=1)\)</span>, implying that exposure to <span>\(A\)</span> does indeed have an effect on <span>\(M\)</span>. Note that it is possible that for an individual <span>\(M_0 = 1\)</span> and <span>\(M_1 = 0\)</span>, so that exposure to <span>\(A\)</span> has an effect contrary to what we see in the population generally. (We don’t need to make this assumption in the data generation process; we could force <span>\(M_1\)</span> to be 1 if <span>\(M_0\)</span> is 1.)</p>
<pre><code>set.seed(3872672)
dd &lt;- genCorGen(n=5000, nvars = 2,  params1 = c(.2, .6), 
                dist = &quot;binary&quot;, rho = .3, corstr = &quot;cs&quot;, 
                wide = TRUE, cnames = c(&quot;M0&quot;, &quot;M1&quot;))</code></pre>
<p>Observe treatment:</p>
<pre><code>dd &lt;- trtObserve(dd, 0.6, grpName = &quot;A&quot;)</code></pre>
<p>Initial data set:</p>
<pre><code>dd</code></pre>
<pre><code>##         id A M0 M1
##    1:    1 0  0  1
##    2:    2 1  0  0
##    3:    3 1  0  1
##    4:    4 0  1  1
##    5:    5 1  0  0
##   ---             
## 4996: 4996 1  0  1
## 4997: 4997 0  0  0
## 4998: 4998 1  1  1
## 4999: 4999 1  1  0
## 5000: 5000 0  0  0</code></pre>
<p><span>\(Y_{0M_0}\)</span> is a function of <span>\(M_0\)</span> and some noise <span>\(e_0\)</span>, and <span>\(Y_{0M_1}\)</span> is a function of <span>\(M_1\)</span> and the same noise (this is not a requirement). However, if <span>\(M_0 = M_1\)</span> (i.e. the mediator is not affected by exposure status), then I am setting <span>\(Y_{0M_1} = Y_{0M_0}\)</span>. In this case, <span>\(CME_0\)</span> for an individual is <span>\(2(M_1 – M_0)\)</span>, so <span>\(CME_0 \in \{-2, 0, 2\}\)</span>, and the population average <span>\(CME_0\)</span> will depend on the mixture of potential outcomes <span>\(M_0\)</span> and <span>\(M_1\)</span>.</p>
<pre><code>def &lt;- defDataAdd(varname = &quot;e0&quot;, formula = 0, 
                  variance = 1, dist = &quot;normal&quot;)
def &lt;- defDataAdd(def, varname = &quot;Y0M0&quot;, formula = &quot;2 + M0*2 + e0&quot;, 
                  dist = &quot;nonrandom&quot;)
def &lt;- defDataAdd(def, varname = &quot;Y0M1&quot;, formula = &quot;2 + M1*2 + e0&quot;, 
                  variance = 1, dist = &quot;nonrandom&quot;)</code></pre>
<p>The same logic holds for <span>\(Y_{1M_0}\)</span> and <span>\(Y_{1M_1}\)</span>, though at the individual level <span>\(CME_1 \in \{-5, 0, 5\}\)</span>:</p>
<pre><code>def &lt;- defDataAdd(def, varname = &quot;e1&quot;, formula = 0, 
                  variance = 1, dist = &quot;normal&quot;)
def &lt;- defDataAdd(def, varname = &quot;Y1M0&quot;, formula = &quot;8 + M0*5 + e1&quot;, 
                  dist = &quot;nonrandom&quot;)
def &lt;- defDataAdd(def, varname = &quot;Y1M1&quot;, formula = &quot;8 + M1*5 + e1&quot;, 
                  dist = &quot;nonrandom&quot;)</code></pre>
<p>The <em>observed</em> mediator (<span>\(M\)</span>) and outcome (<span>\(Y\)</span>) are determined by the observed exposure (<span>\(A\)</span>).</p>
<pre><code>def &lt;- defDataAdd(def, varname = &quot;M&quot;, 
          formula = &quot;(A==0) * M0 + (A==1) * M1&quot;, dist = &quot;nonrandom&quot;)
def &lt;- defDataAdd(def, varname = &quot;Y&quot;, 
          formula = &quot;(A==0) * Y0M0 + (A==1) * Y1M1&quot;, dist = &quot;nonrandom&quot;)</code></pre>
<p>Here is the entire data definitions table:</p>
<table>
<thead>
<tr>
<th>
varname
</th>
<th>
formula
</th>
<th>
variance
</th>
<th>
dist
</th>
<th>
link
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span>e0 </span>
</td>
<td>
<span>0 </span>
</td>
<td>
<span>1</span>
</td>
<td>
<span>normal </span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>Y0M0</span>
</td>
<td>
<span>2 + M0*2 + e0 </span>
</td>
<td>
<span>0</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>Y0M1</span>
</td>
<td>
<span>2 + M1*2 + e0 </span>
</td>
<td>
<span>1</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>e1 </span>
</td>
<td>
<span>0 </span>
</td>
<td>
<span>1</span>
</td>
<td>
<span>normal </span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>Y1M0</span>
</td>
<td>
<span>8 + M0*5 + e1 </span>
</td>
<td>
<span>0</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>Y1M1</span>
</td>
<td>
<span>8 + M1*5 + e1 </span>
</td>
<td>
<span>0</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>M </span>
</td>
<td>
<span>(A==0) * M0 + (A==1) * M1 </span>
</td>
<td>
<span>0</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
<tr>
<td>
<span>Y </span>
</td>
<td>
<span>(A==0) * Y0M0 + (A==1) * Y1M1</span>
</td>
<td>
<span>0</span>
</td>
<td>
<span>nonrandom</span>
</td>
<td>
<span>identity</span>
</td>
</tr>
</tbody>
</table>
<p>Based on the parameters used to generate the data, we can calculate the expected causal mediation effects:</p>
<p><span>\[<br>
\begin{aligned}<br>
E[CME_0] &amp;= E[2 + 2M_1 + e_0] – E[2+2M_0+e_0] \\<br>
&amp;= E[2(M_1 – M_0)] \\<br>
&amp;= 2(E[M_1] – E[M_0]) \\<br>
&amp;= 2(0.6 – 0.2) \\<br>
&amp;= 0.8<br>
\end{aligned}<br>
\]</span></p>
<p><span>\[<br>
\begin{aligned}<br>
E[CME_1] &amp;= E[8 + 5M_1 + e_1] – E[8+5M_0+e_1] \\<br>
&amp;= E[5(M_1 – M_0)] \\<br>
&amp;= 5(E[M_1] – E[M_0]) \\<br>
&amp;= 5(0.6 – 0.2) \\<br>
&amp;= 2.0<br>
\end{aligned}<br>
\]</span></p>
<p>Likewise, the expected values of the causal direct effects can be calculated:</p>
<p><span>\[<br>
\begin{aligned}<br>
E[CDE_0] &amp;= E[8 + 5M_0 + e_1] – E[2+2M_0+e_0] \\<br>
&amp;= E[6 + 5M_0 – 2M_0)] \\<br>
&amp;= 6 + 3M_0 \\<br>
&amp;= 6 + 3*0.2 \\<br>
&amp;= 6.6<br>
\end{aligned}<br>
\]</span></p>
<p><span>\[<br>
\begin{aligned}<br>
E[CDE_1] &amp;= E[8 + 5M_1 + e_1] – E[2+2M_1+e_0] \\<br>
&amp;= E[6 + 5M_1 – 2M_1)] \\<br>
&amp;= 6 + 3M_1 \\<br>
&amp;= 6 + 3*0.6 \\<br>
&amp;= 7.8<br>
\end{aligned}<br>
\]</span></p>
<p>Finally, the expected total causal effect is:</p>
<p><span>\[<br>
\begin{aligned}<br>
ATCE &amp;= E[CDE_0] + E[CME_1] = 6.6 + 2.0 \\<br>
&amp;= E[CDE_1] + E[CME_0] = 7.8 + 0.8 \\<br>
&amp;= 8.6<br>
\end{aligned}<br>
\]</span><br>
And now, the complete data set can be generated.</p>
<pre><code>dd &lt;- addColumns(def, dd)
dd &lt;- delColumns(dd, c(&quot;e0&quot;, &quot;e1&quot;)) # these are not needed
dd</code></pre>
<pre><code>##         id A M0 M1  Y0M0 Y0M1  Y1M0  Y1M1 M      Y
##    1:    1 0  0  1 0.933 2.93  7.58 12.58 0  0.933
##    2:    2 1  0  0 2.314 2.31  6.84  6.84 0  6.841
##    3:    3 1  0  1 3.876 5.88  9.05 14.05 1 14.053
##    4:    4 0  1  1 5.614 5.61 12.04 12.04 1  5.614
##    5:    5 1  0  0 1.469 1.47  8.81  8.81 0  8.809
##   ---                                             
## 4996: 4996 1  0  1 2.093 4.09  8.82 13.82 1 13.818
## 4997: 4997 0  0  0 1.734 1.73  7.28  7.28 0  1.734
## 4998: 4998 1  1  1 3.256 3.26 12.49 12.49 1 12.489
## 4999: 4999 1  1  0 5.149 3.15 12.57  7.57 0  7.572
## 5000: 5000 0  0  0 1.959 1.96  5.23  5.23 0  1.959</code></pre>
</div>
<div>
<h3>Looking at the “observed” potential outcomes</h3>
<p>The advantage of simulating data is that we can see what the average causal effects are based on the potential outcomes. Here are the average potential outcomes in the generated data set:</p>
<pre><code>dd[,.( Y0M0 = mean(Y0M0), Y0M1 = mean(Y0M1), 
       Y1M0 = mean(Y1M0), Y1M1 = mean(Y1M1))]</code></pre>
<pre><code>##    Y0M0 Y0M1 Y1M0 Y1M1
## 1: 2.39  3.2 8.99   11</code></pre>
<p>The four average causal effects based on the data are quite close to the expected values:</p>
<pre><code>dd[, .(ACME0 = mean(Y0M1 - Y0M0), ACME1= mean(Y1M1 - Y1M0),
       ACDE0 = mean(Y1M0 - Y0M0), ACDE1= mean(Y1M1 - Y0M1))]</code></pre>
<pre><code>##    ACME0 ACME1 ACDE0 ACDE1
## 1:  0.81  2.03   6.6  7.81</code></pre>
<p>And the here is the average total causal effect from the data set:</p>
<pre><code>dd[, mean(Y1M1 - Y0M0)]</code></pre>
<pre><code>## [1] 8.62</code></pre>
<p>All of these quantities can be visualized in this figure. The lengths of the solid vertical lines are the mediated effects. The lengths of the dotted vertical lines are the direct effects. And the sums of these vertical lines (by color) each represent the total effect:</p>
<p><img src="https://i1.wp.com/www.rdatagen.net/post/2018-11-07-causal-mediation_files/figure-html/unnamed-chunk-13-1.png?w=450&ssl=1" data-recalc-dims="1"></p>
</div>
<div>
<h3>Estimated causal mediation effect from observed data</h3>
<p>Clearly, the real interest is in estimating the causal effects from data that we can actually observe. And that, of course, is where things start to get challenging. I will not go into the important details here (again, <a rel="nofollow" href="https://www.jstor.org/stable/41058997?seq=1#metadata_info_tab_contents" target="_blank"><em>Imai et al</em></a> provide these), but here are formulas that have been derived to estimate the effects (simplified since there are no confounders in this example) and the calculations using the observed data:</p>
<p><span>\[\small<br>
\hat{CME_0} =\sum_{m\in0,1}E[Y|A=0, M=m][P(M=m|A=1)-P(M=m|A=0)]<br>
\]</span></p>
<pre><code># Estimate CME0

dd[M == 0 &amp; A == 0, mean(Y)] * 
  (dd[A == 1, mean(M == 0)] - dd[A == 0, mean(M == 0)]) +
dd[M == 1 &amp; A == 0, mean(Y)] * 
  (dd[A == 1, mean(M == 1)] - dd[A == 0, mean(M == 1)])</code></pre>
<pre><code>## [1] 0.805</code></pre>
<p><span>\[\small<br>
\hat{CME_1} =\sum_{m\in0,1}E[Y|A=1, M=m][P(M=m|A=1)-P(M=m|A=0)]<br>
\]</span></p>
<pre><code># Estimate CME1

dd[M == 0 &amp; A == 1, mean(Y)] * 
  (dd[A == 1, mean(M == 0)] - dd[A == 0, mean(M == 0)]) +
dd[M == 1 &amp; A == 1, mean(Y)] * 
  (dd[A == 1, mean(M == 1)] - dd[A == 0, mean(M == 1)])</code></pre>
<pre><code>## [1] 2</code></pre>
<p><span>\[\small<br>
\hat{CDE_0} =\sum_{m\in0,1}(E[Y|A=1, M=m] – E[Y|A=0, M=m])P(M=m|A=0)<br>
\]</span></p>
<pre><code># Estimate CDE0

(dd[M == 0 &amp; A == 1, mean(Y)] -  dd[M == 0 &amp; A == 0, mean(Y)]) * 
  dd[A == 0, mean(M == 0)] +
(dd[M == 1 &amp; A == 1, mean(Y)] -  dd[M == 1 &amp; A == 0, mean(Y)]) * 
  dd[A == 0, mean(M == 1)]</code></pre>
<pre><code>## [1] 6.56</code></pre>
<p><span>\[\small<br>
\hat{CDE_1} =\sum_{m\in0,1}(E[Y|A=1, M=m] – E[Y|A=0, M=m])P(M=m|A=1)<br>
\]</span></p>
<pre><code># Estimate CDE1

(dd[M == 0 &amp; A == 1, mean(Y)] -  dd[M == 0 &amp; A == 0, mean(Y)]) * 
  dd[A == 1, mean(M == 0)] +
(dd[M == 1 &amp; A == 1, mean(Y)] -  dd[M == 1 &amp; A == 0, mean(Y)]) * 
  dd[A == 1, mean(M == 1)]</code></pre>
<pre><code>## [1] 7.76</code></pre>
</div>
<div>
<h3>Estimation with mediation package</h3>
<p>Fortunately, there is software available to provide these estimates (and more importantly measures of uncertainty). In <code>R</code>, one such package is <code>mediation</code>, which is available on <a rel="nofollow" href="https://cran.r-project.org/web/packages/mediation/index.html" target="_blank">CRAN</a>. This package implements the formulas derived in the <em>Imai et al</em> paper.</p>
<p>Not surprisingly, the model estimates are in line with expected values, true underlying effects, and the previous estimates conducted by hand:</p>
<pre><code>library(mediation)

med.fit &lt;- glm(M ~ A, data = dd, family = binomial(&quot;logit&quot;))
out.fit &lt;- lm(Y ~ M*A, data = dd)

med.out &lt;- mediate(med.fit, out.fit, treat = &quot;A&quot;, mediator = &quot;M&quot;,
                   robustSE = TRUE, sims = 1000)
summary(med.out)</code></pre>
<pre><code>## 
## Causal Mediation Analysis 
## 
## Quasi-Bayesian Confidence Intervals
## 
##                          Estimate 95% CI Lower 95% CI Upper p-value    
## ACME (control)             0.8039       0.7346         0.88  &lt;2e-16 ***
## ACME (treated)             2.0033       1.8459         2.16  &lt;2e-16 ***
## ADE (control)              6.5569       6.4669         6.65  &lt;2e-16 ***
## ADE (treated)              7.7563       7.6555         7.86  &lt;2e-16 ***
## Total Effect               8.5602       8.4317         8.69  &lt;2e-16 ***
## Prop. Mediated (control)   0.0940       0.0862         0.10  &lt;2e-16 ***
## Prop. Mediated (treated)   0.2341       0.2179         0.25  &lt;2e-16 ***
## ACME (average)             1.4036       1.2917         1.52  &lt;2e-16 ***
## ADE (average)              7.1566       7.0776         7.24  &lt;2e-16 ***
## Prop. Mediated (average)   0.1640       0.1524         0.17  &lt;2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 5000 
## 
## 
## Simulations: 1000</code></pre>
</div>
	<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="https://www.rdatagen.net/post/causal-mediation/"> ouR data generation</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/g0rPbW6a6ng" height="1"></a></div>