Sample Cases
sample_cases = c(12, 18, 4, 29, 5, 7, 15, 14, 6, 9)
words = c("no_difference", "affect", "enable", "cause")
labels = c("N", "A", "E", "C")
df.plot = df_agg %>%
filter(trial %in% sample_cases) %>%
mutate(trial = factor(trial, levels = sample_cases),
Clip = factor(trial, labels = 1:length(sample_cases)),
response = factor(response,
levels = words,
labels = labels))
df.model = df_top_models %>%
filter(trial %in% sample_cases) %>%
mutate(Model = model,
trial = factor(trial, levels = sample_cases),
Clip = factor(trial, labels = 1:length(sample_cases)),
response = factor(response,
levels = words,
labels = labels),
Model = factor(Model,
levels = c("full", "semantics", "regression"),
labels = c("Full", "No Pragmatics", "No Pragmatics and No Semantics")))
func_load_image = function(clip){
readJPEG(str_c("../../figures/trial_schematics/trial", clip, ".jpeg"))
}
df.clips = df.plot %>%
distinct(trial, Clip) %>%
arrange(Clip) %>%
mutate(grob = map(.x = trial, .f = ~ func_load_image(clip = .x)))
df.text = df.clips %>%
select(Clip) %>%
distinct() %>%
mutate(x = 0.75,
y = 1.73)
ggplot(data = df.plot,
mapping = aes(x = response, y = data_y)) +
geom_bar(stat = "identity",
fill = "lightgray",
color = "black") +
geom_point(data = df.model,
mapping = aes(x = response,
y = model_y,
shape = Model,
fill = Model),
size = 3,
position = position_dodge(0.8),
color = "black") +
geom_errorbar(
mapping = aes(ymin = data_ymin, ymax = data_ymax),
width = 0
) +
geom_custom(data = df.clips,
mapping = aes(data = grob, x = 2.5, y = Inf),
grob_fun = function(x) rasterGrob(x,
interpolate = T,
vjust = 0)) +
geom_text(data = df.text,
mapping = aes(x = x,
y = y,
label = Clip),
hjust = 0,
size = 11,
color = "gray40") +
facet_wrap(~Clip,
nrow = 2,
labeller = "label_both",
scales = "free_x") +
scale_fill_brewer(palette = "Dark2", name="") +
scale_shape_manual(name = "",
values = 21:23) +
scale_y_continuous(breaks = seq(0, 1, 0.25),
labels = str_c(seq(0, 100, 25), "%")) +
labs(y = "Proportion of Responses",
caption = "N: no difference, A: affected, E: enabled, C: caused") +
coord_cartesian(clip = "off",
ylim = c(0, 1)) +
theme(legend.text.align = 0,
panel.grid = element_blank(),
legend.position = "bottom",
axis.title.x = element_blank(),
legend.text = element_text(size = 16),
plot.caption = element_text(size = 16, color = "gray20", hjust = 0.5),
plot.margin = margin(t = 4.5, l = 0.2, r = 0.2, b = 0.1, unit = "cm"),
panel.spacing.y = unit(5, "cm"),
strip.background = element_blank(),
strip.text = element_blank()) +
guides(fill = guide_legend(override.aes = list(size = 6)))
#> Warning: The `legend.text.align` argument of `theme()` is deprecated as of ggplot2
#> 3.5.0.
#> ℹ Please use theme(legend.text = element_text(hjust)) instead.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
#> generated.
ggsave("../../figures/paper_figures/speaker_sample_cases.pdf",
width = 13,
height = 10)

Scatter Plots
best_models_all = left_join(df_top_models, df_agg, by = c("trial", "response"))
df.plot = best_models_all %>%
rename(Model = model) %>%
mutate(Model = factor(Model,
levels = c("full", "semantics", "regression"),
labels = c("Full Model", "No Pragmatics", "No Semantics and No Pragmatics"))) %>%
mutate(response = factor(response,
levels = c("no_difference", "affect", "enable", "cause"),
labels = c("no difference", "affected", "enabled", "caused")))
df.text = df.plot %>%
group_by(Model) %>%
summarise(r = cor(data_y, model_y),
RMSE = sqrt(mean((data_y - model_y)^2))) %>%
ungroup() %>%
pivot_longer(cols = -Model) %>%
mutate_if(is.numeric, ~ round(., 2)) %>%
mutate(data_y = rep(c(0.9, 1), 3),
model_y = 0,
label = str_c(name, " = ", value),
label = ifelse(name == "r",
str_replace(label, "0.", "."),
label))
# "dodgerblue1", "mediumpurple2", "hotpink"
ggplot(data = df.plot,
mapping = aes(x = model_y,
y = data_y)) +
geom_smooth(method = "lm",
se = T,
color = "black",
show.legend = F) +
geom_abline(slope = 1,
intercept = 0,
linetype = 2) +
geom_text(data = df.text,
mapping = aes(label = label),
hjust = 0,
size = 8) +
geom_errorbar(mapping = aes(ymin = data_ymin,
ymax = data_ymax),
alpha = 0.6,
width = 0,
show.legend = FALSE) +
geom_point(mapping = aes(fill = response,
shape = response),
alpha = 1.0,
size = 4) +
facet_grid(cols = vars(Model)) +
scale_shape_manual(values = 21:24) +
scale_fill_manual(values = c("slategray2", rgb(41/255, 99/255, 152/255), rgb(209/255, 144/255, 50/255), rgb(54/255, 122/255, 93/255))) +
scale_x_continuous(breaks = seq(0,1,0.25),
labels = c("0%", "25%", "50%", "75%", "100%")) +
scale_y_continuous(breaks = seq(0,1,0.25),
labels = c("0%", "25%", "50%", "75%", "100%")) +
labs(x = "Model Prediction",
y = "Proportion of Responses") +
theme(legend.position = c(0.28, 0.2),
# axis.title.x = element_text(hjust = 0.12),
panel.spacing.x = unit(1, "cm"),
legend.text = element_text(size = 14),
legend.title = element_text(size=14),
strip.text = element_text(size = 24),
legend.box.background = element_rect(color = "black",
linewidth = 1.5)) +
guides(fill = guide_legend(title = "response: "),
shape = guide_legend(title = "response: "))
#> `geom_smooth()` using formula = 'y ~ x'
ggsave("../../figures/paper_figures/speaker_scatter.pdf",
width = 20,
height = 6.5)
#> `geom_smooth()` using formula = 'y ~ x'

