## 11.5 Quantifying and visualizing (conditional) indirect and direct effects.

#### 11.5.0.1 The conditional indirect effect of \(X\).

Here’s how to get the posterior summaries corresponding to the last two columns in Table 11.2.

```
post <-
posterior_samples(model1) %>%
mutate(`Conditional effect of M when W is -0.531` = b_perform_negtone + `b_perform_negtone:negexp`*-0.531,
`Conditional effect of M when W is -0.006` = b_perform_negtone + `b_perform_negtone:negexp`*-0.060,
`Conditional effect of M when W is 0.600` = b_perform_negtone + `b_perform_negtone:negexp`*0.600,
`Conditional indirect effect when W is -0.531` = b_negtone_dysfunc*(b_perform_negtone + `b_perform_negtone:negexp`*-0.531),
`Conditional indirect effect when W is -0.006` = b_negtone_dysfunc*(b_perform_negtone + `b_perform_negtone:negexp`*-0.060),
`Conditional indirect effect when W is 0.600` = b_negtone_dysfunc*(b_perform_negtone + `b_perform_negtone:negexp`*0.600))
post %>%
select(starts_with("Conditional")) %>%
gather() %>%
mutate(key = factor(key, levels = c("Conditional effect of M when W is -0.531",
"Conditional effect of M when W is -0.006",
"Conditional effect of M when W is 0.600",
"Conditional indirect effect when W is -0.531",
"Conditional indirect effect when W is -0.006",
"Conditional indirect effect when W is 0.600"))) %>%
group_by(key) %>%
summarize(mean = mean(value),
sd = sd(value),
ll = quantile(value, probs = .025),
ul = quantile(value, probs = .975)) %>%
mutate_if(is.double, round, digits = 3)
```

```
## # A tibble: 6 x 5
## key mean sd ll ul
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 Conditional effect of M when W is -0.531 -0.168 0.212 -0.573 0.26
## 2 Conditional effect of M when W is -0.006 -0.409 0.139 -0.687 -0.14
## 3 Conditional effect of M when W is 0.600 -0.747 0.169 -1.08 -0.429
## 4 Conditional indirect effect when W is -0.531 -0.104 0.141 -0.407 0.165
## 5 Conditional indirect effect when W is -0.006 -0.254 0.114 -0.51 -0.066
## 6 Conditional indirect effect when W is 0.600 -0.464 0.167 -0.824 -0.177
```

#### 11.5.0.2 The direct effect.

The direct effect for his model is `b_perform_dysfunc`

in brms. Here’s how to get its summary values from `posterior_summary()`

.

`posterior_summary(model1)["b_perform_dysfunc", ] %>% round(digits = 3)`

```
## Estimate Est.Error Q2.5 Q97.5
## 0.369 0.184 0.006 0.730
```

### 11.5.1 Visualizing the direct and indirect effects.

For Figure 11.7 we’ll use the first 400 HMC iterations.

```
post <-
post %>%
mutate(`-0.7` = b_negtone_dysfunc*(b_perform_negtone + `b_perform_negtone:negexp`*-0.7),
`0.7` = b_negtone_dysfunc*(b_perform_negtone + `b_perform_negtone:negexp`*0.7))
post %>%
select(b_perform_dysfunc, `-0.7`:`0.7`) %>%
gather(key, value, -b_perform_dysfunc) %>%
mutate(negexp = key %>% as.double(),
iter = rep(1:4000, times = 2)) %>%
filter(iter < 401) %>%
ggplot(aes(x = negexp, group = iter)) +
geom_hline(aes(yintercept = b_perform_dysfunc),
color = "skyblue3",
size = .3, alpha = .3) +
geom_line(aes(y = value),
color = "skyblue3",
size = .3, alpha = .3) +
coord_cartesian(xlim = c(-.5, .6),
ylim = c(-1.25, .75)) +
labs(x = expression(paste("Nonverbal Negative Expressivity (", italic(W), ")")),
y = "Effect of Dysfunctional Behavior on Team Performance") +
theme_bw() +
theme(panel.grid = element_blank())
```

Since the `b_perform_dysfunc`

values are constant across \(W\), the individual HMC iterations end up perfectly parallel in the spaghetti plot. This is an example of a visualization I’d avoid making with a spaghetti plot for a professional presentation. But hopefully it has some pedagogical value, here.