<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/do-you-really-need-a-multilevel-model-a-preview-of-powerlmm-0-4-0/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://rpsychologist.com/do-you-need-multilevel-powerlmm-0-4-0"> R Psychologist - R</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>In this post I will show some of the new simulation features that will be available in <code>powerlmm 0.4.0</code>. You can already install the dev version from GitHub.</p>
<div>
<pre><span></span><span># GitHub</span>
devtools<span>::</span>install_github<span>(</span><span>&quot;rpsychologist/powerlmm&quot;</span><span>)</span>
</pre>
</div>
<p>The revamped simulation functions offer 3 major new features:</p>
<ul>
<li>Compare multiple model formulas, including OLS models (no random effects).</li>
<li>Evaluate a “forward” or “backward” model selection strategy using LRT.</li>
<li>Apply a data transformation during the simulation, this makes it possible to compare e.g. an ANCOVA versus a 2-level LMM, or write your own custom MNAR or MAR missing data function.</li>
</ul>
<p>I will cover these new function in two examples.</p>
<div>
<pre><span></span><span>library</span><span>(</span>powerlmm<span>)</span>
nsim <span>&lt;-</span> <span>5000</span>
cores <span>&lt;-</span> <span>16</span>
</pre>
</div>
<h2>Example 1</h2>
<h3>Do I really need a LMM? 2-lvl LMM versus ANCOVA</h3>
<p>This example will show both the new <code>data_transform</code> argument and the new support for multiples formula, and formulas without random effects. Each formula is fit to the same data set (or a transformed version) during the simulation. Let’s assume we’ll do a trial where we measure patients for 11 weeks, from baseline to week 10. We can analyze such data in many ways, as an example we will compare 3 popular models:</p>
<ul>
<li>t-test: group differences at posttest</li>
<li>ANCOVA: group differences at posttest adjusting for pretest values </li>
<li>LMM: group difference in change over time using a 2-level linear-mixed effects model with a random intercept and slope</li>
</ul>
<p>To make the LMM more similar to the ANCOVA we also fit a constrained model where we assume there is no group differences at baseline (which there isn’t). Let’s setup the models and run the simulation, we will try different amounts of random slope variance compared to the within-subjects variance (<code>var_ratio</code>), and with or without dropout (30 % at posttest). </p>
<div>
<pre><span></span>p <span>&lt;-</span> study_parameters<span>(</span>n1 <span>=</span> <span>11</span><span>,</span>
                      n2 <span>=</span> <span>40</span><span>,</span> <span># per treatment</span>
                      icc_pre_subject <span>=</span> <span>0.5</span><span>,</span>
                      cor_subject <span>=</span> <span>-0.5</span><span>,</span>
                      var_ratio <span>=</span> <span>c</span><span>(</span><span>0</span><span>,</span> <span>0.01</span><span>,</span> <span>0.02</span><span>,</span> <span>0.03</span><span>),</span>
                      dropout <span>=</span> <span>c</span><span>(</span><span>0</span><span>,</span> dropout_weibull<span>(</span><span>0.3</span><span>,</span> <span>1</span><span>)),</span>
                      effect_size <span>=</span> cohend<span>(</span><span>c</span><span>(</span><span>0</span><span>,</span> <span>0.8</span><span>)))</span>

<span># Formulas --------------------------------------------------------------------</span>
<span># OLS (t-test)</span>
f_PT <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ treatment&quot;</span><span>,</span>
                    test <span>=</span> <span>&quot;treatment&quot;</span><span>,</span>
                    data_transform <span>=</span> transform_to_posttest<span>)</span>

<span># ANCOVA</span>
f_PT_pre <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ treatment + pretest&quot;</span><span>,</span>
                        test <span>=</span> <span>&quot;treatment&quot;</span><span>,</span>
                        data_transform <span>=</span> transform_to_posttest<span>)</span>

<span># analyze as 2-level longitudinal</span>
f_LMM <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time * treatment +</span>
<span> (1 + time | subject)&quot;</span><span>)</span>

<span># constrain treatment differences at pretest</span>
f_LMM_c <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time + time:treatment +</span>
<span> (1 + time | subject)&quot;</span><span>)</span>

