Hello readers of this Markdown! This is a first pass at analyzing the
full study data. Please see all the pre-registered main analyses and
exploratory analyses (especially #5) for results. Thank you :)
Import Data
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data <- read.csv("~/Google drive/My Drive/Stanford Google Drive/Gossip Project NEW/raw_qualtrics_data.csv") %>%
slice(-(1:2)) %>%# from piloting
filter(Contribution != "") %>%
filter(Informed.Consent == 1) %>%
filter(attention_check == 2)
Light data cleaning
data <- data %>%
mutate(Condition = ifelse(FL_102_DO != "", FL_102_DO, "")) %>%
mutate(Condition = ifelse(FL_43_DO != "" & Condition == "", FL_43_DO, Condition)) %>%
mutate(Stimuli = Condition)
data$Stimuli <- substr(data$Stimuli, 0, 4)
data <- data %>%
mutate(Condition = ifelse(FL_102_DO != "", "Objective", "")) %>%
mutate(Condition = ifelse(FL_43_DO != "" & Condition == "", "Subjective", Condition)) %>%
mutate(Condition = ifelse(FL_41_DO== "StimuliDescriptionControl", "Control", Condition))
data <- data %>%
select(ResponseId, ProlificID, Informed.Consent, attention_check, comp1, comp2, comp3, comp4, comp5, contributionExp:Contribution, contributionGuess, Condition, Stimuli, household_income:age, trust:norms_1, CRT_1:CRT_3) %>%
mutate(Contribution = as.numeric(Contribution))
negNotes <- read.csv("~/Google drive/My Drive/Stanford Google Drive/Gossip Project NEW/Group_Gossip_Breakdown.csv") %>%
select(-Condition)
data <- data %>%
left_join(negNotes, by = c("Stimuli")) %>%
mutate(negativeNotes_Number = as.factor(negativeNotes_Number))
Pre-registered main analyses
1. We will compare the reputational information group with the
numeric information group using the following linear models. For these
models, the numeric information group will be specified as the reference
level.
1a. Effect of condition on estimated group contribution mean in the
previous public goods game they learned about: lm(Estimate ~
Experimental condition)
model_data <- data %>%
filter(Condition == "Objective" | Condition ==
"Subjective") %>%
mutate(contributionGuess = as.numeric(contributionGuess))%>%
mutate(contributionExp = as.numeric(contributionExp))%>%
mutate(Contribution = as.numeric(Contribution))
model = model_data %>%
lm(contributionGuess ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = contributionGuess ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7661 -1.5685 0.2339 1.4315 5.4315
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.7661 0.1482 38.919 < 2e-16 ***
## ConditionSubjective -1.1976 0.2095 -5.716 1.89e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.333 on 494 degrees of freedom
## Multiple R-squared: 0.06203, Adjusted R-squared: 0.06013
## F-statistic: 32.67 on 1 and 494 DF, p-value: 1.893e-08
The mean contribution guess in the numeric condition was 5.77 (SE =
0.15) and the mean contribution guess in the gossip condition was 4.57
(SE = 0.21). Difference in means is significant; t(494) = -5.72, p <
.001.
ggplot(data = model_data,
mapping = aes(x = Condition,
y = contributionGuess,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

1b. Effect of condition on estimated group contribution forecasts
for participants’ future public goods game: lm(Forecast ~ Experimental
condition)
model = model_data %>%
lm(contributionExp ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = contributionExp ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.5847 -0.5847 -0.3065 1.4153 4.6935
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.5847 0.1308 42.687 <2e-16 ***
## ConditionSubjective -0.2782 0.1850 -1.504 0.133
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.06 on 494 degrees of freedom
## Multiple R-squared: 0.004557, Adjusted R-squared: 0.002542
## F-statistic: 2.261 on 1 and 494 DF, p-value: 0.1333
The mean contribution expectation in the numeric condition was 5.59
(SE = 0.13) and the mean contribution expectation in the gossip
condition was 5.31 (SE = 0.19). Difference in means is not significant;
t(494) = -1.50, p = .133.
ggplot(data = model_data,
mapping = aes(x = Condition,
y = contributionExp,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

1c. Effect of condition on contribution to the group fund in their
own public goods game: lm(Contribution ~ Experimental condition)
model = model_data %>%
lm(Contribution ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = Contribution ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.3347 -1.3347 -0.2581 3.6653 3.7419
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.33468 0.20220 31.329 <2e-16 ***
## ConditionSubjective -0.07661 0.28595 -0.268 0.789
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.184 on 494 degrees of freedom
## Multiple R-squared: 0.0001453, Adjusted R-squared: -0.001879
## F-statistic: 0.07178 on 1 and 494 DF, p-value: 0.7889
The mean contribution in the numeric condition was 6.34 (SE = 0.20)
and the mean contribution in the gossip condition was 6.26 (SE = 0.29).
Difference in means is not significant; t(494) = -0.27, p = .79.
ggplot(data = model_data,
mapping = aes(x = Condition,
y = Contribution,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

2. We will compare the reputational information group with the
control group using the following linear models. For these models, the
control group will be specified as the reference level.
2a. Effect of condition on estimated group contribution mean in the
previous public goods game they learned about: lm(Estimate ~
Experimental condition)
model_data_1 <- data %>%
filter(Condition == "Control" | Condition ==
"Subjective")%>%
mutate(contributionGuess = as.numeric(contributionGuess))%>%
mutate(contributionExp = as.numeric(contributionExp))%>%
mutate(Contribution = as.numeric(Contribution))
model = model_data_1 %>%
lm(contributionGuess ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = contributionGuess ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5685 -1.5685 -0.5685 1.2954 5.4315
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.7046 0.1398 40.815 < 2e-16 ***
## ConditionSubjective -1.1361 0.1955 -5.813 1.12e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.152 on 483 degrees of freedom
## Multiple R-squared: 0.06538, Adjusted R-squared: 0.06344
## F-statistic: 33.79 on 1 and 483 DF, p-value: 1.119e-08
The mean contribution guess in the control condition was 5.71 (SE =
0.14) and the mean contribution guess in the gossip condition was 4.57
(SE = 0.20). Difference in means is significant; t(483) = -5.81, p <
.001.
ggplot(data = model_data_1,
mapping = aes(x = Condition,
y = contributionGuess,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

2b. Effect of condition on estimated group contribution forecasts
for participants’ future public goods game: lm(Forecast ~ Experimental
condition)
model = model_data_1 %>%
lm(contributionExp ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = contributionExp ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.6076 -0.6076 -0.3065 1.3924 4.6935
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.6076 0.1312 42.732 <2e-16 ***
## ConditionSubjective -0.3011 0.1835 -1.641 0.101
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.02 on 483 degrees of freedom
## Multiple R-squared: 0.005544, Adjusted R-squared: 0.003486
## F-statistic: 2.693 on 1 and 483 DF, p-value: 0.1014
The mean contribution expectation in the control condition was 5.61
(SE = 0.13) and the mean contribution expectation in the gossip
condition was 5.31 (SE = 0.18). Difference in means is not significant;
t(483) = -1.64, p = .10).
ggplot(data = model_data_1,
mapping = aes(x = Condition,
y = contributionExp,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

2c. Effect of condition on contribution to the group fund in their
own public goods game: lm(Contribution ~ Experimental condition)
model = model_data_1 %>%
lm(Contribution ~ Condition, data = .)
model %>%
summary()
##
## Call:
## lm(formula = Contribution ~ Condition, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.2581 -1.2581 -0.2581 3.7419 3.8143
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.18565 0.21226 29.142 <2e-16 ***
## ConditionSubjective 0.07241 0.29683 0.244 0.807
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.268 on 483 degrees of freedom
## Multiple R-squared: 0.0001232, Adjusted R-squared: -0.001947
## F-statistic: 0.05951 on 1 and 483 DF, p-value: 0.8074
The mean contribution in the control condition was 6.19 (SE = 0.21)
and the mean contribution in the gossip condition was 6.26 (SE = 0.30).
Difference in means is not significant; t(483) = 0.244, p = .81).
ggplot(data = model_data_1,
mapping = aes(x = Condition,
y = Contribution,
color = Condition)) +
# means with confidence intervals
geom_point(alpha = 0.4,
position = position_jitter(width = 0.1, height = 0),
size = 2)+
stat_summary(fun.data = "mean_cl_boot",
geom = "pointrange",
color = "black",
fill = "black",
shape = 21,
size = .5) +
# individual data points (jittered horizontally)
theme_bw()+
theme(legend.position="none")

Pre-registered exploratory analyses
2. We will conduct the main regression analyses after controlling
for participants self-reported demographic information.
3. We will conduct the main regression analyses after controlling
for participants self-reported trust, cynicism, and critical reasoning
items.
5. We will use the number of negative pieces of information received
as a moderator in the main models comparing reputational information to
numeric information.
5a. Effect of condition on estimated group mean in the previous
public goods game they learned about moderated by number of negative
notes: lm(Estimate ~ Experimental condition * Number of Negative
Notes)
model_data_7 <- model_data %>%
mutate(negativeNotes_Number = as.numeric(negativeNotes_Number)) %>%
rowwise() %>%
mutate(negativeNotes_Number = (negativeNotes_Number - 1)) %>%
ungroup()
model = model_data_7 %>%
lm(contributionGuess ~ Condition * negativeNotes_Number, data = .)
model %>%
summary()
##
## Call:
## lm(formula = contributionGuess ~ Condition * negativeNotes_Number,
## data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.405 -1.168 -0.364 1.411 5.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.4049 0.3410 21.714 < 2e-16
## ConditionSubjective 0.4098 0.4816 0.851 0.395246
## negativeNotes_Number -0.6186 0.1188 -5.209 2.8e-07
## ConditionSubjective:negativeNotes_Number -0.6067 0.1677 -3.619 0.000327
##
## (Intercept) ***
## ConditionSubjective
## negativeNotes_Number ***
## ConditionSubjective:negativeNotes_Number ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.072 on 492 degrees of freedom
## Multiple R-squared: 0.2632, Adjusted R-squared: 0.2587
## F-statistic: 58.57 on 3 and 492 DF, p-value: < 2.2e-16
For people in the gossip condition, they estimate .61 less points
than participants in the numeric condition for additional negative
gossip note, on average. So while participants in the numeric condition
decrease their guess according to the number of negative notes (coef =
-.62), participants in the gossip condition see an additional decrease
for each one unit increase in number of negative notes.
5b.Effect of condition on contribution to the group fund in their
own public goods game moderated by number of negative notes:
lm(Contribution ~ Experimental condition * Number of Negative
Notes)
model = model_data_7 %>%
lm(Contribution ~ Condition * negativeNotes_Number, data = .)
model %>%
summary()
##
## Call:
## lm(formula = Contribution ~ Condition * negativeNotes_Number,
## data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.7024 -1.4794 -0.2334 3.5206 3.9665
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.9253 0.5242 13.211 <2e-16
## ConditionSubjective -0.4810 0.7403 -0.650 0.516
## negativeNotes_Number -0.2229 0.1825 -1.221 0.223
## ConditionSubjective:negativeNotes_Number 0.1526 0.2577 0.592 0.554
##
## (Intercept) ***
## ConditionSubjective
## negativeNotes_Number
## ConditionSubjective:negativeNotes_Number
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.185 on 492 degrees of freedom
## Multiple R-squared: 0.003469, Adjusted R-squared: -0.002608
## F-statistic: 0.5709 on 3 and 492 DF, p-value: 0.6344
For people in the gossip condition, they contribute .15 more points
(not significant) than participants in the numeric condition for
additional negative gossip note, on average.
7. We will run a correlation test between the number of negative
reputational notes participants received (e.g., 4 negative notes), and
the participants’ contributions to the group fund.
gossip_data <- gossip_data %>%
mutate(negativeNotes_Number = as.numeric(negativeNotes_Number)) %>%
rowwise() %>%
mutate(negativeNotes_Number = (negativeNotes_Number - 1)) %>%
ungroup()
cor.test(gossip_data$negativeNotes_Number, gossip_data$Contribution)
##
## Pearson's product-moment correlation
##
## data: gossip_data$negativeNotes_Number and gossip_data$Contribution
## t = -0.35605, df = 246, p-value = 0.7221
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1468470 0.1021609
## sample estimates:
## cor
## -0.02269502
Main takeaways
The data suggests, very broadly, that participants in the gossip
condition view past players more negatively than participants in the
numeric condition and the control condition. However, this does not
affect their future behavior or expectations of future group mates. This
suggests that in the face of gossip, participants are able to put what
they observe to the side and act prosocially. Wow!