This vignette reports a moderated mediation analysis. This will help
getting familiar with the several helpers *JSmediation* offers to
conduct moderated mediation analysis.

Simple mediation refers to the pattern of statistical relationships
in which the effect of a variable on another goes through a third
variable. Sometimes, this indirect relationship is conditional to a
fourth variable—a moderator. In such a case, we talk about
**moderated mediation**. The *JSmediation* package
offers a collection of tools to conduct and report a moderated mediation
analysis (Muller et al., 2005).

The Introduction to JSmediation
vignette uses a data set collected by Ho et al. (2017) to illustrate simple mediation. This data
set contains the result of an experiment in which Ho et al. focus on
hypodescent among Black Americans. To illustrate how
*JSmediation* can be used to conduct a moderated mediation
analysis, we will expand on this example.

`library(JSmediation)`

Hypodescent refers to a rule observed in multiracial categorization. Research shows that majority group social perceivers (i.e., White Americans) typically associate Black-White multiracials with their lower status group rather than with their higher group (i.e., with Black Americans rather than with White Americans). This phenomenon is called the hypodescent rule and it was retrieved in the Black Americans population by Ho et al. (2017). The hypothesis is that such categorization occurs because of a sentiment of linked fate between Black Americans and Black-White multiracials.

This observation was supported by data showing that Black Americans felt a stronger sentiment of linked fate between them and Black-White multiracials when they read about an article discussing how Black-White multiracials were likely to suffer from discrimination (compared to an article discussing how they were not). The higher sentiment of linked fate was associated with a higher use of the hypodescent rule in multiracial categorization. In other words, the effect of a discrimination condition on hypodescent rule was mediated by the feeling of linked fate.

In the current vignette, we will investigate whether this indirect effect is moderated by social dominance orientation (SDO). Indeed, SDO correlates with preferences for intergroup equality—higher levels indicates resistance to intergroup equality and support for maintaining status quo, lower levels indicates support for intergroup equality and reducing hierarchy (Ho et al., 2017). Ho et al. (2017) assumed that the indirect effect will be stronger for Black Americans showing lower levels of SDO. They should feel a higher sentiment of linked fate when presented information related to the high discrimination of Black-White multiracials.

`data(ho_et_al)`

While this vignette was written to illustrate features from the
*JSmediation* package, we will use functions from other packages
(e.g., *dplyr*), but make it explicit when we do so. In other
words, rather than calling `library(dplyr)`

to attache the
*dplyr* package and then calling its function (e.g.,
`mutate`

), we will use `dplyr::mutate`

,
`mutate`

will suffice.

The data set collected by Ho et al. (2017) contains the information necessary for
the test of our hypothesis of moderated mediation. It contains a
`condition`

column indicating whether participants were read
about the high or low discrimination of Black-White multiracials and a
`hypodescent`

column. The data set also contains a
`linkedfate`

column indicating the feeling of linked fate
participants felt in the experimental situation. The simple mediation
analysis in the Introduction to
JSmediation vignette shows that participants in high discrimination
conditions tend to feel a higher level of linked fate which results in
higher hypodescent. We will now investigate whether this indirect effect
is more likely to be observed among participants who show higher levels
of SDO (thanks to the `sdo`

column).

```
head(ho_et_al)
#> id condition sdo linkedfate hypodescent
#> 1 2 Low discrimination 1.8125 6.000 2.333333
#> 2 3 High discrimination 1.5625 5.875 6.000000
#> 3 4 High discrimination 1.7500 6.625 6.000000
#> 4 5 Low discrimination 4.2500 5.125 5.666667
#> 5 6 Low discrimination 1.9375 4.375 4.000000
#> 6 9 High discrimination 2.8750 3.750 4.000000
```

Before we run the moderated mediation analysis, we must tweak the
data set a little bit. Muller et al. (2005) recommend centering the continuous
predictors and contrast-coding the categorical ones.
*JSmediation* offers helpers like `build_contrast`

or
`standardize_variable`

to do so.

```
<-
ho_et_al %>%
ho_et_al standardize_variable(c(sdo, linkedfate), suffix = "c") %>%
::mutate(condition_c = build_contrast(condition,
dplyr"Low discrimination",
"High discrimination")
)
head(ho_et_al)
#> # A tibble: 6 × 8
#> id condition sdo linkedfate hypodescent sdo_c linked…¹ condi…²
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 2 Low discrimination 1.81 6 2.33 -0.470 0.636 -0.5
#> 2 3 High discrimination 1.56 5.88 6 -0.707 0.538 0.5
#> 3 4 High discrimination 1.75 6.62 6 -0.529 1.13 0.5
#> 4 5 Low discrimination 4.25 5.12 5.67 1.84 -0.0525 -0.5
#> 5 6 Low discrimination 1.94 4.38 4 -0.351 -0.643 -0.5
#> 6 9 High discrimination 2.88 3.75 4 0.538 -1.13 0.5
#> # … with abbreviated variable names ¹linkedfate_c, ²condition_c
```

The first function we used, `standardize_variable`

, allows
us to center and reduce (to standardize) a set of variables (here:
`sdo`

and `linkedfate`

). The `suffix`