<span># combine formulas</span>
f <span>&lt;-</span> sim_formula_compare<span>(</span><span>&quot;posttest&quot;</span> <span>=</span> f_PT<span>,</span>
                         <span>&quot;ANCOVA&quot;</span> <span>=</span> f_PT_pre<span>,</span>
                         <span>&quot;LMM&quot;</span> <span>=</span> f_LMM<span>,</span>
                         <span>&quot;LMM_c&quot;</span> <span>=</span> f_LMM_c<span>)</span>

<span># Run sim --------------------------------------------------------------------</span>
res <span>&lt;-</span> simulate<span>(</span>p<span>,</span>
                formula <span>=</span> f<span>,</span>
                nsim <span>=</span> nsim<span>,</span>
                cores <span>=</span> cores<span>,</span>
                satterthwaite <span>=</span> <span>TRUE</span><span>,</span>
                batch_progress <span>=</span> <span>FALSE</span><span>)</span>
</pre>
</div>
<p>Let’s summarize the results for the treatment effect.</p>
<div>
<pre><span></span><span># need to specify what parameter estimates the treatment effect.</span>
tests <span>&lt;-</span>  <span>list</span><span>(</span><span>&quot;posttest&quot;</span> <span>=</span> <span>&quot;treatment&quot;</span><span>,</span>
               <span>&quot;ANCOVA&quot;</span> <span>=</span> <span>&quot;treatment&quot;</span><span>,</span>
               <span>&quot;LMM&quot;</span> <span>=</span> <span>&quot;time:treatment&quot;</span><span>,</span>
               <span>&quot;LMM_c&quot;</span> <span>=</span> <span>&quot;time:treatment&quot;</span><span>)</span>

x <span>&lt;-</span> <span>summary</span><span>(</span>res<span>,</span> para <span>=</span> tests<span>)</span>

<span># Only print the first 5 </span>
<span>print</span><span>(</span><span>head</span><span>(</span>x<span>,</span> <span>5</span><span>),</span> 
      add_cols <span>=</span> <span>c</span><span>(</span><span>&quot;var_ratio&quot;</span><span>))</span>
</pre>
</div>
<div>
<pre><span></span>## Model: 'All' | Type: 'fixed' | Parameter(s): 'treatment', 'time:treatment'
## ---
##   model var_ratio   M_est theta M_se SD_est Power Power_bw Power_satt
##  ANCOVA      0.00 -0.0441     0  2.7    2.7 0.053    0.049      0.049
##  ANCOVA      0.01  0.0083     0  3.1    3.1 0.052    0.048      0.048
##  ANCOVA      0.02  0.0153     0  3.6    3.5 0.051    0.046      0.046
##  ANCOVA      0.03 -0.0822     0  4.0    4.0 0.047    0.043      0.043
##  ANCOVA      0.00 11.3523     0  2.7    2.8 0.982    0.981      0.981
## ---
## nsim:  5000 | 24 columns not shown
</pre>
</div>
<p>Since we have 16 × 4 model results, it is probably better to plot the results.</p>
<div>
<pre><span></span><span>library</span><span>(</span>ggplot2<span>)</span>
<span>library</span><span>(</span>viridis<span>)</span>

<span># re-order</span>
x<span>$</span>model <span>&lt;-</span> <span>factor</span><span>(</span>x<span>$</span>model<span>,</span> levels <span>=</span> <span>c</span><span>(</span><span>&quot;posttest&quot;</span><span>,</span>
                                      <span>&quot;ANCOVA&quot;</span><span>,</span> 
                                      <span>&quot;LMM&quot;</span><span>,</span> 
                                      <span>&quot;LMM_c&quot;</span><span>))</span> 
<span># Set custom limits per facet</span>
d_limits <span>&lt;-</span> <span>data.frame</span><span>(</span>effect_size <span>=</span> <span>c</span><span>(</span><span>0</span><span>),</span> 
                       Power_satt <span>=</span> <span>c</span><span>(</span><span>0.025</span><span>,</span> <span>0.075</span><span>),</span>
                       var_ratio <span>=</span> <span>0</span><span>,</span> 
                       model <span>=</span> <span>0</span><span>,</span>
                       dropout <span>=</span> <span>0</span><span>)</span>

