main manuscript analyses
These analyses are reported in the main manuscript.
descriptives
Generate study descriptives.
= merged %>%
data_desc select(-contains("within"), -contains("between"), -msg_share_std) %>%
group_by(SID, sharing_type) %>%
mutate(msg_rel_self_between = mean(msg_rel_self, na.rm = TRUE),
msg_rel_social_between = mean(msg_rel_social, na.rm = TRUE),
sharing_type = ifelse(sharing_type == 0, "broadcast sharing intention",
ifelse(sharing_type == 1, "narrowcast sharing intention", NA))) %>%
spread(sharing_type, msg_share)
participant Ns
%>%
merged ungroup() %>%
select(study, SID) %>%
unique() %>%
group_by(study) %>%
summarize(n = n()) %>%
kable(format = "pandoc")
study | n |
---|---|
study 1 | 2081 |
study 2 | 547 |
study 3 | 248 |
study 4 | 139 |
study 5 | 315 |
study 6 | 397 |
means, SDs, and correlations
Correlations are generated using repeated measures correlations to account for observations nested within participant.
# means
= data_desc %>%
means gather(variable, val, contains("cast"), contains("rel"), -contains("between")) %>%
group_by(study, variable) %>%
summarize(`M (SD)` = sprintf("%s (%s)", round(mean(val, na.rm = TRUE), 2), round(sd(val, na.rm = TRUE), 2))) %>%
mutate(`scale range` = ifelse(grepl("1", study), "1-7",
ifelse(grepl("4", study), "0-10", "0-100"))) %>%
filter(!grepl("NaN", `M (SD)`)) %>%
select(study, `scale range`, contains("rel"), everything()) %>%
mutate(variable = ifelse(variable == "msg_rel_self", "self-relevance",
ifelse(variable == "msg_rel_social", "social relevance", variable)))
# correlations with broadcasting intentions
= data_desc %>%
corrs_broad nest(-c(study)) %>%
mutate(self_social = map(data, ~ rmcorr::rmcorr(as.factor(SID), msg_rel_self, msg_rel_social, .)),
self_broad = map(data, ~ rmcorr::rmcorr(as.factor(SID), msg_rel_self, `broadcast sharing intention`, .)),
social_broad = map(data, ~ rmcorr::rmcorr(as.factor(SID), msg_rel_social, `broadcast sharing intention`, .))) %>%
select(-data)
# correlations with narrowcasting intentions
= data_desc %>%
corrs_narrow nest(-study) %>%
filter(grepl("3|5|6", study)) %>%
mutate(self_narrow = map(data, ~ rmcorr::rmcorr(as.factor(SID), msg_rel_self, `narrowcast sharing intention`, .)),
social_narrow = map(data, ~ rmcorr::rmcorr(as.factor(SID), msg_rel_social, `narrowcast sharing intention`, .)),
broad_narrow = map(data, ~ rmcorr::rmcorr(as.factor(SID), `broadcast sharing intention`, `narrowcast sharing intention`, .))) %>%
select(-data)
# broadcasting table
= corrs_broad %>%
broad gather(test, model, contains("self"), contains("social")) %>%
group_by(study, test) %>%
filter(!is.null(model)) %>%
mutate(r = sprintf("%.2f [%.2f, %.2f]", model[[1]][[1]], model[[1]][[4]][1], model[[1]][[4]][2]),
df = model[[1]][[2]],
p = round(model[[1]][[3]], 3),
p = ifelse(p == 0, "< .001", as.character(p))) %>%
ungroup() %>%
select(study, test, r) %>%
extract(test, c("var1", "var2"), "(.*)_(.*)") %>%
spread(var2, r) %>%
select(study, var1, everything())
# narrowcasting table
= corrs_narrow %>%
narrow gather(test, model, contains("self"), contains("social"), contains("broad")) %>%
group_by(study, test) %>%
filter(!is.null(model)) %>%
mutate(r = sprintf("%.2f [%.2f, %.2f]", model[[1]][[1]], model[[1]][[4]][1], model[[1]][[4]][2]),
df = model[[1]][[2]],
p = round(model[[1]][[3]], 3),
p = ifelse(p == 0, "< .001", as.character(p))) %>%
ungroup() %>%
select(study, test, r) %>%
extract(test, c("var1", "var2"), "(.*)_(.*)") %>%
spread(var2, r) %>%
select(study, var1, everything())
# combined table
= broad %>%
corrs bind_rows(., narrow) %>%
group_by(study, var1) %>%
fill(everything(), .direction = "updown") %>%
unique() %>%
mutate_if(is.character, ~ ifelse(is.na(.), "--", .)) %>%
mutate(var1 = ifelse(var1 == "social", "social relevance",
ifelse(var1 == "self", "self-relevance",
ifelse(var1 == "broad", "broadcast sharing intention", "narrowcast sharing intention"))),
`self-relevance` = "--") %>%
rename("variable" = var1,
"broadcast sharing intention" = broad,
"narrowcast sharing intention" = narrow,
"social relevance" = social) %>%
select(study, variable, `broadcast sharing intention`, `self-relevance`, `social relevance`, `narrowcast sharing intention`)
# merge descriptors and correlations to generate manuscript table
%>%
means left_join(., corrs)%>%
mutate_if(is.character, ~ ifelse(is.na(.), "--", .)) %>%
kable(format = "pandoc")
study | scale range | variable | M (SD) | broadcast sharing intention | self-relevance | social relevance | narrowcast sharing intention |
---|---|---|---|---|---|---|---|
study 1 | 1-7 | broadcast sharing intention | 4.45 (2.03) | – | – | – | – |
study 1 | 1-7 | self-relevance | 5.42 (1.54) | 0.45 [0.43, 0.47] | – | 0.66 [0.65, 0.67] | – |
study 1 | 1-7 | social relevance | 5.68 (1.37) | 0.45 [0.43, 0.46] | – | – | – |
study 2 | 0-100 | broadcast sharing intention | 49.24 (35.85) | – | – | – | – |
study 2 | 0-100 | self-relevance | 63.03 (30.67) | 0.31 [0.27, 0.34] | – | 0.60 [0.58, 0.63] | – |
study 2 | 0-100 | social relevance | 69.22 (26.27) | 0.31 [0.27, 0.35] | – | – | – |
study 3 | 0-100 | broadcast sharing intention | 43.64 (33.33) | – | – | – | 0.68 [0.64, 0.71] |
study 3 | 0-100 | self-relevance | 69.37 (27.1) | 0.36 [0.30, 0.41] | – | 0.69 [0.65, 0.72] | 0.40 [0.35, 0.45] |
study 3 | 0-100 | social relevance | 76.7 (21.7) | 0.35 [0.29, 0.40] | – | – | 0.43 [0.37, 0.48] |
study 3 | 0-100 | narrowcast sharing intention | 48.39 (33.53) | – | – | – | – |
study 4 | 0-10 | broadcast sharing intention | 3.75 (3.42) | – | – | – | – |
study 4 | 0-10 | self-relevance | 4.12 (3.38) | 0.64 [0.61, 0.68] | – | 0.55 [0.50, 0.59] | – |
study 4 | 0-10 | social relevance | 5.76 (2.65) | 0.59 [0.55, 0.63] | – | – | – |
study 5 | 0-100 | broadcast sharing intention | 49.82 (32.33) | – | – | – | 0.67 [0.65, 0.69] |
study 5 | 0-100 | self-relevance | 56.8 (29.81) | 0.52 [0.50, 0.55] | – | 0.71 [0.70, 0.73] | 0.48 [0.45, 0.51] |
study 5 | 0-100 | social relevance | 61.53 (27.92) | 0.46 [0.43, 0.49] | – | – | 0.53 [0.50, 0.55] |
study 5 | 0-100 | narrowcast sharing intention | 50.25 (32.11) | – | – | – | – |
study 6 | 0-100 | broadcast sharing intention | 47.19 (34.56) | – | – | – | 0.59 [0.57, 0.61] |
study 6 | 0-100 | self-relevance | 57.26 (32.23) | 0.49 [0.46, 0.51] | – | 0.67 [0.65, 0.69] | 0.48 [0.45, 0.50] |
study 6 | 0-100 | social relevance | 62.82 (29.62) | 0.47 [0.44, 0.49] | – | – | 0.57 [0.55, 0.60] |
study 6 | 0-100 | narrowcast sharing intention | 48.75 (33.53) | – | – | – | – |
messages
%>%
merged ungroup() %>%
select(item) %>%
unique() %>%
summarize(n = n()) %>%
kable(format = "pandoc")
n |
---|
362 |
mega-analysis
run model
= lmerTest::lmer(msg_share_std ~ 0 + msg_rel_self_between*sharing_type +
model_compare *sharing_type +
msg_rel_self_within*sharing_type +
msg_rel_social_between*sharing_type +
msg_rel_social_within1 + msg_rel_self_within + msg_rel_social_within | SID) +
(1 + msg_rel_self_within + msg_rel_social_within | item),
(data = merged,
control = lmerControl(optimizer = "bobyqa"))
summary(model_compare)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula:
## msg_share_std ~ 0 + msg_rel_self_between * sharing_type + msg_rel_self_within *
## sharing_type + msg_rel_social_between * sharing_type + msg_rel_social_within *
## sharing_type + (1 + msg_rel_self_within + msg_rel_social_within |
## SID) + (1 + msg_rel_self_within + msg_rel_social_within | item)
## Data: merged
## Control: lmerControl(optimizer = "bobyqa")
##
## REML criterion at convergence: 53677.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -5.0640 -0.4375 0.0096 0.4480 5.6898
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## SID (Intercept) 0.405874 0.63708
## msg_rel_self_within 0.021877 0.14791 0.12
## msg_rel_social_within 0.019432 0.13940 0.23 -0.08
## item (Intercept) 0.003904 0.06248
## msg_rel_self_within 0.006721 0.08198 -0.08
## msg_rel_social_within 0.003998 0.06323 0.11 -0.41
## Residual 0.215839 0.46458
## Number of obs: 30954, groups: SID, 3727; item, 362
##
## Fixed effects:
## Estimate Std. Error
## msg_rel_self_between 0.35257870 0.01964775
## sharing_type -0.00004825 0.00709173
## msg_rel_self_within 0.18222310 0.00822365
## msg_rel_social_between 0.16321504 0.01958424
## msg_rel_social_within 0.13023465 0.00744762
## msg_rel_self_between:sharing_type -0.10333082 0.01460147
## sharing_type:msg_rel_self_within -0.06175949 0.00940276
## sharing_type:msg_rel_social_between 0.10656637 0.01460149
## sharing_type:msg_rel_social_within 0.11050229 0.00932810
## df t value Pr(>|t|)
## msg_rel_self_between 3778.05560833 17.945 < 0.0000000000000002
## sharing_type 23772.62233028 -0.007 0.995
## msg_rel_self_within 325.23586960 22.158 < 0.0000000000000002
## msg_rel_social_between 3743.23037282 8.334 < 0.0000000000000002
## msg_rel_social_within 287.62531345 17.487 < 0.0000000000000002
## msg_rel_self_between:sharing_type 23690.56968189 -7.077 0.000000000001517
## sharing_type:msg_rel_self_within 13738.52922270 -6.568 0.000000000052749
## sharing_type:msg_rel_social_between 23694.57333988 7.298 0.000000000000301
## sharing_type:msg_rel_social_within 11895.65604095 11.846 < 0.0000000000000002
##
## msg_rel_self_between ***
## sharing_type
## msg_rel_self_within ***
## msg_rel_social_between ***
## msg_rel_social_within ***
## msg_rel_self_between:sharing_type ***
## sharing_type:msg_rel_self_within ***
## sharing_type:msg_rel_social_between ***
## sharing_type:msg_rel_social_within ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## msg_rl_slf_b shrng_ msg_rl_slf_w msg_rl_scl_b
## sharing_typ 0.000
## msg_rl_slf_w -0.004 0.005
## msg_rl_scl_b -0.830 0.000 0.003
## msg_rl_scl_w -0.005 0.011 -0.463 -0.009
## msg_rl_s_:_ -0.089 0.000 0.000 0.076
## shrng_typ:msg_rl_sl_ 0.000 0.000 -0.307 -0.001
## shrng_typ:msg_rl_scl_b 0.076 0.000 0.000 -0.089
## shrng_typ:msg_rl_scl_w -0.001 0.004 0.207 0.002
## msg_rl_scl_w m___:_ shrng_typ:msg_rl_sl_
## sharing_typ
## msg_rl_slf_w
## msg_rl_scl_b
## msg_rl_scl_w
## msg_rl_s_:_ -0.001
## shrng_typ:msg_rl_sl_ 0.224 0.000
## shrng_typ:msg_rl_scl_b 0.000 -0.873 0.000
## shrng_typ:msg_rl_scl_w -0.330 0.000 -0.671
## shrng_typ:msg_rl_scl_b
## sharing_typ
## msg_rl_slf_w
## msg_rl_scl_b
## msg_rl_scl_w
## msg_rl_s_:_
## shrng_typ:msg_rl_sl_
## shrng_typ:msg_rl_scl_b
## shrng_typ:msg_rl_scl_w 0.000
print variance inflation factors
::vif(model_compare) car
## msg_rel_self_between sharing_type
## 3.251348 1.000333
## msg_rel_self_within msg_rel_social_between
## 1.367452 3.251244
## msg_rel_social_within msg_rel_self_between:sharing_type
## 1.391017 4.241421
## sharing_type:msg_rel_self_within sharing_type:msg_rel_social_between
## 1.945520 4.241281
## sharing_type:msg_rel_social_within
## 1.967190
plot
This is the plot in Figure 1.
= ggeffects::ggpredict(model_compare, c("msg_rel_self_between [-3:3]", "sharing_type")) %>%
predicted data.frame() %>%
mutate(type = "self_between") %>%
bind_rows(ggeffects::ggpredict(model_compare, c("msg_rel_self_within [-3:3]", "sharing_type")) %>%
data.frame() %>%
mutate(type = "self_within")) %>%
bind_rows(ggeffects::ggpredict(model_compare, c("msg_rel_social_between [-3:3]", "sharing_type")) %>%
data.frame() %>%
mutate(type = "social_between")) %>%
bind_rows(ggeffects::ggpredict(model_compare, c("msg_rel_social_within [-3:3]", "sharing_type")) %>%
data.frame() %>%
mutate(type = "social_within"))
= merged %>%
points select(-group) %>%
rename("group" = sharing_type,
"predicted" = msg_share_std) %>%
select(study, SID, group, predicted, contains("within"), contains("between")) %>%
gather(type, x, contains("msg")) %>%
mutate(type = gsub("msg_rel_", "", type),
group = ifelse(group == 0, "broadcast", "narrowcast")) %>%
extract(type, c("variable", "type"), "(.*)_(.*)") %>%
filter(x < 3 & x > -3)
%>%
predicted mutate(group = ifelse(group == 0, "broadcast", "narrowcast")) %>%
extract(type, c("variable", "type"), "(.*)_(.*)") %>%
ggplot(aes(x, predicted, color = group, fill = group, linetype = type)) +
geom_point(data = points, aes(x, predicted), alpha = .02, size = .25) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .2, color = NA) +
geom_line(size = 1) +
facet_grid(~variable) +
scale_color_manual(name = "", values = palette_sharing) +
scale_fill_manual(name = "", values = palette_sharing) +
scale_linetype_manual(name = "", values = c("solid", "dashed")) +
guides(linetype = guide_legend(override.aes = list(fill = NA))) +
labs(x = "\nstandardized relevance rating", y = "predicted standardized sharing intention rating\n") +
+
plot_aes theme(legend.position = "top",
legend.key.width=unit(2,"cm"))
model summary table
= cbind(summary(model_compare)$coefficients[,4],
eff_size summary(model_compare)$coefficients[,3]) %>%
data.frame() %>%
rename("t" = X1,
"df" = X2) %>%
mutate(d = (2*t) / sqrt(df)) %>%
rownames_to_column(var = "term") %>%
mutate(term = gsub(":", " x ", term),
term = gsub("msg_", "", term),
term = gsub("_", " ", term),
term = gsub("within", "within", term),
term = gsub("between", "between", term),
term = gsub("rel self", "Self", term),
term = gsub("rel social", "Social", term),
term = gsub("sharing type", "Sharing type", term),
term = gsub("Sharing type x (.*)", "\\1 x Sharing type", term),
d = sprintf("%.2f", d)) %>%
select(term, d)
%>%
model_compare ::tidy(conf.int = TRUE) %>%
broom.mixedfilter(effect == "fixed") %>%
rename("SE" = std.error,
"t" = statistic,
"p" = p.value) %>%
select(-group, -effect) %>%
mutate_at(vars(-contains("term"), -contains("p.value")), round, 2) %>%
mutate(term = gsub(":", " x ", term),
term = gsub("msg_", "", term),
term = gsub("_", " ", term),
term = gsub("within", "within", term),
term = gsub("between", "between", term),
term = gsub("rel self", "Self", term),
term = gsub("rel social", "Social", term),
term = gsub("sharing type", "Sharing type", term),
term = gsub("Sharing type x (.*)", "\\1 x Sharing type", term),
p = ifelse(p < .001, "< .001",
ifelse(p == 1, "1.000", gsub("0.(.*)", ".\\1", sprintf("%.3f", p)))),
`b [95% CI]` = sprintf("%.2f [%0.2f, %.2f]", estimate, conf.low, conf.high)) %>%
left_join(., eff_size) %>%
mutate(d = ifelse(is.na(d), "--", d)) %>%
select(term, `b [95% CI]`, d, df, t, p) %>%
kable() %>%
::kable_styling() kableExtra
term | b [95% CI] | d | df | t | p |
---|---|---|---|---|---|
Self between | 0.35 [0.31, 0.39] | 0.58 | 3778.06 | 17.94 | < .001 |
Sharing type | -0.00 [-0.01, 0.01] | -0.00 | 23772.62 | -0.01 | .990 |
Self within | 0.18 [0.17, 0.20] | 2.46 | 325.24 | 22.16 | < .001 |
Social between | 0.16 [0.12, 0.20] | 0.27 | 3743.23 | 8.33 | < .001 |
Social within | 0.13 [0.12, 0.14] | 2.06 | 287.63 | 17.49 | < .001 |
Self between x Sharing type | -0.10 [-0.13, -0.07] | -0.09 | 23690.57 | -7.08 | < .001 |
Self within x Sharing type | -0.06 [-0.08, -0.04] | -0.11 | 13738.53 | -6.57 | < .001 |
Social between x Sharing type | 0.11 [0.08, 0.14] | 0.09 | 23694.57 | 7.30 | < .001 |
Social within x Sharing type | 0.11 [0.09, 0.13] | 0.22 | 11895.66 | 11.85 | < .001 |
social relevance
run model
This plot is supplementary and not reported in the manuscript.
model summary table