## 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.