argument of this function is used to name the standardized variables.
Here, because we set `suffix = "c"`

, the new variables are
named `sdo_c`

and `linkedfate_c`

. When the suffix
argument is blank, original variables are overwritten. Because
*JSmediation* was designed to fit within the tidyverse,
`standardize_variable`

is especially useful in a
*dplyr* chain.

Here, we also used a second function from *JSmediation*:
`build_contrast`

. This function takes a character vector as a
first argument and, then, returns a contrast-coded variables. It is
designed for variables with two conditions, which is the case of
`condition`

. Because we want to include the transformed
variable in `ho_et_al`

, we can use the
`dplyr::mutate`

function which creates (or modify)
variables. With this method, we contrast-coded the
`condition`

variable.

```
%>%
ho_et_al ::select(dplyr::starts_with("condition"))
dplyr#> # A tibble: 824 × 2
#> condition condition_c
#> <chr> <dbl>
#> 1 Low discrimination -0.5
#> 2 High discrimination 0.5
#> 3 High discrimination 0.5
#> 4 Low discrimination -0.5
#> 5 Low discrimination -0.5
#> 6 High discrimination 0.5
#> 7 High discrimination 0.5
#> 8 Low discrimination -0.5
#> 9 Low discrimination -0.5
#> 10 High discrimination 0.5
#> # … with 814 more rows
```

We will now run our moderated mediation analysis. Remember, we are
testing whether participants in high discrimination condition show
higher level of hypodescent because of a higher perception of linked
fate, and whether this indirect effect is higher among people with high
level of SDO. In other words, we are testing whether SDO moderates the
mediation of the effect on condition on hypodescent through linked fate
perception. To test this moderated mediation, we will use the
`mdt_moderated`

function.

Muller et al. (2005) provide an accessible introduction on how to conduct a moderated mediation analysis using the joint-significance methods. In a nutshell, one will fit several linear models to the data set, and, depending on the significance of some coefficients, one will be able to assess moderated mediation.

To better understand the process of testing a moderated mediation, we can glance at the equation describing the moderation of the indirect effect of X on Y. Such moderation can be described as follows:

\[ c \times Mod = c' \times Mod + (a \times Mod) \times b + a \times (b \times Mod) \]

with \(c \times Mod\) the total moderation of the indirect effect, \(c' \times Mod\) the moderation of the direct effect, \((a \times Mod) \times b\), the moderation of the indirect effect passing by the moderation of \(a\), and \(a \times (b \times Mod)\), the moderation of the indirect effect passing by the moderation of \(b\) (see Models section; Muller et al., 2005).

Either both \(a \times Mod\) and \(b\) or both \(a\) and \(b \times Mod\) need to be simultaneously significant for the moderation of the indirect effect to be claimed (Muller et al., 2005).

`mdt_moderated`

`mdt_moderated`

works like every `mdt_*`

function. It will be fit the necessary linear models (see the Models
section in the help page of `mdt_moderated`

) and returns the
relevant coefficient in a nicely formatted output.

To use the function, we will have to describe the role of the
variable in the `ho_et_al`

data set.

```
<-
moderated_mediation_fit mdt_moderated(data = ho_et_al,
IV = condition_c,
DV = hypodescent,
M = linkedfate_c,
Mod = sdo_c)
```

Most of the math occurs when `mdt_moderated`

is evaluated.
The `moderated_mediation_fit`

that we just computed contains
every linear model useful to assess moderated mediation, as described in
Muller et al. (2005).

As we can see, it is possible to see \(a\), \(a \times
Mod\), \(b\), and \(b \times Mod\) in the
`mdt_moderated`

output.

```
moderated_mediation_fit#> Test of mediation (moderated mediation)
#> ==============================================
#>
#> Variables:
#>
#> - IV: condition_c
#> - DV: hypodescent
#> - M: linkedfate_c
#> - Mod: sdo_c
#>
#> Paths:
#>
#> ======== ============== ===== =======================
#> Path Point estimate SE APA
#> ======== ============== ===== =======================
#> a 0.569 0.063 t(820) = 9.01, p < .001
#> a * Mod -0.268 0.063 t(820) = 4.25, p < .001
#> b 0.161 0.043 t(818) = 3.75, p < .001
#> b * Mod -0.066 0.042 t(818) = 1.57, p = .117
#> c 0.131 0.078 t(820) = 1.67, p = .095
#> c * Mod -0.037 0.078 t(820) = 0.47, p = .640
#> c' 0.021 0.082 t(818) = 0.25, p = .800
#> c' * Mod 0.037 0.081 t(818) = 0.46, p = .645
#> ======== ============== ===== =======================
#>
#> Indirect effect index:
#>
#> Indirect effect index is not computed by default.
#> Please use add_index() to compute it.
#>
#> Fitted models:
#>
#> - X * Mod -> Y
#> - X * Mod -> M
#> - (X + M) * Mod -> Y
```

If a moderated mediation model is significant, Yzerbyt et al. (2018) recommend reporting the moderated
mediation index. To compute this index, *JSmediation* offers the
`add_index`

method. In the case of moderated mediation, we
will have to specify whether we are in a scenario where we assume that
the moderator impacts the relation between or IV and the mediator (i.e.,
both \(a \times Mod\) and \(b\) are significant), the relation between
the moderator and the DV (i.e., both \(a\) and \(b
\times Mod\) are significant), or both. To do so, we must use the
`stage`

argument.

```
<- moderated_mediation_fit %>%
moderated_mediation_fit_w_index add_index(stage = "first")
```

The output of the new object now contains the index.

```
moderated_mediation_fit_w_index#> Test of mediation (moderated mediation)
#> ==============================================
#>
#> Variables:
#>
#> - IV: condition_c
#> - DV: hypodescent
#> - M: linkedfate_c
#> - Mod: sdo_c
#>
#> Paths:
#>
#> ======== ============== ===== =======================
#> Path Point estimate SE APA
#> ======== ============== ===== =======================
#> a 0.569 0.063 t(820) = 9.01, p < .001
#> a * Mod -0.268 0.063 t(820) = 4.25, p < .001
#> b 0.161 0.043 t(818) = 3.75, p < .001
#> b * Mod -0.066 0.042 t(818) = 1.57, p = .117
#> c 0.131 0.078 t(820) = 1.67, p = .095
#> c * Mod -0.037 0.078 t(820) = 0.47, p = .640
#> c' 0.021 0.082 t(818) = 0.25, p = .800
#> c' * Mod 0.037 0.081 t(818) = 0.46, p = .645
#> ======== ============== ===== =======================
#>
#> Indirect effect index:
#>
#> - type: Mediated moderation index (First stage)
#> - point estimate: -0.0432
#> - confidence interval:
#> - method: Monte Carlo (5000 iterations)
#> - level: 0.05
#> - CI: [-0.078; -0.0167]
#>
#> Fitted models:
#>
#> - X * Mod -> Y
#> - X * Mod -> M
#> - (X + M) * Mod -> Y
```

The `moderated_mediation_fit_w_index`

object that we
computed contains every bit of information to report a moderated
mediation in an analysis, following Yzerbyt et al.’s (2018) recommendations:

To assess whether SDO moderates the indirect effect of discrimination condition on hypodescent through linked fate perception, we conducted a moderated mediation analysis (Muller et al., 2005). This analysis first revealed that SDO moderates the effect of condition on linked fate perception,

t(820) = 4.25,p< .001. It also revealed that the effect of linked fate perception for a mean level of SDO, and controlling for the effect of the condition and for the moderation of the condition by SDO, predicted significantly hypodescent,t(818) = 3.75,p< .001. This pattern reveals the existence of a moderated mediation. We also computed the first stage moderated mediation index consistent with our joint-significant analysis and it confirmed the moderated mediation, -0.0432, CI_{95%}[-0.0778; -0.0171] (Monte Carlo simulation, 5000 simulations; Yzerbyt et al., 2018).

When reporting a moderated mediation analysis, it is sometimes useful
to know what the indirect effect is for several values of the moderator.
The `compute_indirect_effect_for`

function serves that
purpose.

`compute_indirect_effect_for`

takes as the first argument
a moderated mediation model for which we want to compute the indirect
effect at a specific value of the moderator and as the second argument
the value of the moderator.

In our example, we standardized our moderator. A mean value of the
moderator therefore is `sdo_c = 0`

. If we wanted to compute
the effect of condition on hypodescent through linked fate for a mean
value of SDO, we would have to run the following:

```
compute_indirect_effect_for(moderated_mediation_fit, Mod = 0)
#> - type: Conditional simple mediation index (Mod = 0)
#> - point estimate: 0.0916
#> - confidence interval:
#> - method: Monte Carlo (5000 iterations)
#> - level: 0.05
#> - CI: [0.0416; 0.145]
```

We could also compute this indirect effect for participants who score one standard deviation above the mean in terms of SDO.

```
compute_indirect_effect_for(moderated_mediation_fit, Mod = 1)
#> - type: Conditional simple mediation index (Mod = 1)
#> - point estimate: 0.0286
#> - confidence interval:
#> - method: Monte Carlo (5000 iterations)
#> - level: 0.05
#> - CI: [-0.00671; 0.0747]
```

As we can see, the indirect effect estimate decreases when the SDO increases. This result is consistent with the negative value of the moderated mediation index.

Ho, A. K., Kteily, N. S., & Chen, J. M. (2017).
“You’re one of us”: Black
Americans’ use of hypodescent and its association with
egalitarianism. *Journal of Personality and Social Psychology*,
*113*(5), 753–768. https://doi.org/10.1037/pspi0000107

Muller, D., Judd, C. M., & Yzerbyt, V. Y. (2005). When moderation is
mediated and mediation is moderated. *Journal of Personality and
Social Psychology*, *89*(6), 852–863. https://doi.org/10.1037/0022-3514.89.6.852

Yzerbyt, V., Muller, D., Batailler, C., & Judd, C. M. (2018). New
recommendations for testing indirect effects in mediational models:
The need to report and test component paths. *Journal of
Personality and Social Psychology*, *115*(6), 929–943. https://doi.org/10.1037/pspa0000132