<span># Set hlines per facet</span>
d_hline <span>&lt;-</span> <span>data.frame</span><span>(</span>effect_size <span>=</span> <span>c</span><span>(</span><span>0</span><span>,</span> <span>0.8</span><span>),</span> 
                      x <span>=</span> <span>c</span><span>(</span><span>0.05</span><span>,</span> <span>0.8</span><span>))</span>

<span># Plot</span>
ggplot<span>(</span>x<span>,</span> aes<span>(</span>model<span>,</span> 
               Power_satt<span>,</span>
               group <span>=</span> <span>interaction</span><span>(</span>var_ratio<span>,</span> dropout<span>),</span> 
               color <span>=</span> <span>factor</span><span>(</span>var_ratio<span>),</span>
               linetype <span>=</span> <span>factor</span><span>(</span>dropout<span>)))</span> <span>+</span> 
    geom_hline<span>(</span>data <span>=</span> d_hline<span>,</span>  aes<span>(</span>yintercept <span>=</span> x<span>),</span> linetype <span>=</span> <span>&quot;dotted&quot;</span><span>)</span> <span>+</span>
    geom_point<span>()</span> <span>+</span> 
    geom_blank<span>(</span>data <span>=</span> d_limits<span>)</span> <span>+</span>
    geom_line<span>()</span> <span>+</span>
    labs<span>(</span>y <span>=</span> <span>&quot;Power (Satterthwaite)&quot;</span><span>,</span>
         linetype <span>=</span> <span>&quot;Dropout&quot;</span><span>,</span>
         color <span>=</span> <span>&quot;Variance ratio&quot;</span><span>,</span>
         title <span>=</span> <span>&quot;Power and Type I error&quot;</span><span>)</span> <span>+</span>
    facet_grid<span>(</span>dropout <span>~</span> effect_size<span>,</span> 
               scales <span>=</span> <span>&quot;free&quot;</span><span>,</span> 
               labeller <span>=</span> <span>&quot;label_both&quot;</span><span>)</span> <span>+</span>
    coord_flip<span>()</span> <span>+</span>
    theme_minimal<span>()</span> <span>+</span>
    scale_color_viridis_d<span>()</span>
</pre>
</div>
<p><img alt="center" title="center" src="https://i2.wp.com/rpsychologist.com/img/do-you-need-multilevel/unnamed-chunk-6-1.png?w=100%25" data-recalc-dims="1"></p>
<p>We can see that for complete data that the ANCOVA is generally more powerful than the standard LMM as heterogeneity increases (“variance ratio”), whereas the constrained LMM is more powerful. The difference between ANCOVA and t-test (“posttest”) also decrease with increasing heterogeneity in change over time—since this leads to a weaker correlation between pretest and posttest. For the scenarios with missing data, LMM is more powerful, as would be expected—the cross-sectional methods have 30 % of the observations missing, whereas the LMMs can include the available responses up until dropout occurs. </p>
<p>It is worth noting that the 2-lvl LMM with 11 repeated measures is not always more powerful than a “cross-sectional” t-test at posttest. Obviously, this is a limited example, but it demonstrates that it is a mistake to base sample size calculations on a t-test, when a LMM is planned, with the motivation that “a LMM will have more power” (I see such motivations quite often). </p>
<h2>Example 2</h2>
<h3>Do I really need a multilevel model? Using LRT to perform model selection</h3>
<p>A common strategy when analyzing (longitudinal) data is to build the model in a data driven fashion—by starting with a random intercept model, then add a random slope and perform a likelihood ratio test (LRT) and keep the random slope if it is significant, and so on. We can investigate how well such a strategy works using <code>sim_formula_compare</code>. We’ll define our model formulas, starting with a 2-level random intercept model and working up to a 3-level random intercept and slope model. The true model is a 3-level model with only a random slope. Let’s first setup the models</p>
<div>
<pre><span></span>p <span>&lt;-</span> study_parameters<span>(</span>n1 <span>=</span> <span>11</span><span>,</span>
                      n2 <span>=</span> <span>40</span><span>,</span>
                      n3 <span>=</span> <span>3</span><span>,</span>
                      icc_pre_subject <span>=</span> <span>0.5</span><span>,</span>
                      cor_subject <span>=</span> <span>-0.5</span><span>,</span>
                      icc_slope <span>=</span> <span>0.05</span><span>,</span>
                      var_ratio <span>=</span> <span>0.03</span><span>)</span>

