In this report, we reproduce the sensitivity analyses testing H4-6 in Study 3 reported in Supplementary Material using alternatively defined ROIs.
Given the high correlation between the preregistered Neurosynth ROIs, we conducted sensitivity analyses using ROIs from Scholz et al. (2017) A neural model of valuation and information virality.
In order to maximize the differentiation between the self-referential and social cognitive ROIs, we removed the PCC/precuneus cluster from the social cognitive ROI as it overlapped with the self-referential ROI.
First, we load the relevant packages, define functions and plotting aesthetics, and load and tidy the data.
source("https://gist.githubusercontent.com/benmarwick/2a1bb0133ff568cbe28d/raw/fb53bd97121f7f9ce947837ef1a4c65a73bffb3f/geom_flat_violin.R")
# MLM results table function
table_model = function(model_data) {
model_data %>%
broom.mixed::tidy(conf.int = TRUE) %>%
filter(effect == "fixed") %>%
rename("SE" = std.error,
"t" = statistic,
"p" = p.value) %>%
select(-group, -effect) %>%
mutate_at(vars(-contains("term"), -contains("p")), round, 2) %>%
mutate(term = gsub("article_cond", "", term),
term = gsub("\\(Intercept\\)", "intercept", term),
term = gsub("article_condother", "other", term),
term = gsub("article_condself", "self", term),
term = gsub("topichealth", "topic (health)", term),
term = gsub("self_referential", "self-referential", term),
term = gsub("msg_rel_self_z_z", "self-relevance", term),
term = gsub("msg_rel_social_z_z", "social relevance", term),
term = gsub("self_referential", "self-referential", term),
term = gsub("social_cognitive", "social cognitive", term),
term = gsub(":", " x ", term),
p = ifelse(p < .001, "< .001",
ifelse(p > .999, "1.000", gsub("0.(.*)", ".\\1", sprintf("%.3f", p)))),
`b [95% CI]` = sprintf("%.2f [%0.2f, %.2f]", estimate, conf.low, conf.high)) %>%
select(term, `b [95% CI]`, df, t, p)
}
simple_slopes = function(model, var, moderator, continuous = TRUE) {
if (isTRUE(continuous)) {
emmeans::emtrends(model, as.formula(paste("~", moderator)), var = var) %>%
data.frame() %>%
rename("trend" = 2) %>%
mutate(`b [95% CI]` = sprintf("%.2f [%.2f, %.2f]", trend, asymp.LCL, asymp.UCL)) %>%
select(!!moderator, `b [95% CI]`) %>%
kable() %>%
kableExtra::kable_styling()
} else {
confint(emmeans::contrast(emmeans::emmeans(model, as.formula(paste("~", var, "|", moderator))), "revpairwise", by = moderator, adjust = "none")) %>%
data.frame() %>%
filter(grepl("control", contrast)) %>%
mutate(`b [95% CI]` = sprintf("%.2f [%.2f, %.2f]", estimate, asymp.LCL, asymp.UCL)) %>%
select(contrast, !!moderator, `b [95% CI]`) %>%
arrange(contrast) %>%
kable() %>%
kableExtra::kable_styling()
}
}palette_cond = c("self" = "#ee9b00",
"control" = "#0a9396",
"other" = "#005f73")
palette_roi = c("self-referential" = "#ee9b00",
"social cognitive" = "#005f73")
palette_dv = c("self-relevance" = "#ee9b00",
"social relevance" = "#005f73",
"narrowcast sharing" = "#D295BF")
palette_topic = c("climate" = "#519872",
"health" = "#3A3357")
plot_aes = theme_minimal() +
theme(legend.position = "top",
legend.text = element_text(size = 12),
text = element_text(size = 16, family = "Futura Medium"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.text = element_text(color = "black"),
axis.line = element_line(colour = "black"),
axis.ticks.y = element_blank())merged_all = read.csv("../data/study3_data.csv")
ratings_z = merged_all %>%
select(SID, trial, article_number, article_cond, msg_rel_self, msg_rel_social, msg_share) %>%
unique() %>%
mutate(msg_share_z = scale(msg_share, scale = TRUE, center = TRUE),
msg_rel_self_z = scale(msg_rel_self, center = TRUE, scale = TRUE),
msg_rel_social_z = scale(msg_rel_social, center = TRUE, scale = TRUE))
merged = merged_all %>%
mutate(atlas = gsub("mentalizing", "social_cognitive", atlas)) %>%
filter(outlier == "no" | is.na(outlier)) %>%
group_by(SID, atlas) %>%
mutate(parameter_estimate_std = parameter_estimate / sd(parameter_estimate, na.rm = TRUE)) %>%
left_join(., ratings_z)
merged_wide = merged %>%
filter(atlas %in% c("self-referential", "social_cognitive")) %>%
select(SID, site, trial, article_number, topic, article_cond, msg_share, msg_share_z,
msg_rel_self, msg_rel_self_z, msg_rel_social, msg_rel_social_z, atlas, parameter_estimate_std) %>%
spread(atlas, parameter_estimate_std) %>%
rename("self_referential" = `self-referential`)
merged_wide_alt = merged %>%
filter(atlas %in% c("pnas_self", "pnas_social_cognitive_nopc")) %>%
select(SID, site, trial, article_number, topic, article_cond, msg_share, msg_share_z,
msg_rel_self, msg_rel_self_z, msg_rel_social, msg_rel_social_z, atlas, parameter_estimate_std) %>%
spread(atlas, parameter_estimate_std) %>%
rename("self_referential" = pnas_self,
"social_cognitive" = pnas_social_cognitive_nopc) Compared to the preregistered Neurosynth ROIs (r = .94, 95% CI [.94, .94]), the correlation between the alternative ROIs are substantially reduced.
##
## Repeated measures correlation
##
## r
## 0.5588849
##
## degrees of freedom
## 5928
##
## p-value
## 0
##
## 95% confidence interval
## 0.5411297 0.576142
Greater activity in the (a) self-referential region of interest (ROI) will be associated with higher self-relevance ratings, and (b) greater activity in the social cognitive ROI will be associated with higher social relevance ratings.
mod_h4a = lmer(msg_rel_self_z ~ self_referential + (1 + self_referential | SID),
data = merged_wide_alt,
control = lmerControl(optimizer = "bobyqa"))| term | b [95% CI] | df | t | p |
|---|---|---|---|---|
| intercept | -0.01 [-0.09, 0.07] | 84.62 | -0.26 | .794 |
| self-referential | 0.03 [0.01, 0.06] | 83.66 | 2.40 | .018 |
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: msg_rel_self_z ~ self_referential + (1 + self_referential | SID)
## Data: merged_wide_alt
## Control: lmerControl(optimizer = "bobyqa")
##
## REML criterion at convergence: 16580.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.4707 -0.7086 0.1383 0.6783 2.4399
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## SID (Intercept) 0.113396 0.33674
## self_referential 0.001559 0.03949 -0.79
## Residual 0.891348 0.94411
## Number of obs: 6014, groups: SID, 85
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -0.01014 0.03873 84.61522 -0.262 0.7941
## self_referential 0.03086 0.01284 83.66477 2.403 0.0185 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## self_rfrntl -0.344
vals = seq(-4.5, 4.5, .1)
predicted_h4 = ggeffects::ggpredict(mod_h4a, c("self_referential [vals]")) %>%
data.frame() %>%
mutate(roi = "self-referential",
variable = "self-relevance") %>%
bind_rows(ggeffects::ggpredict(mod_h4b, c("social_cognitive [vals]")) %>%
data.frame() %>%
mutate(roi = "social cognitive",
variable = "social relevance"))
predicted_sub_h4 = ggeffects::ggpredict(mod_h4a, terms = c("self_referential [vals]", "SID"), type = "random") %>%
data.frame() %>%
mutate(roi = "self-referential",
variable = "self-relevance") %>%
bind_rows(ggeffects::ggpredict(mod_h4b, c("social_cognitive [vals]", "SID"), type = "random") %>%
data.frame() %>%
mutate(roi = "social cognitive",
variable = "social relevance"))
predicted_h4 %>%
ggplot(aes(x, predicted)) +
stat_smooth(data = predicted_sub_h4, aes(group = group, color = roi), geom ='line', method = "lm", alpha = .1, size = 1, se = FALSE) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high, fill = roi), alpha = .5, color = NA) +
geom_line(aes(color = roi), size = 2) +
facet_grid(~variable) +
scale_color_manual(name = "", values = palette_roi, guide = FALSE) +
scale_fill_manual(name = "", values = palette_roi, guide = FALSE) +
labs(x = "\nROI activity (SD)", y = "predicted rating\n") +
plot_aesGreater activity in the (a) self-referential and (b) social cognitive ROIs will be associated with stronger news sharing intentions.
mod_h5a = lmer(msg_share_z ~ self_referential + (1 + self_referential | SID),
data = merged_wide_alt,
control = lmerControl(optimizer = "bobyqa"))| term | b [95% CI] | df | t | p |
|---|---|---|---|---|
| intercept | -0.02 [-0.09, 0.06] | 85.08 | -0.45 | .651 |
| self-referential | 0.06 [0.03, 0.09] | 83.56 | 4.40 | < .001 |
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: msg_share_z ~ self_referential + (1 + self_referential | SID)
## Data: merged_wide_alt
## Control: lmerControl(optimizer = "bobyqa")
##
## REML criterion at convergence: 16380.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.5502 -0.7218 0.1157 0.7344 2.1951
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## SID (Intercept) 0.104470 0.32322
## self_referential 0.003838 0.06195 -0.36
## Residual 0.892105 0.94451
## Number of obs: 5935, groups: SID, 85
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) -0.01701 0.03745 85.07735 -0.454 0.651
## self_referential 0.06136 0.01396 83.55508 4.396 0.0000323 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## self_rfrntl -0.251
vals = seq(-4.5, 4.5, .1)
predicted_h5 = ggeffects::ggpredict(mod_h5a, c("self_referential [vals]")) %>%
data.frame() %>%
mutate(roi = "self-referential") %>%
bind_rows(ggeffects::ggpredict(mod_h5b, c("social_cognitive [vals]")) %>%
data.frame() %>%
mutate(roi = "social cognitive")) %>%
mutate(roi = factor(roi, levels = c("self-referential", "social cognitive")))
predicted_sub_h5 = ggeffects::ggpredict(mod_h5a, terms = c("self_referential [vals]", "SID"), type = "random") %>%
data.frame() %>%
mutate(roi = "self-referential") %>%
bind_rows(ggeffects::ggpredict(mod_h5b, c("social_cognitive [vals]", "SID"), type = "random") %>%
data.frame() %>%
mutate(roi = "social cognitive")) %>%
mutate(roi = factor(roi, levels = c("self-referential", "social cognitive")))
predicted_h5 %>%
ggplot(aes(x = x, y = predicted, color = roi, fill = roi)) +
stat_smooth(data = predicted_sub_h5, aes(group = group), geom ='line', method = "lm", alpha = .1, size = 1, se = FALSE) +
geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .2, color = NA) +
geom_line(size = 2) +
facet_grid(~roi) +
scale_color_manual(name = "", values = palette_roi) +
scale_fill_manual(name = "", values = palette_roi) +
labs(y = "predicted sharing intention\n", x = "\nROI activity (SD)") +
plot_aes +
theme(legend.position = "none")Compared to the control condition, the (a) self-focused condition will increase activity in the self-referential ROI, and the (b) other-focused condition will increase activity in the social cognitive ROI.
mod_h6a = lmer(self_referential ~ article_cond + (1 + article_cond | SID),
data = merged_wide_alt,
control = lmerControl(optimizer = "bobyqa"))| term | b [95% CI] | df | t | p |
|---|---|---|---|---|
| intercept | 0.23 [0.12, 0.33] | 84.12 | 4.38 | < .001 |
| other | 0.11 [0.03, 0.19] | 84.42 | 2.86 | .005 |
| self | 0.13 [0.04, 0.21] | 83.69 | 2.84 | .006 |
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: self_referential ~ article_cond + (1 + article_cond | SID)
## Data: merged_wide_alt
## Control: lmerControl(optimizer = "bobyqa")
##
## REML criterion at convergence: 17254.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.4678 -0.6543 -0.0102 0.6474 3.5891
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## SID (Intercept) 0.18879 0.4345
## article_condother 0.04997 0.2235 -0.05
## article_condself 0.08492 0.2914 0.05 0.49
## Residual 0.97421 0.9870
## Number of obs: 6014, groups: SID, 85
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 0.22817 0.05204 84.12046 4.385 0.0000334 ***
## article_condother 0.11309 0.03950 84.41682 2.863 0.00529 **
## article_condself 0.12606 0.04441 83.69461 2.838 0.00569 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) artcl_cndt
## artcl_cndth -0.267
## artcl_cndsl -0.176 0.493
predicted_h6 = ggeffects::ggpredict(mod_h6a, c("article_cond")) %>%
data.frame() %>%
mutate(atlas = "self-referential") %>%
bind_rows(ggeffects::ggpredict(mod_h6b, c("article_cond")) %>%
data.frame() %>%
mutate(atlas = "social cognitive")) %>%
mutate(x = factor(x, levels = c("self", "control", "other")),
atlas = factor(atlas, levels = c("self-referential", "social cognitive")))
predicted_sub_h6 = ggeffects::ggpredict(mod_h6a, terms = c("article_cond", "SID"), type = "random") %>%
data.frame() %>%
mutate(atlas = "self-referential") %>%
bind_rows(ggeffects::ggpredict(mod_h6b, c("article_cond", "SID"), type = "random") %>%
data.frame() %>%
mutate(atlas = "social cognitive")) %>%
mutate(x = factor(x, levels = c("self", "control", "other")),
atlas = factor(atlas, levels = c("self-referential", "social cognitive")))
predicted_h6 %>%
ggplot(aes(x = x, y = predicted)) +
stat_summary(data = predicted_sub_h6, aes(group = group), fun = "mean", geom = "line",
size = .1, color = "grey50") +
stat_summary(aes(group = group), fun = "mean", geom = "line", size = 1) +
geom_pointrange(aes(color = x, ymin = conf.low, ymax = conf.high), size = .75) +
facet_grid(~atlas) +
scale_color_manual(name = "", values = palette_cond, guide = "none") +
scale_alpha_manual(name = "", values = c(1, .5)) +
labs(x = "", y = "ROI activity (SD)\n") +
plot_aestable_h4a %>% mutate(DV = "H4a: Self-relevance") %>%
bind_rows(table_h4b %>% mutate(DV = "H4b: Social relevance")) %>%
bind_rows(table_h5a %>% mutate(DV = "H5a: Sharing intention")) %>%
bind_rows(table_h5b %>% mutate(DV = "H5b: Sharing intention")) %>%
bind_rows(table_h6a %>% mutate(DV = "H6a: Self-referential ROI")) %>%
bind_rows(table_h6b %>% mutate(DV = "H6b: Socia cognitive ROI")) %>%
select(DV, everything()) %>%
kable() %>%
kable_styling()| DV | term | b [95% CI] | df | t | p |
|---|---|---|---|---|---|
| H4a: Self-relevance | intercept | -0.01 [-0.09, 0.07] | 84.62 | -0.26 | .794 |
| H4a: Self-relevance | self-referential | 0.03 [0.01, 0.06] | 83.66 | 2.40 | .018 |
| H4b: Social relevance | intercept | -0.01 [-0.09, 0.08] | 84.07 | -0.19 | .847 |
| H4b: Social relevance | social cognitive | 0.04 [0.01, 0.06] | 82.98 | 2.86 | .005 |
| H5a: Sharing intention | intercept | -0.02 [-0.09, 0.06] | 85.08 | -0.45 | .651 |
| H5a: Sharing intention | self-referential | 0.06 [0.03, 0.09] | 83.56 | 4.40 | < .001 |
| H5b: Sharing intention | intercept | -0.01 [-0.08, 0.06] | 84.71 | -0.26 | .797 |
| H5b: Sharing intention | social cognitive | 0.04 [0.02, 0.07] | 83.49 | 3.41 | .001 |
| H6a: Self-referential ROI | intercept | 0.23 [0.12, 0.33] | 84.12 | 4.38 | < .001 |
| H6a: Self-referential ROI | other | 0.11 [0.03, 0.19] | 84.42 | 2.86 | .005 |
| H6a: Self-referential ROI | self | 0.13 [0.04, 0.21] | 83.69 | 2.84 | .006 |
| H6b: Socia cognitive ROI | intercept | 0.27 [0.15, 0.39] | 84.19 | 4.58 | < .001 |
| H6b: Socia cognitive ROI | other | 0.01 [-0.07, 0.08] | 83.16 | 0.21 | .837 |
| H6b: Socia cognitive ROI | self | 0.05 [-0.04, 0.13] | 84.03 | 1.11 | .271 |
## - Angelo Canty, B. D. Ripley (2024). _boot: Bootstrap R (S-Plus) Functions_. R package version 1.3-30. A. C. Davison, D. V. Hinkley (1997). _Bootstrap Methods and Their Applications_. Cambridge University Press, Cambridge. ISBN 0-521-57391-2, <doi:10.1017/CBO9780511802843>.
## - Bates D, Mächler M, Bolker B, Walker S (2015). "Fitting Linear Mixed-Effects Models Using lme4." _Journal of Statistical Software_, *67*(1), 1-48. doi:10.18637/jss.v067.i01 <https://doi.org/10.18637/jss.v067.i01>.
## - Bates D, Maechler M, Jagan M (2024). _Matrix: Sparse and Dense Matrix Classes and Methods_. R package version 1.7-0, <https://CRAN.R-project.org/package=Matrix>.
## - Grolemund G, Wickham H (2011). "Dates and Times Made Easy with lubridate." _Journal of Statistical Software_, *40*(3), 1-25. <https://www.jstatsoft.org/v40/i03/>.
## - Hester J, Wickham H, Csárdi G (2024). _fs: Cross-Platform File System Operations Based on 'libuv'_. R package version 1.6.4, <https://CRAN.R-project.org/package=fs>.
## - Kuznetsova A, Brockhoff PB, Christensen RHB (2017). "lmerTest Package: Tests in Linear Mixed Effects Models." _Journal of Statistical Software_, *82*(13), 1-26. doi:10.18637/jss.v082.i13 <https://doi.org/10.18637/jss.v082.i13>.
## - Lüdecke D (2018). "ggeffects: Tidy Data Frames of Marginal Effects from Regression Models." _Journal of Open Source Software_, *3*(26), 772. doi:10.21105/joss.00772 <https://doi.org/10.21105/joss.00772>.
## - Müller K, Wickham H (2023). _tibble: Simple Data Frames_. R package version 3.2.1, <https://CRAN.R-project.org/package=tibble>.
## - R Core Team (2024). _R: A Language and Environment for Statistical Computing_. R Foundation for Statistical Computing, Vienna, Austria. <https://www.R-project.org/>.
## - Rinker TW, Kurkiewicz D (2018). _pacman: Package Management for R_. version 0.5.0, <http://github.com/trinker/pacman>.
## - Wickham H (2016). _ggplot2: Elegant Graphics for Data Analysis_. Springer-Verlag New York. ISBN 978-3-319-24277-4, <https://ggplot2.tidyverse.org>.
## - Wickham H (2023). _forcats: Tools for Working with Categorical Variables (Factors)_. R package version 1.0.0, <https://CRAN.R-project.org/package=forcats>.
## - Wickham H (2023). _stringr: Simple, Consistent Wrappers for Common String Operations_. R package version 1.5.1, <https://CRAN.R-project.org/package=stringr>.
## - Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R, Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V, Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). "Welcome to the tidyverse." _Journal of Open Source Software_, *4*(43), 1686. doi:10.21105/joss.01686 <https://doi.org/10.21105/joss.01686>.
## - Wickham H, Bryan J, Barrett M, Teucher A (2024). _usethis: Automate Package and Project Setup_. R package version 2.2.3, <https://CRAN.R-project.org/package=usethis>.
## - Wickham H, François R, Henry L, Müller K, Vaughan D (2023). _dplyr: A Grammar of Data Manipulation_. R package version 1.1.4, <https://CRAN.R-project.org/package=dplyr>.
## - Wickham H, Henry L (2023). _purrr: Functional Programming Tools_. R package version 1.0.2, <https://CRAN.R-project.org/package=purrr>.
## - Wickham H, Hester J, Bryan J (2024). _readr: Read Rectangular Text Data_. R package version 2.1.5, <https://CRAN.R-project.org/package=readr>.
## - Wickham H, Hester J, Chang W, Bryan J (2022). _devtools: Tools to Make Developing R Packages Easier_. R package version 2.4.5, <https://CRAN.R-project.org/package=devtools>.
## - Wickham H, Vaughan D, Girlich M (2024). _tidyr: Tidy Messy Data_. R package version 1.3.1, <https://CRAN.R-project.org/package=tidyr>.
## - Xie Y (2024). _knitr: A General-Purpose Package for Dynamic Report Generation in R_. R package version 1.47, <https://yihui.org/knitr/>. Xie Y (2015). _Dynamic Documents with R and knitr_, 2nd edition. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 978-1498716963, <https://yihui.org/knitr/>. Xie Y (2014). "knitr: A Comprehensive Tool for Reproducible Research in R." In Stodden V, Leisch F, Peng RD (eds.), _Implementing Reproducible Computational Research_. Chapman and Hall/CRC. ISBN 978-1466561595.
## - Zhu H (2024). _kableExtra: Construct Complex Table with 'kable' and Pipe Syntax_. R package version 1.4.0, <https://CRAN.R-project.org/package=kableExtra>.
social cognitive ROI
model table
summary