sample_cases = c(16, 25)
words = c("no_difference", "affect", "enable", "cause")
labels = c("N", "A", "E", "C")
df.plot = df_agg %>%
filter(trial %in% sample_cases) %>%
mutate(trial = factor(trial, levels = sample_cases),
Clip = factor(trial, labels = 1:length(sample_cases)),
response = factor(response,
levels = words,
labels = labels))
df_alt_models = tibble(trial = c(16, 16, 16, 16,
25, 25, 25, 25,
16, 16, 16, 16,
25, 25, 25, 25),
response = c("cause", "enable", "affect", "no_difference",
"cause", "enable", "affect", "no_difference",
"cause", "enable", "affect", "no_difference",
"cause", "enable", "affect", "no_difference"),
model_y = c(0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0),
model = c("Mental Models", "Mental Models", "Mental Models", "Mental Models",
"Mental Models", "Mental Models", "Mental Models", "Mental Models",
"Causal Models", "Causal Models", "Causal Models", "Causal Models",
"Causal Models", "Causal Models", "Causal Models", "Causal Models"))
df.model = df_top_models %>%
filter(trial %in% sample_cases,
model == "full") %>%
rbind(df_alt_models) %>%
mutate(Model = model,
trial = factor(trial, levels = sample_cases),
Clip = factor(trial, labels = 1:length(sample_cases)),
response = factor(response,
levels = words,
labels = labels),
Model = factor(Model,
levels = c("full", "Mental Models", "Causal Models"),
labels = c("CSM", "Mental Models", "Causal Models")))
func_load_image = function(clip){
readJPEG(str_c("../../figures/trial_schematics/trial", clip, ".jpeg"))
}
df.clips = df.plot %>%
distinct(trial, Clip) %>%
arrange(Clip) %>%
mutate(grob = map(.x = trial, .f = ~ func_load_image(clip = .x)))
df.text = df.clips %>%
select(Clip) %>%
distinct() %>%
mutate(x = 0.75,
y = 1.93)
ggplot(data = df.plot,
mapping = aes(x = response, y = data_y)) +
geom_bar(stat = "identity",
fill = "lightgray",
color = "black") +
geom_errorbar(
mapping = aes(ymin = data_ymin, ymax = data_ymax),
width = 0
) +
geom_point(data = df.model,
mapping = aes(x = response,
y = model_y,
shape = Model,
fill = Model),
size = 3,
position = position_dodge(0.8),
color = "black") +
geom_custom(data = df.clips,
mapping = aes(data = grob, x = 2.5, y = Inf),
grob_fun = function(x) rasterGrob(x,
interpolate = T,
vjust = 0)) +
# geom_text(data = df.text,
# mapping = aes(x = x,
# y = y,
# label = Clip),
# hjust = 0,
# size = 11,
# color = "gray40") +
facet_wrap(~Clip,
nrow = 1,
labeller = "label_both",
scales = "free_x") +
scale_fill_brewer(palette = "Dark2", name="") +
scale_shape_manual(name = "",
values = 21:23) +
scale_y_continuous(breaks = seq(0, 1, 0.25),
labels = str_c(seq(0, 100, 25), "%")) +
labs(y = "Proportion of Responses",
caption = "N: no difference, A: affected, E: enabled, C: caused") +
coord_cartesian(clip = "off",
ylim = c(0, 1)) +
theme(legend.text.align = 0,
panel.grid = element_blank(),
legend.position = "bottom",
axis.title.x = element_blank(),
legend.text = element_text(size = 16),
plot.caption = element_text(size = 16, color = "gray20", hjust = 0.5),
plot.margin = margin(t = 6, l = 0.2, r = 0.2, b = 0.1, unit = "cm"),
panel.spacing.x = unit(2, "cm"),
panel.spacing.y = unit(5, "cm"),
strip.background = element_blank(),
strip.text = element_blank()) +
guides(fill = guide_legend(override.aes = list(size = 6)))
ggsave("../../figures/paper_figures/causal_model_comp_cases.pdf",
width = 8,
height = 6)