f0 <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time * treatment + (1 | subject)&quot;</span><span>)</span>
f1 <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time * treatment + (1 + time | subject)&quot;</span><span>)</span>
f2 <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time * treatment + (1 + time | subject) + (0 + time | cluster)&quot;</span><span>)</span>
f3 <span>&lt;-</span> sim_formula<span>(</span><span>&quot;y ~ time * treatment + (1 + time | subject) + (1 + time | cluster)&quot;</span><span>)</span>

f <span>&lt;-</span> sim_formula_compare<span>(</span><span>&quot;subject-intercept&quot;</span> <span>=</span> f0<span>,</span> 
                         <span>&quot;subject-slope&quot;</span> <span>=</span> f1<span>,</span> 
                         <span>&quot;cluster-slope&quot;</span> <span>=</span> f2<span>,</span>
                         <span>&quot;cluster-intercept&quot;</span> <span>=</span> f3<span>)</span>
</pre>
</div>
<p>Then we run the simulation, the four model formulas in <code>f</code> will be fit the each data set.</p>
<div>
<pre><span></span>res <span>&lt;-</span> simulate<span>(</span>p<span>,</span> formula <span>=</span> f<span>,</span> 
                nsim <span>=</span> nsim<span>,</span> 
                satterthwaite <span>=</span> <span>TRUE</span><span>,</span> 
                cores <span>=</span> cores<span>,</span>
                CI <span>=</span> <span>FALSE</span><span>)</span>
</pre>
</div>
<p>During each simulation the REML log likelihood is saved for each model, we can therefore perform the model selection in the summary method, as a post-processing step. Since REML is used it is assumed the fixed effects are the same, and that we compare a “full model” to a “reduced model”. Let’s try a forward selection strategy, where start with the first model and compare it to the next. If the comparison is significant we continue testing models, else we stop. The summary function performs this model comparison for each of the <code>nsim</code> simulations and returns the results from the “winning” model in each simulation replication.</p>
<div>
<pre><span></span>x <span>&lt;-</span> <span>summary</span><span>(</span>res<span>,</span> model_selection <span>=</span> <span>&quot;FW&quot;</span><span>,</span> LRT_alpha <span>=</span> <span>0.05</span><span>)</span>
x
</pre>
</div>
<div>
<pre><span></span>## Model:  model_selection 
## 
## Random effects 
## 
##          parameter   M_est  theta est_rel_bias prop_zero is_NA
##  subject_intercept 100.000 100.00      0.00029      0.00     0
##      subject_slope   2.900   2.80      0.00710      0.00     0
##              error 100.000 100.00     -0.00017      0.00     0
##        cor_subject  -0.490  -0.50     -0.01000      0.00     0
##      cluster_slope   0.270   0.15      0.82000      0.00     0
##  cluster_intercept   7.900   0.00      7.90000      0.00     0
##        cor_cluster  -0.081   0.00     -0.08100      0.67     0
## 
## Fixed effects 
## 
##       parameter   M_est theta M_se SD_est Power Power_bw Power_satt
##     (Intercept)  0.0160     0 1.10   1.00 0.050        .          .
##            time -0.0045     0 0.25   0.28 0.130        .          .
##       treatment  0.0160     0 1.50   1.50 0.049        .          .
##  time:treatment -0.0024     0 0.36   0.40 0.130    0.048       0.12
## ---
## Number of simulations: 5000  | alpha:  0.05
## Time points (n1):  11
## Subjects per cluster (n2 x n3):  40 x 3 (treatment)
##                                  40 x 3 (control)
## Total number of subjects:  240 
## ---
## Results based on LRT model comparisons, using direction: FW (alpha = 0.05)
## Model selected (proportion)
## cluster-intercept     cluster-slope     subject-slope 
##            0.0054            0.4360            0.5586
</pre>
</div>
<p>The point of the model selection algorithm is to mimic a type of data driven model selection that is quite common. We see that this strategy do not lead to nominal Type I errors in this scenario. The cluster-level is left out of the model too often, leading to Type I errors around 12 %. However, it is fairly common to increase the LRT’s alpha level to try to improve this strategy. Let’s try a range of alpha level to see the impact.</p>
<div>
<pre><span></span>alphas <span>&lt;-</span> <span>seq</span><span>(</span><span>0.01</span><span>,</span> <span>0.5</span><span>,</span> length.out <span>=</span> <span>50</span><span>)</span>
x <span>&lt;-</span> <span>vapply</span><span>(</span>alphas<span>,</span> <span>function</span><span>(</span>a<span>)</span> <span>{</span>
    type1 <span>&lt;-</span> <span>summary</span><span>(</span>res<span>,</span> model_selection <span>=</span> <span>&quot;FW&quot;</span><span>,</span> LRT_alpha <span>=</span> a<span>)</span>
    type1<span>$</span><span>summary</span><span>$</span>model_selection<span>$</span>FE<span>$</span>Power_satt<span>[</span><span>4</span><span>]</span>
    <span>},</span> <span>numeric</span><span>(</span><span>1</span><span>))</span>
