This final part of the analysis directly addresses our main research questions and also auxiliary questions.
The study has three dependent variables.
We will analyze and interpret our results using estimation statistics. See:
All effects in this section are estimated using BCa bootstrap confidence intervals. These provide good interval estimates without distributional assumptions for sample sizes of about 20 or more (our sample sizes are 196, Nap
, N_nr
, and 188). See Kirby, K. N., & Gerlanc, D. (2013). BootES: An R package for bootstrap confidence intervals on effect sizes. Behavior research methods, 45(4), 905-927.
Since we identify a single primary outcome in this analysis, no adjustment for multiplicitiy is required. We will interpret results for the other outcomes as tentative and exploratory, especially concerning the auxiliary outcomes.
Secondary outcomes
- effect 2a = Difference between DV1 in rich+anonymized conditions and DV1 in poor+anonymized conditions.
- Unit: difference. Range: -100, 100.
- Role: used to answer the research question 2
# DV1 in anonymized+Rich conditions
DV1_ar = data %>%
dplyr::filter(condition == "Anonymous_Rich") %>%
dplyr::pull(donation)
# DV1 in anonymized+Poor conditions
DV1_ap = data %>%
dplyr::filter(condition == "Anonymous_Poor") %>%
dplyr::pull(donation)
# Set random seed for bootstrapping
set.seed(0)
# Calculate the confidence intervals and the difference
bs_dv1_ar = meanCI.bootstrap(DV1_ar)
bs_dv1_ap = meanCI.bootstrap(DV1_ap)
effect2a = diffMeanCI.bootstrap(DV1_ar, DV1_ap)
cat("Effect 2a =", formatCI(effect2a))
## Effect 2a = 4.6, 95% CI [-0.16, 9.5]
- effect 2b = Difference between DV1 in rich+named conditions and DV1 in poor+named conditions + 95% CI
- Unit: difference. Range: -100, 100.
- Role: used to answer the research question 2
# DV1 in non-anonymized+Rich conditions
DV1_nr = data %>%
dplyr::filter(condition == "Named_Rich") %>%
dplyr::pull(donation)
# DV1 in non-anonymized+Poor conditions
DV1_np = data %>%
dplyr::filter(condition == "Named_Poor") %>%
dplyr::pull(donation)
# Set random seed for bootstrapping
set.seed(0)
# Calculate the confidence intervals and the difference
bs_dv1_nr = meanCI.bootstrap(DV1_nr)
bs_dv1_np = meanCI.bootstrap(DV1_np)
effect2b = diffMeanCI.bootstrap(DV1_nr, DV1_np)
cat("Effect 2b =", formatCI(effect2b))
## Effect 2b = 2.2, 95% CI [-2.7, 7.1]
- effect 2c = Interaction + 95% CI
- Unit: difference between effect2a and effect2b. Range: -200, 200.
- Role: used to answer the research question 2
# Set random seed for bootstrapping
set.seed(0)
# Calculate the difference in differences of the previous effects
effect2c = interaction.bootstrap(DV1_ar, DV1_ap, DV1_nr, DV1_np)
cat("Effect 2c =", formatCI(effect2c))
## Effect 2c = 2.4, 95% CI [-4.7, 9.5]
xDiffMin = min(effect2a$ci_lower, effect2b$ci_lower, -5)
xDiffMax = max(effect2a$ci_upper, effect2b$ci_upper, 5)
yhistoMax = max(
max(hist(DV1_ar, plot = F)$counts),
max(hist(DV1_ap, plot = F)$counts),
max(hist(DV1_nr, plot = F)$counts),
max(hist(DV1_np, plot = F)$counts)
)
ciMinTheme = theme(
axis.text.y = element_text(hjust = -4, color = "gray50"),
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank()
)
e2p1 = rbind(bs_dv1_ar %>% mutate(group = "Rich"),
bs_dv1_ap %>% mutate(group = "Poor")) %>%
plot_cis(xmin = 0, xmax = 100) +
scale_x_discrete(expand = c(0.2, 0.2)) +
ciMinTheme
e2p1p = DV1_ap %>% histo(x.min = 0, x.max = 100, y.max = yhistoMax, labels = F)
e2p1r = DV1_ar %>% histo(x.min = 0, x.max = 100, y.max = yhistoMax, labels = F)
e2don_a = combine_cis_with_histograms(e2p1, e2p1p, e2p1r)
# Plot of the difference
e2p2 = effect2a %>%
mutate(group = "") %>%
plot_cis(xmin = xDiffMin, xmax = xDiffMax) +
geom_hline(yintercept = 0) +
ciMinTheme
# Plot of donations
e2p3 = rbind(
bs_dv1_nr %>% mutate(group = "Rich"),
bs_dv1_np %>% mutate(group = "Poor")
) %>% plot_cis(xmin = 0, xmax = 100) + scale_x_discrete(expand = c(0.2,0.2)) + ciMinTheme
e2p3p = DV1_np %>% histo(x.min = 0, x.max = 100, y.max = yhistoMax, labels = F)
e2p3r = DV1_nr %>% histo(x.min = 0, x.max = 100, y.max = yhistoMax, labels = F)
e2don_n = combine_cis_with_histograms(e2p3, e2p3p, e2p3r)
# Plot of the difference
e2p4 = effect2b %>%
mutate(group = "") %>%
plot_cis( xmin = xDiffMin, xmax = xDiffMax) +
geom_hline(yintercept = 0) + ciMinTheme
# Concatenate the plots
# plot_grid(p3, p4, rel_widths = c(1.5, 1))
# Plot of the interaction effect
e2p5 = effect2c %>%
mutate(group = "") %>%
plot_cis() +
geom_hline(yintercept = 0) + ciMinTheme
# Positioning variables
x_label0 = 0.085
x_label1 = 0.14
x_vis1 = 0.12
w_vis1 = 0.29
h_histo = 0.2
x_bracket1 = 0.41
x_label2 = 0.44
x_vis2 = 0.53
w_vis2 = 0.22
x_bracket2 = 0.75
x_label3 = 0.9
x_vis3 = 0.77
w_vis3 = 0.195
peffect2 = ggdraw() +
draw_label("Anonymous\nregions", x_label0, 0.75,hjust = 1, vjust = 0.5, size = 9, color = "gray50") +
draw_label("Named\nregions", x_label0, 0.25, hjust = 1, vjust = 0.5, size = 9, color = "gray50") +
# draw the CI and histogram for the donation allocation
# ## anonymized regions
draw_label("Donation allocation", x = x_vis1 + w_vis1/2, y = 1, hjust = 0.5, vjust = 1, color = "gray30") +
draw_plot(e2don_a, x = x_vis1, y = 0.5, height = 0.5, width = w_vis1) +
# ## actual regions
draw_plot(e2don_n, x = x_vis1, y = 0, width = w_vis1, height = 0.5) +
# draw the two brackets to lead to the differences
draw_line(x = c(x_bracket1, x_bracket1+0.01, x_bracket1+0.01, x_bracket1+0.02, x_bracket1+0.01, x_bracket1+0.01, x_bracket1),
y = c(0.88, 0.88, 0.745, 0.745, 0.745, 0.61, 0.61), color = "gray50") +
draw_line(x = c(x_bracket1, x_bracket1+0.01, x_bracket1+0.01, x_bracket1+0.02, x_bracket1+0.01, x_bracket1+0.01, x_bracket1),
y = c(0.37, 0.37, 0.225, 0.225, 0.225, 0.11, 0.11), color = "gray50") +
# the difference between vis
draw_label("Mean difference", x = x_vis2, y = 1, hjust = -0.8, vjust = 1, color = "gray30") +
# ## for anonymized regions
draw_label("Rich - Poor", x = x_label2, y = 0.75, hjust = 0, size = 9, color = "gray50") +
draw_plot(e2p2, x = x_vis2, y = 0.59, width = w_vis2, height = 0.4) +
# ## for actual regions
draw_label("Rich - Poor", x = x_label2, y = 0.23, hjust = 0, size = 9, color = "gray50") +
draw_plot(e2p4, x = x_vis2, y = 0.07, width = w_vis2, height = 0.4) +
# draw the bracket leading to the interaction
draw_line(x=c(x_bracket2, x_bracket2+0.01, x_bracket2+0.01, x_bracket2+0.02, x_bracket2+0.01, x_bracket2+0.01, x_bracket2), y=c(0.75, 0.75, 0.5, 0.5, 0.5, 0.23, 0.23), color = "gray50") +
# the interaction
draw_label("Interaction", x_label3, 1, hjust = 1.3, vjust = 1, color = "gray30") +
draw_plot(e2p5, x = x_vis3, y = 0.34, width = w_vis3, height = 0.4)
peffect2
ggsave(filename = "../../paper-figures/exp2-effect2.pdf", dpi = 300, width = 11, height = 3)
- effect 3a = Difference between DV2v in rich conditions (both anonymous and named) and DV2v in poor conditions (both anonymous and named) + 95% CI
- Unit: difference. Range: -1, 1.
- Role: used to answer the research question 3
# DV2v in Rich conditions
DV2v_r = data %>%
dplyr::filter(design == "Rich") %>%
dplyr::pull(valence)
# DV2v in non-anonymized+Poor conditions
DV2v_p = data %>%
dplyr::filter(design == "Poor") %>%
dplyr::pull(valence)
# Set random seed for bootstrapping
set.seed(0)
# Calculate the confidence intervals and the difference
bs_dv2v_r = meanCI.bootstrap(DV2v_r)
bs_dv2v_p = meanCI.bootstrap(DV2v_p)
effect3a = diffMeanCI.bootstrap(DV2v_r, DV2v_p)
cat("Effect 3a =", formatCI(effect3a))
## Effect 3a = -0.059, 95% CI [-0.088, -0.031]
- effect 3b = Difference between DV2a in rich conditions (both anonymous and named) and DV2b in poor conditions (both anonymous and named) + 95% CI
- Unit: difference. Range: -1, 1.
- Role: used to answer the research question 3
# DV2a in Rich conditions
DV2a_r = data %>%
dplyr::filter(design == "Rich") %>%
dplyr::pull(arousal)
# DV2v in non-anonymized+Poor conditions
DV2a_p = data %>%
dplyr::filter(design == "Poor") %>%
dplyr::pull(arousal)
# Set random seed for bootstrapping
set.seed(0)
# Calculate the confidence intervals and the difference
bs_dv2a_r = meanCI.bootstrap(DV2a_r)
bs_dv2a_p = meanCI.bootstrap(DV2a_p)
effect3b = diffMeanCI.bootstrap(DV2a_r, DV2a_p)
cat("Effect 3b =", formatCI(effect3b))
## Effect 3b = -0.015, 95% CI [-0.058, 0.025]
xmin = min (bs_dv2a_r$ci_lower, bs_dv2a_p$ci_lower, bs_dv2v_r$ci_lower, bs_dv2v_p$ci_lower)
xmax = max(bs_dv2a_r$ci_upper, bs_dv2a_p$ci_upper, bs_dv2v_r$ci_upper, bs_dv2v_p$ci_upper)
y3histoMax = max(
max(hist(DV2a_r, plot = F)$counts),
max(hist(DV2a_p, plot = F)$counts),
max(hist(DV2v_r, plot = F)$counts),
max(hist(DV2v_p, plot = F)$counts)
)
x_diffMin = min(effect3a$ci_lower, effect3b$ci_lower)
x_diffMax = max(effect3a$ci_upper, effect3b$ci_upper)
p1 = rbind(
bs_dv2v_r %>% mutate(group = "Rich"),
bs_dv2v_p %>% mutate(group = "Poor")
) %>% plot_cis(xmin = 0, xmax = 1) + scale_x_discrete(expand = c(0.3,0.3)) + ciMinTheme
p1p = DV2v_p %>% histo(x.min = 0, x.max = 1, step.width = 0.01, y.max = y3histoMax, labels = F)
p1r = DV2v_r %>% histo(x.min = 0, x.max = 1, step.width = 0.01, y.max = y3histoMax, labels = F)
e3don_arousal = combine_cis_with_histograms(p1, p1p, p1r)
e3don_arousal = ggdraw() +
draw_plot(e3don_arousal, x = 0.2, width = 0.8)
# Plot of the effect
p2 = effect3a %>%
mutate(group = "") %>%
plot_cis(xmin = x_diffMin, xmax = x_diffMax) +
geom_hline(yintercept = 0)
p3 = rbind(
bs_dv2a_r %>% mutate(group = "Rich"),
bs_dv2a_p %>% mutate(group = "Poor")
) %>% plot_cis(xmin = 0, xmax = 1) + scale_x_discrete(expand = c(0.3,0.3)) + ciMinTheme
p3p = DV2a_p %>% histo(x.min = 0, x.max = 1, step.width = 0.01, y.max = y3histoMax, labels = F)
p3r = DV2a_r %>% histo(x.min = 0, x.max = 1, step.width = 0.01, y.max = y3histoMax, labels = F)
e3don_valence = combine_cis_with_histograms(p3, p3p, p3r)
e3don_valence = ggdraw() +
draw_plot(e3don_valence, x = 0.2, width = 0.8)
# Plot of the effect
p4 = effect3b %>%
mutate(group = "") %>%
plot_cis(xmin = x_diffMin, xmax = x_diffMax) +
geom_hline(yintercept = 0)
# Concatenate the plots
peffect3 = plot_grid(e3don_arousal, p2, e3don_valence, p4, rel_widths = c(1.5, 1), rel_heights = c(0.5, 0.5), labels = c("Valence", "Difference between designs", "Arousal", "Difference between designs"), hjust = c(-0.5, -0.2, -0.5, -0.2), label_size = 12)
peffect3
ggsave(filename = "../../paper-figures/exp2-effect3.pdf", dpi = 300, width = 10)
Auxiliary outcomes
Auxiliary outcome 1
We compute correlations between the two dependent variables for the factor of interest, level of information-richness. Since DV2, affect, consists of two dimensions, we compute four correlations in total.
We use Kendall’s Tau as the correlation coefficient because it is more sensitive to non-linear relationships, more robust to outliers, and commonly used in the presence of many tied observations (our formative experiment suggested that 0, 50 and 100 will be common answers).
- auxiliary outcome 1a = Kendall Correlation coefficient + 95% CI between donation allocation and valence in rich conditions
- Unit: range: -1, 1.
- Role: used to answer the auxiliary question 1 regarding valence.
aux1a_data = data %>%
dplyr::filter(condition %in% c("Anonymous_Rich", "Named_Rich")) %>%
dplyr::select(donation, valence)
cat("Auxiliary outcome 1a:", formatCI(kendall.corCI.bootstrap(aux1a_data$donation, aux1a_data$valence)))
## Auxiliary outcome 1a: -0.16, 95% CI [-0.23, -0.086]
- auxiliary outcome 1b = Kendall Correlation coefficient + 95% CI between donation allocation and arousal in rich conditions
- Unit: range: -1, 1.
- Role: used to answer the auxiliary question 1 regarding arousal.
aux1b_data = data %>%
dplyr::filter(condition %in% c("Anonymous_Rich", "Named_Rich")) %>%
dplyr::select(donation, arousal)
cat("Auxiliary outcome 1b:", formatCI(kendall.corCI.bootstrap(aux1b_data$donation, aux1b_data$arousal)))
## Auxiliary outcome 1b: 0.045, 95% CI [-0.024, 0.11]
- auxiliary outcome 1c = Kendall Correlation coefficient + 95% CI between donation allocation and valence in poor conditions
- Unit: range: -1, 1.
- Role: used to answer the auxiliary question 1 regarding valence
aux1c_data = data %>%
dplyr::filter(condition %in% c("Anonymous_Poor", "Named_Poor")) %>%
dplyr::select(donation, valence)
cat("Auxiliary outcome 1c:", formatCI(kendall.corCI.bootstrap(aux1c_data$donation, aux1c_data$valence)))
## Auxiliary outcome 1c: -0.087, 95% CI [-0.16, -0.021]
- auxiliary outcome 1d = Kendall Correlation coefficient + 95% CI between donation allocation and arousal in poor conditions
- Unit: range: -1, 1.
- Role: used to answer the auxiliary question 1 regarding arousal
aux1d_data = data %>%
dplyr::filter(condition %in% c("Anonymous_Poor", "Named_Poor")) %>%
dplyr::select(donation, arousal)
cat("Auxiliary outcome 1d:", formatCI(kendall.corCI.bootstrap(aux1d_data$donation, aux1d_data$arousal)))
## Auxiliary outcome 1d: -0.011, 95% CI [-0.082, 0.064]
pvr = ggplot(aux1a_data, aes(x=donation, y=valence)) + geom_point() + theme_minimal() + lims(x=c(0,100), y = c(0, 1))
par = ggplot(aux1b_data, aes(x=donation, y=arousal)) + geom_point() + theme_minimal() + lims(x=c(0,100), y = c(0, 1))
pvp = ggplot(aux1c_data, aes(x=donation, y=valence)) + geom_point() + theme_minimal() + lims(x=c(0,100), y = c(0, 1))
pap = ggplot(aux1d_data, aes(x=donation, y=arousal)) + geom_point() + theme_minimal() + lims(x=c(0,100), y = c(0, 1))
plot_grid(pvr, pvp, par, pap, labels = c("Rich", "Poor", "", ""), vjust = 1, hjust = -2.8)
Auxiliary outcome 2
As a second auxiliary outcome, we compute the main effect of anonymization.
- auxiliary outcome 2 = Main effect of anonymization. Difference between DV1 in anonymous conditions (both rich and poor) and DV1 in named conditions (both rich and poor). 95% CI
- Unit: Difference. Range: -100, 100.
- Role: used to answer the auxiliary question 2.
DV1_a = rbind(DV1_ar, DV1_ap)
DV1_n = rbind(DV1_nr, DV1_np)
cat("Auxiliary outcome 2:", formatCI(diffMeanCI.bootstrap(DV1_a, DV1_n)))
## Auxiliary outcome 2: 0.14, 95% CI [-3.3, 3.5]