posterior <- fit$draws() |>
recover_types(df) |>
spread_draws(alpha[n], bA, bI, bC) |>
pivot_wider(names_from = n, names_prefix = "alpha_", values_from = alpha)
prediction_grid <- expand_grid(
action = c(0, 1),
intention = c(0, 1),
contact = c(0, 1)
)
predictions <- posterior |>
crossing(prediction_grid) |>
mutate(
phi = bA * action + bI * intention + bC * contact,
p1 = plogis(alpha_1 - phi),
p2 = plogis(alpha_2 - phi) - plogis(alpha_1 - phi),
p3 = plogis(alpha_3 - phi) - plogis(alpha_2 - phi),
p4 = plogis(alpha_4 - phi) - plogis(alpha_3 - phi),
p5 = plogis(alpha_5 - phi) - plogis(alpha_4 - phi),
p6 = plogis(alpha_6 - phi) - plogis(alpha_5 - phi),
p7 = 1 - plogis(alpha_6 - phi)
) |>
select(-c(phi)) |>
pivot_longer(
starts_with("p"),
names_to = "cat",
values_to = "prob"
) |>
mutate(category = readr::parse_number(cat))
prediction_summary <- predictions |>
group_by(action, intention, contact, category) |>
summarise(
mean_prob = mean(prob),
lower = quantile(prob, 0.1),
upper = quantile(prob, 0.9),
.groups = "drop"
) |>
mutate(
combo = paste0(action, ",", intention, ",", contact) |>
as_factor() |>
fct_relevel(
"0,0,0",
"1,0,0",
"0,1,0",
"0,0,1",
"1,1,0",
"1,0,1",
"0,1,1",
"1,1,1"
)
)
prediction_summary |>
filter(action + intention + contact <= 1) |>
ggplot(
aes(x = factor(category), y = mean_prob, ymin = lower, ymax = upper),
) +
geom_col(width = 0.4, fill = "lightblue", color = "royalblue") +
geom_errorbar(width = 0.2, alpha = 0.5) +
facet_wrap(~combo, nrow = 2) +
labs(x = "Action, Intention, Contact", y = NULL)