d <span>&lt;-</span> <span>data.frame</span><span>(</span>LRT_alpha <span>=</span> alphas<span>,</span> type1 <span>=</span> x<span>)</span>
</pre>
</div>
<div>
<pre><span></span>d <span>&lt;-</span> <span>data.frame</span><span>(</span>LRT_alpha <span>=</span> alphas<span>,</span> type1 <span>=</span> x<span>)</span>
ggplot<span>(</span>d<span>,</span> aes<span>(</span>LRT_alpha<span>,</span> type1<span>))</span> <span>+</span> 
    geom_line<span>()</span> <span>+</span>
    geom_hline<span>(</span>yintercept <span>=</span> <span>0.05</span><span>,</span> linetype <span>=</span> <span>&quot;dotted&quot;</span><span>)</span> <span>+</span>
    labs<span>(</span>y <span>=</span> <span>&quot;Type I error (time:treatment)&quot;</span><span>,</span>
         title <span>=</span> <span>&quot;Impact of LRT alpha level for model selection&quot;</span><span>)</span> <span>+</span>
    theme_minimal<span>()</span>
</pre>
</div>
<p><img alt="center" title="center" src="https://i2.wp.com/rpsychologist.com/img/do-you-need-multilevel/unnamed-chunk-11-1.png?w=100%25" data-recalc-dims="1"></p>
<p>The figure shows that the LRT alpha level need to be very liberal to keep Type I errors, for the treatment effect, close to the 5 % level. </p>
<p>We can also see the results from each of the four models. Here we will just look at the <code>time:treatment</code> effect.</p>
<div>
<pre><span></span>x1 <span>&lt;-</span> <span>summary</span><span>(</span>res<span>,</span> para <span>=</span> <span>&quot;time:treatment&quot;</span><span>)</span>
x1
</pre>
</div>
<div>
<pre><span></span>## Model:  summary 
## 
## Fixed effects: 'time:treatment'
## 
##              model   M_est theta M_se SD_est Power Power_bw Power_satt
##  subject-intercept -0.0024     0 0.14    0.4 0.500    0.330      0.500
##      subject-slope -0.0024     0 0.25    0.4 0.220    0.080      0.220
##      cluster-slope -0.0024     0 0.39    0.4 0.088    0.028      0.054
##  cluster-intercept -0.0024     0 0.40    0.4 0.082    0.026      0.043
## ---
## Number of simulations: 5000  | alpha:  0.05
## Time points (n1):  11
## Subjects per cluster (n2 x n3):  40 x 3 (treatment)
##                                  40 x 3 (control)
## Total number of subjects:  240
</pre>
</div>
<p>We see that the 2-lvl random intercept model lead to substantially inflated Type I errors = 0.495. The 2-level model that also adds a random slope is somewhat better but still not good, Type I errors = 0.215. The correct 3-level model that account for the third level using a random slope have close to nominal Type I errors = 0.054. The full 3-level that adds an unnecessary random intercept is somewhat conservative, Type I errors = 0.043. </p>
<p>When choosing a strategy Type I errors is not only factor we want to minimize, power is also important. So let’s see how power is affected.</p>
<div>
<pre><span></span><span># See if power is impacted</span>
p1 <span>&lt;-</span> update<span>(</span>p<span>,</span> effect_size <span>=</span> cohend<span>(</span><span>0.8</span><span>))</span>
res_power <span>&lt;-</span> simulate<span>(</span>p1<span>,</span> 
                      formula <span>=</span> f<span>,</span> 
                      nsim <span>=</span> nsim<span>,</span> 
                      satterthwaite <span>=</span> <span>TRUE</span><span>,</span>
                      cores <span>=</span> cores<span>,</span> 
                      CI <span>=</span> <span>FALSE</span><span>)</span>
