# medmod – mediation and moderation in jamovi and R

**jamovi**, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

### tl;dr

- You can now do mediation and moderation analyses in jamovi and R with
`medmod`

- Use
`medmod`

for an easy transition to`lavaan`

## Introducing `medmod`

The PROCESS macro has been a very popular add-on for SPSS that allows you to do a wide variety of path model analyses, of which mediation and moderation analysis are probably the most well-known. We’ve received a lot of requests to add these analyses to jamovi, and today we are happy to announce the `medmod`

module which allows you to do mediation and moderation analyses in jamovi (and R). In this blog post we will give a brief demonstration of the mediation analysis in `medmod`

in both jamovi and R, and then show how you can use `medmod`

in combination with `lavaan`

, a powerful R package for latent variable modeling.

## Mediation analysis

Mediation analysis allows you to explore whether a mediating variable can explain the relationship between two variables. For example, you might want to know whether the relationship between ‘personality similarity’ and ‘marital satisfaction’ is mediated by ‘shared activities’. Having similar personalities could lead to more time spend together doing shared activities, which in turn could lead to more marital satisfaction. If this is the case, decreasing the influence of ‘personality similarity’ on ‘shared activities’ (i.e., spending time doing shared activities regardless of having similar personalities or not) should decrease (or even nullify) the original relationship between ‘personality similarity’ and ‘marital satisfaction’.

The path model below illustrates the mediation model. Here, `X`

is the predictor, `M`

the mediator, and `Y`

the outcome variable. While path `c`

describes the direct effect of the predictor variable on the outcome variable, paths `a`

and `b`

together describe the indirect or mediated effect. If there is both an indirect and direct effect, it’s called partial mediation. If there is an indirect effect but no direct effect, it’s called full moderation.

To demonstrate this analysis, we will use the data set from Pollack, VanEpps, and Hayes (2012), who explored whether the relationship between entrepreneurs withdrawing from entrepreneurial activities and financial stress is mediated by them experiencing feelings of depression. Did financial stress cause depression, which in turn caused withdrawal? You can download this data set here.

We will first demonstrate this analysis with jamovi, the free and open statistical spreadsheet, and then in R. Feel free to skip down to the R section.

## Mediation analysis with jamovi

We’ll begin by loading up the estress.csv data set into jamovi. If you haven’t installed the `medmod`

module yet, go to the jamovi library and install it. Subsequently, select the mediation analysis from the `medmod`

menu icon and assign the appropriate options in the options panel as follows:

You can download the jamovi file over here and open it in jamovi to get access to the data, results, and options. Before discussing the results, we’ll demonstrate how this same analysis can be done in R.

## Mediation analysis with R

We’ll first read the data into our R session:

```
<span class="n">data</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">read.csv</span><span class="p">(</span><span class="s2">"estress.csv"</span><span class="p">)</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w">
</span>
```

```
## tenure estress affect withdraw sex age ese
## 1 1.67 6.0 2.60 3.00 1 51 5.33
## 2 0.58 5.0 1.00 1.00 0 45 6.05
## 3 0.58 5.5 2.40 3.66 1 42 5.26
## 4 2.00 3.0 1.16 4.66 1 50 4.35
## 5 5.00 4.5 1.00 4.33 1 48 4.86
## 6 9.00 6.0 1.50 3.00 1 48 5.05
```

Next, we will perform the mediation analysis using `medmod`

. The variables we will use for our mediation analysis are `estress`

(economic stress), `withdraw`

(withdrawal from entrepreneurial activities), and `affect`

(depressed affect). If you haven’t installed the `medmod`

package yet, install it as follows: `install.packages('medmod')`

. I added a couple of additional options to give us some extra information.

```
<span class="n">library</span><span class="p">(</span><span class="s1">'medmod'</span><span class="p">)</span><span class="w">
</span><span class="n">results</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">med</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">dep</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'withdraw'</span><span class="p">,</span><span class="w"> </span><span class="n">med</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'affect'</span><span class="p">,</span><span class="w">
</span><span class="n">pred</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'estress'</span><span class="p">,</span><span class="w"> </span><span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">,</span><span class="w"> </span><span class="n">paths</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">,</span><span class="w">
</span><span class="n">pm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">)</span><span class="w">
</span>
```

## Interpreting results

Let’s check out the results of our mediation analysis:

```
##
## MEDIATION
##
## Mediation Estimates
## ─────────────────────────────────────────────────────────────────────────────────
## Effect Label Estimate SE Z p % Mediation
## ─────────────────────────────────────────────────────────────────────────────────
## Indirect a × b 0.1330 0.0288 4.62 < .001 63.4
## Direct c -0.0768 0.0521 -1.48 0.140 36.6
## Total c + a × b 0.0561 0.0540 1.04 0.299 100.0
## ─────────────────────────────────────────────────────────────────────────────────
##
##
## Path Estimates
## ──────────────────────────────────────────────────────────────────────────────
## Label Estimate SE Z p
## ──────────────────────────────────────────────────────────────────────────────
## estress → affect a 0.1729 0.0295 5.85 < .001
## affect → withdraw b 0.7691 0.1025 7.51 < .001
## estress → withdraw c -0.0768 0.0521 -1.48 0.140
## ──────────────────────────────────────────────────────────────────────────────
```

The first table consists of the mediation estimates while the second table consists of the individual path estimates. The `Label`

column shows how these results are related to each other. The mediation estimates show that the indirect effect differs significantly from zero, indicating that there is indeed a mediation effect. The `% Mediation`

column shows which percentage of the total effect is accounted for by the indirect effect and can be used as an mediation effect size. For the exact nature of the mediation effect we’ll take a look at the path estimates; economic stress increases depressed affect, and depressed affect in turn increases withdrawal from entrepreneurial activities.

## Mediation analysis with `lavaan`

For its computations `medmod`

uses `lavaan`

—a powerful R package created by Yves Rosseel used to fit latent variable models. Where `medmod`

focuses on two specific models, lavaan gives its users more freedom in their model specification. You can specify your latent variable model using lavaan model syntax. `medmod`

tries to make it easy to transition to lavaan by providing the lavaan syntax used to fit the mediation and moderation analyses.

The lavaan model syntax is part of the `medmod`

results object and you can simply extract it as follows:

```
<span class="n">model</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">results</span><span class="o">$</span><span class="n">modelSyntax</span><span class="w">
</span><span class="n">cat</span><span class="p">(</span><span class="n">model</span><span class="p">)</span><span class="w">
</span>
```

```
## # Direct effect
## withdraw ~ c*estress
##
## # Mediator
## affect ~ a*estress
## withdraw ~ b*affect
##
## # Indirect effect (a*b)
## ab := a*b
##
## # Total effect
## total := c + (a*b)
```

You can now pass the model syntax into the `sem`

function from the lavaan package, to do the exact same analysis but now directly in lavaan:

```
<span class="n">library</span><span class="p">(</span><span class="s1">'lavaan'</span><span class="p">)</span><span class="w">
</span><span class="n">fit</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">sem</span><span class="p">(</span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">model</span><span class="p">)</span><span class="w">
</span><span class="n">summary</span><span class="p">(</span><span class="n">fit</span><span class="p">)</span><span class="w">
</span>
```

```
## lavaan (0.5-23.1097) converged normally after 16 iterations
##
## Number of observations 262
##
## Estimator ML
## Minimum Function Test Statistic 0.000
## Degrees of freedom 0
##
## Parameter Estimates:
##
## Information Expected
## Standard Errors Standard
##
## Regressions:
## Estimate Std.Err z-value P(>|z|)
## withdraw ~
## estress (c) -0.077 0.052 -1.475 0.140
## affect ~
## estress (a) 0.173 0.030 5.853 0.000
## withdraw ~
## affect (b) 0.769 0.102 7.506 0.000
##
## Variances:
## Estimate Std.Err z-value P(>|z|)
## .withdraw 1.269 0.111 11.446 0.000
## .affect 0.461 0.040 11.446 0.000
##
## Defined Parameters:
## Estimate Std.Err z-value P(>|z|)
## ab 0.133 0.029 4.616 0.000
## total 0.056 0.054 1.039 0.299
```

You can also use the lavaan model syntax provided by `medmod`

as a starting point to create more complex models (e.g., moderated mediation). For more information about lavaan, check out the official lavaan website lavaan.ugent.be.

## summing up

`medmod`

makes mediation and moderation analysis available for both jamovi and R- To use
`medmod`

in jamovi, go to the jamovi library and install it directly from there. - To use
`medmod`

from R, you can install it directly from CRAN.

**leave a comment**for the author, please follow the link and comment on their blog:

**jamovi**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.