</pre>
</div>
<div>
<pre><span></span><span># we can also summary a fixed effect for convenience</span>
x <span>&lt;-</span> <span>summary</span><span>(</span>res_power<span>,</span> 
             model_selection <span>=</span> <span>&quot;FW&quot;</span><span>,</span> 
             LRT_alpha <span>=</span> <span>0.05</span><span>,</span>
             para <span>=</span> <span>&quot;time:treatment&quot;</span><span>)</span>
<span>print</span><span>(</span>x<span>,</span> verbose <span>=</span> <span>FALSE</span><span>)</span>
</pre>
</div>
<div>
<pre><span></span>## Model:  summary 
## 
## Fixed effects: 'time:treatment'
## 
##            model M_est theta M_se SD_est Power Power_bw Power_satt
##  model_selection   1.1   1.1 0.36   0.39  0.82     0.61       0.69
## ---
</pre>
</div>
<div>
<pre><span></span>x1 <span>&lt;-</span> <span>summary</span><span>(</span>res_power<span>,</span> 
              para <span>=</span> <span>&quot;time:treatment&quot;</span><span>)</span>
<span>print</span><span>(</span>x1<span>,</span> verbose <span>=</span> <span>FALSE</span><span>)</span>
</pre>
</div>
<div>
<pre><span></span>## Model:  summary 
## 
## Fixed effects: 'time:treatment'
## 
##              model M_est theta M_se SD_est Power Power_bw Power_satt
##  subject-intercept   1.1   1.1 0.14   0.39  0.98     0.97       0.98
##      subject-slope   1.1   1.1 0.25   0.39  0.95     0.86       0.94
##      cluster-slope   1.1   1.1 0.39   0.39  0.80     0.55       0.63
##  cluster-intercept   1.1   1.1 0.40   0.39  0.78     0.52       0.55
## ---
</pre>
</div>
<p>We can note that power for the treatment effect based on LRT model selection is only slightly higher than for the correct 3-level model. If we balance this slight increase in power compared to the noticeable increase in Type I errors, it might be reasonable to conclude that for these data we should always fit the 3-level model. Lastly, the overspecified 3-level model that include an unnecessary random intercept loses some power.</p>
<h1>Summary</h1>
<p>The improved simulation method in <code>powerlmm</code> makes it really convenient to plan and evaluate the analysis of longitudinal treatment trials with a possible third level of clustering (therapists, schools, groups, etc). The support for data transforms and single level (<code>lm()</code>) models also enables a lot of custom models to be fit. </p>
<h1>Feedback, bugs, etc</h1>
<p>I appreciate all types of feedback, e.g. typos, bugs, inconsistencies, feature requests, etc. Open an issue on <a rel="nofollow" href="http://github.com/rpsychologist/powerlmm/issues" target="_blank">github.com/rpsychologist/powerlmm/issues</a>, common on this post, or contact me here <a rel="nofollow" href="http://rpsychologist.com/about" target="_blank">rpsychologist.com/about</a>.</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://rpsychologist.com/do-you-need-multilevel-powerlmm-0-4-0"> R Psychologist - R</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/dS9HjzBvSzA" height="1"></a></div>