## Warning: package 'knitr' was built under R version 3.5.3
## Warning: package 'purrr' was built under R version 3.5.3
## Warning: package 'janitor' was built under R version 3.5.3
## Warning: package 'Rcpp' was built under R version 3.5.3
## Warning: package 'bookdown' was built under R version 3.5.3
Universally, people impose structure on the world by grouping individual things into categories. Categorization is a universal and powerful cognitive tool that allows us to group various individual things together and treat the individuals as the same in some respect. Our ability to categorize allows us to generalize beyond our immediate experience as to make inductive inferences about other category members we have never experienced.
Psychological essentialism is the belief that category members share an innate, internal, and unchangeable “essence” that causes them to be fundamentally similar to each other and different from non-category members, and that gives rise to shared obvious and non-obvious properties (Medin and Ortony 1989, Gelman (2003)). As a result, certain categories are construed as representing real distinctions in the world. For an example, an essentialist conception of gender might hold that men and women have different essences that make men all alike in some respect, women all alike in some respect, and men and women different from each other. Moreover, these essences are thought to remain unchanging and stable over time, such that men will always be men, and will always be characterized by certain properties, and that women will always be women, and will always be characterized by certain other properties. Essentialism is psychologically powerful, since it facilitates inferences across an entire category to category members that you have never experienced before.
Although psychologically powerful and pervasive, essentialism has pernicious consequences especially in the social domain, where it can lead to stereotyping and prejudice (Haslam, Rothschild, and Ernst 2002). Essentialism about gender leads to the belief that gender is a biologically fixed, unchangeable category with strictly defined boundaries, and are associated with prejudice against gay and transgender people.
Essentialism has been widely documented in both children and adults in both biological and social domains (Gelman 2003). However, there is substantial cultural variation in what particular social categories are essentialized (Rhodes and Gelman 2009), which suggests the importance of social and linguistic cues in determining what categories to essentialize.
One linguistic cue for essentialism is generic statements, such as “girls play with dolls”, which have been shown to elicit essentialism in both biological and social domains (Gelman, Ware, and Kleinberg 2010, Rhodes, Leslie, and Tworek (2012)).
Another proposed linguistic cue for essentialism is formal explanations, which explain why an individual has a certain property by reference to the category it belongs to, such as “Suzy plays with dolls because Suzy is a girl” (Prasada and Dillingham 2006, Prasada and Dillingham (2009)). Formal explanations may be a cue for essentialism, because of two effects that they have. First, formal explanations suggest that property is central to what it means to be a category member, e.g. that playing with dolls is central to what it means to be a girl (Prasada and Dillingham 2006, Prasada and Dillingham (2009)). Second, formal explanations suggest that there is something inherent about being a category member that gives rise to category members possessing that property, e.g. that there is something inherent about being a girl that causes girls to play with dolls (Gelman, Cimpian, and Roberts 2018). As a result, hearing a formal explanation may be a cue to essentialize the category mentioned in the explanation.
Muradoglu et al. (2019) found that formal explanations do indeed boost essentialism for known animal categories, and perhaps for gender as well. Muradoglu et al. (2019) contains two studies, one about animal categories, and the other about gender categories. Here I attempt to reproduce the target findings from both studies, and perform exploratory analysis on the gender categories study.
Does hearing a formal explanation increase essentialism of the category mentioned?
The target hypothesis is that those who hear a formal explanation will demonstrate greater essentialism than those who hear a control explanation.
The planned analysis is to reproduce the original analyses and findings from Muradoglu et al by building linear models and comparing them using ANOVAs. For Experiment 1 (animal), the analysis will use a linear model to investigate a main effect of condition. For Experiment 2 (social), the analysis will use linear models to investigate a main effect of condition, a main effect of age, and the interaction between the two. Subset analysis will be conducted investigating a main effect of condition within the 5yo age group and within the 6yo age group.
The materials and data for Muradoglu et al. (2019) were obtained by email from Melis Muradoglu, the first author on the study, on December 4, 2018. The procedure, analysis plan, and target results to reproduce were taken from the abstract for Muradoglu et al. (2019), which was obtained by email from Kristan Marchak, one of the authors on the study, on October 10, 2018. The abstract is available in the papers folder of this project repository.
In Experiment 1 (animal categories), 5 and 6-year-olds (n=103) completed 4 trials. In each trial, children were introduced to a known animal (e.g. a giraffe), and either heard a formal explanation (e.g. “It likes to sleep standing up. because it’s a giraffe”) or a control explanation (e.g. “It’s a giraffe. and it likes to sleep standing up.”) of a novel behavior or novel behavioral preference. Experiment 2 (social categories, specifically gender) used the same setup but introduced children (n=93) to 4 girls.
In both experiments, participants answered 5 measures of essentialism after each of the 4 trials: stability in the future, stability in the past, innateness when environment is switched, innateness when family tries to stop the property, and inductive potential.
In Experiment 1 (animal), there was a main effect of explanation, such that 5 and 6-year-olds who heard the formal explanation had higher measures of essentialism than those who heard the control statement.
In Experiment 2 (social), contrary to expectations, there was no main effect of explanation. There was an unanticipated interaction between explanation and age, such that the 6-year-olds who heard the formal explanation had higher essentialism measures than the 6-year-olds who heard the control statement, and the 5-year-olds had the same measure of essentialism for both explanations.
Muradoglu et al. (2019) conclude that formal explanations may be a cue for essentialism at age 5 for animal categories and starting at age 6 for gender.
# import data
df.formex.animal <- read_csv("../../data/MuradogluEtAl_2019_animal_data.csv")
Parsed with column specification:
cols(
subj = col_character(),
ctrb = col_double(),
gender = col_character(),
age = col_double(),
age_c = col_double(),
formex = col_double(),
female = col_double(),
question = col_double(),
item = col_double(),
response = col_double()
)
df.formex.social <- read_csv("../../data/MuradogluEtAl_2019_social_data.csv")
Parsed with column specification:
cols(
subj = col_character(),
ctrb = col_character(),
gender = col_character(),
age = col_double(),
formex = col_double(),
female = col_double(),
question = col_double(),
item = col_double(),
response = col_double()
)
# check counts
n.animal <- n_distinct(df.formex.animal$subj)
n.animal == 103
n.social <- n_distinct(df.formex.social$subj)
n.social == 93
[1] FALSE
[1] TRUE
The animal data was observed to be incomplete, having data from n = 72, instead of n = 103 as reported. The social data was observed to be complete, having data from n = 93, which was the same as the reported n = 93.
# combine data
## delete age_c variable to make columns the same in datasets
df.formex.animal <- df.formex.animal %>%
select(-age_c)
## add domain variable
df.formex.animal <- df.formex.animal %>%
mutate(domain = "animal")
df.formex.social <- df.formex.social %>%
mutate(domain = "social")
## bind datasets
df.formex <- rbind(df.formex.animal, df.formex.social)
# recode variables
df.formex <- df.formex %>%
rename(explanation = formex) %>%
mutate(question = recode(question,
"1" = "stability_past",
"2" = "stability_future",
"3" = "innateness_switch",
"4" = "innateness_stop",
"5" = "inductivePotential"),
explanation = recode(explanation,
"0" = "control",
"1" = "formal"),
item = if_else(df.formex$domain == "animal",
(recode(df.formex$item,
"1" = "pref_giraffe.sleepStandingUp",
"2" = "pref_turtle.eatLettuce",
"3" = "behavior_owl.cleansWithBeak",
"4" = "behavior_elephant.flapEars")),
(recode(df.formex$item,
"1" = "behavior_rideWhiteHorse",
"2" = "pref_booksSwitzerland",
"3" = "behavior_sockFirst",
"4" = "pref_eatBlueberries")))) %>%
separate(item, c("item_type", "item"), "_")
df.formex.animal <- df.formex %>%
filter(domain == "animal")
df.formex.social <- df.formex %>%
filter(domain == "social")
# Essentialism per subject
df.subject <- df.formex %>%
group_by(domain, subj, age, explanation) %>%
summarize(essentialism = mean(response, na.rm=TRUE),
sd = sd(response, na.rm=TRUE))
df.subject.social <- df.subject %>%
filter(domain == "social")
df.subject.animal <- df.subject %>%
filter(domain == "animal")
# Descriptive summary: essentialism by domain and explanation
df.summary <- df.formex %>%
group_by(domain, explanation) %>%
summarize(avg = mean(response, na.rm = TRUE),
sd = sd(response, na.rm = TRUE),
n = length(unique(subj)))
df.summary
# A tibble: 4 x 5
# Groups: domain [2]
domain explanation avg sd n
<chr> <chr> <dbl> <dbl> <int>
1 animal control 0.644 0.467 36
2 animal formal 0.731 0.430 36
3 social control 0.590 0.475 48
4 social formal 0.645 0.463 45
In Experiment 1 (animal), participants in the formal explanation group tended to have higher essentialism scores (M = 0.73, SD = 0.43) than those in the control explanation group (M = 0.64, SD = 0.47). These summary statistics are similar but not exactly the same as the original group means reported, where participants in the formal explanation group tended to have higher essentialism scores (M = 0.72) than those in the control explanation group (M = 0.65). The abstract did not report SDs. The small differences can likely be attributed to the incomplete data for Experiment 1.
In Experiment 2 (social), participants in the formal explanation group also tended to have higher essentialism scores (M = 0.64, SD = 0.46) than those in the control explanation group (M = 0.59, SD = 0.48). The abstract did not report the original group means or SDs, likely because the main effect of condition did not turn out significant in analysis.
Here are the original plots from Muradoglu et al. (2019) for Experiment 1 and Experiment 2, respectively.
Here are attempts at reproducing the above plots.
# Plot of age vs essentialism by condition, faceted by domain
ggplot(df.subject, aes(x = age, y = essentialism, color = explanation)) +
facet_wrap(~ domain) +
geom_point(alpha = 0.3) +
labs(x="Age (years)",
y="Essentialism (all measures)") +
geom_smooth(aes(fill = explanation), method = "lm") +
# Essentialism compound measure is 0 to 1 scale
scale_y_continuous(limits=c(0,1)) +
ggtitle("Age vs essentialism (all measures) by condition") +
theme(strip.text.x = element_text(size = 14), panel.spacing = unit(2, "lines"))
ggsave("essentialismCondition_domain.png", width = 10, path = "../../figures")
Saving 10 x 5 in image
The general pattern of data looks similar, where there seems like there might be a boost from formal explanations in Experiment 1 (animal) - although the tail end of ages near 6yo look almost overlapping compared to the boost that is sustained throughout ages in the original plot - and where there appears to be an interaction in Experiment 2 (social).
# EXP 1: animals
## main effect of explanation -> not quite reproducing
fit.animal.compact <- lm(formula = essentialism ~ 1, data = df.subject.animal)
fit.animal.expl <- lm(formula = essentialism ~ explanation, data = df.subject.animal)
animal.expl <- anova(fit.animal.compact, fit.animal.expl) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
## main effect of age -> not quite reproducing
fit.animal.age <- lm(formula = essentialism ~ age, data = df.subject.animal)
animal.age <- anova(fit.animal.compact, fit.animal.age) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
## no interaction of explanation and age
fit.animal.expl.age <- lm(formula = essentialism ~ explanation + age, data = df.subject.animal)
fit.animal.expl.age.explAgeInt <- lm(formula = essentialism ~ explanation * age, data = df.subject.animal)
animal.explAgeInt <- anova(fit.animal.expl.age, fit.animal.expl.age.explAgeInt) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
For Experiment 1 (animal), ANOVAs showed that there was a trend towards a main effect of explanation, p = 0.06. This p-value is higher the reported p-value of p = 0.039, and indeed remains above the p < 0.05 alpha threshold for statistical significance. There was also a trend towards a main effect of age, p = 0.12, compared with the original p = 0.05, and no interaction between explanation and age, p = 0.28, compared with the original p = 0.60.
These reproducibility differences can likely be attributed to incomplete data for Experiment 1.
# EXP 2: gender
## no main effect of explanation
fit.social.compact <- lm(formula = essentialism ~ 1, data = df.subject.social)
fit.social.expl <- lm(formula = essentialism ~ explanation, data = df.subject.social)
social.expl <- anova(fit.social.compact, fit.social.expl) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
## main effect of age
fit.social.age <- lm(formula = essentialism ~ age, data = df.subject.social)
social.age <- anova(fit.social.compact, fit.social.age) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
## interaction of explanation and age
fit.social.expl.age <- lm(formula = essentialism ~ explanation + age, data = df.subject.social)
fit.social.expl.age.explAgeInt <- lm(formula = essentialism ~ explanation * age, data = df.subject.social)
social.explAgeInt <- anova(fit.social.expl.age, fit.social.expl.age.explAgeInt) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
For Experiment 2 (social), ANOVAs showed that there was a trend towards a main effect of explanation, p = 0.13. This p-value is similar but slightly different from the reported p-value of p = 0.11, although it reproduces the general conclusion that there is no main effect of explanation. There was a siginificant main effect age, p = 0.02, compared with the original p = 0.003, and an interaction between explanation and age, p = 0.05, compared with the original p = 0.044.
These reproducibility differences are more puzzling because the data for Experiment 2 is complete. Nonetheless, the general conclusions are still supported: there is a significant interaction between condition and age, but no significant main effect of explanation.
Muradoglu et al. (2019) followed up on this analysis by looking for a main effect of explanation in 5-year-old and 6-year-old age subsets, which I attempt to reproduce here.
## subset 6yo: main effect of explanation
fit.social.compact.6yo <- lm(formula = essentialism ~ 1, data = filter(df.subject.social, age >= 6))
fit.social.expl.6yo <- lm(formula = essentialism ~ explanation, data = filter(df.subject.social, age >= 6))
social.expl.6yo <- anova(fit.social.compact.6yo, fit.social.expl.6yo) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
## subset 5yo: no main effect of explanation
fit.social.compact.5yo <- lm(formula = essentialism ~ 1, data = filter(df.subject.social, age < 6))
fit.social.expl.5yo <- lm(formula = essentialism ~ explanation, data = filter(df.subject.social, age < 6))
social.expl.5yo <- anova(fit.social.compact.5yo, fit.social.expl.5yo) %>%
tidy()
Warning: Unknown or uninitialised column: 'term'.
ANOVAs showed that among 6-year-olds, there was a main effect of explanation, p = 0.02, compared to the original p = 0.011. Among the 5-year-olds, there was not a main effect of explanation, p = 0.95, compared to the original p = 0.999. The general conclusion that 6-year-olds, but not 5-year-olds, demonstrated an essentialism boost from formal explanations was reproduced, despite slight differences in p-values.
Since the data from Experiment 2 (social) are complete, and the general conclusions were reproduced, and since the results from Experiment 2 (social) are results I am following up on in my own work (my FYP), I will focus on the exploring the data from Experiment 2 (social).
# Normality tests: check if essentialism is normally distributed
ggplot(df.subject.social, aes(x = essentialism)) +
geom_density()
ggsave("social_normality_density.png", path = "../../figures")
Saving 7 x 5 in image
ggplot(df.subject.social, aes(x = essentialism, fill = explanation)) +
geom_density(alpha = 0.5)
ggsave("social_normality_density_explanation.png", path = "../../figures")
Saving 7 x 5 in image
qqnorm(df.subject.social$essentialism);qqline(df.subject.social$essentialism, col = 2)
Density and qq plots demonstrate that the essentialism average measures is not perfectly normally distributed. Concerns about normality led me to explore bootstrapping the data.
# calculate mean of a sample
fun.calculate_mean = function(data, indices) {
resampled_data = data[indices, ]$response # resample the data according to the indices passed in
this_mean = mean(resampled_data)
return(this_mean)
}
# run bootstraps
boot_results_social_formal = boot(data = filter(df.formex.social, explanation == "formal"),
statistic = fun.calculate_mean,
R = 2000)
boot_results_social_control = boot(data = filter(df.formex.social, explanation == "control"),
statistic = fun.calculate_mean,
R = 2000)
# bootstrap CI
boot.ci.social.formal <- boot.ci(boot_results_social_formal, type = "bca")
boot.ci.social.control <- boot.ci(boot_results_social_control, type = "bca")
# pull CI values
social_formal_ci_high <- boot.ci.social.formal$bca[5]
social_formal_ci_low <- boot.ci.social.formal$bca[4]
social_control_ci_high <- boot.ci.social.control$bca[5]
social_control_ci_low <- boot.ci.social.control$bca[4]
ci_plot <- tibble(
explanation = c("formal", "control"),
essentialism = c((social_formal_ci_high + social_formal_ci_low)/2, (social_control_ci_high + social_control_ci_low)/2),
ci = c(((social_formal_ci_high - social_formal_ci_low)/2), ((social_control_ci_high - social_control_ci_low)/2))
)
# Social: plot of essentialism by explanation, with bootstrap confidence intervals
ggplot(df.subject.social, aes(x = explanation, y = essentialism, color = explanation)) +
geom_point(alpha = 0.3, position = position_jitter(width = 0.15)) +
geom_linerange(data = ci_plot,
aes(ymin = essentialism - ci, ymax = essentialism + ci),
color = "black",
size = 0.75,
position = position_dodge(width = 0.8)) +
stat_summary(fun.y = "mean",
position = position_dodge(width = 0.8),
geom = "point",
color = "black",
shape = 21,
size = 3) +
labs(y="Essentialism (all measures)") +
ggtitle("Essentialism by condition, with 95% bootstrapped confidence intervals") +
# Essentialism compound measure is 0 to 1 scale
scale_y_continuous(limits=c(0,1))
Warning: Removed 1 rows containing missing values (geom_point).
ggsave("essentialismCondition_social_bootstrap.png", width = 5, path = "../../figures")
Saving 5 x 5 in image
Warning: Removed 1 rows containing missing values (geom_point).
This plot is a straightforward plot of essentialism by condition, with 95% bootstrapped confidence intervals. There is certainly a trend where those who heard formal explanations show higher essentialism than control explanations, but there is also a very slight overlap between the 95% bootstrapped confidence intervals.
I then ran a permutation test to find the p-value of the group mean difference.
set.seed(1)
n_permutations = 500
# our actual observed difference
difference_actual = df.subject.social %>%
group_by(explanation) %>%
summarize(mean = mean(essentialism)) %>%
pull(mean) %>%
diff()
# permutation function
func_permutations = function(df){
df %>%
ungroup() %>%
mutate(permuted = sample(explanation)) %>%
group_by(permuted) %>%
summarize(mean = mean(essentialism)) %>%
pull(mean) %>%
diff()
}
# data frame with permutation results
df.permutations = tibble(
permutation = 1:n_permutations,
mean_difference = replicate(n = n_permutations, func_permutations(df.subject.social))
)
# plot the distribution of the bootstrapped differences, compare to our observed difference
ggplot(data = df.permutations, aes(x = mean_difference)) +
geom_histogram(aes(y = stat(density)),
color = "black",
fill = "lightblue",
binwidth = 0.025) +
stat_density(geom = "line",
size = 1.5,
bw = 0.025) +
geom_vline(xintercept = difference_actual, color = "red", size = 1) +
labs(x = "difference between means") +
scale_x_continuous(breaks = seq(-.5, .5, 0.25),
labels = seq(-.5, .5, 0.25),
limits = c(-.5, .5)) +
coord_cartesian(expand = F, clip = "off")
Warning: Removed 2 rows containing missing values (geom_bar).
ggsave("social_condition_permutationTest.png")
Saving 7 x 5 in image
Warning: Removed 2 rows containing missing values (geom_bar).
# calculate p-value of our observed difference
p.value <- df.permutations %>%
summarize(p_value = sum(mean_difference > difference_actual)/n()) %>%
pull(p_value)
A permutation test found p = 0.064, which is slightly lower than the p = 0.11 originally reported. Nonetheless, this p-value remains above the alpha threshold of 0.05 for statistical significance.
I next examined the hypothesis that formal explanations would boost essentialism over control explanations using Bayesian data analysis, to compare with the confirmatory results obtained by frequentist data analysis.
I constructed a Bayesian model that predicts essentialism with a main effect of explanation.
# fit Bayesian model for essentialism ~ explanation
fit.brm.social.compact <- brm(essentialism ~ 1,
data = df.subject.social,
seed = 1,
iter = 10000,
save_all_pars = T,
file = "fit.brm.social.compact")
fit.brm.social.expl <- brm(essentialism ~ 1 + explanation,
data = df.subject.social,
seed = 1,
iter = 10000,
save_all_pars = T,
file = "fit.brm.social.expl")
summary(fit.brm.social.expl)
Family: gaussian
Links: mu = identity; sigma = identity
Formula: essentialism ~ 1 + explanation
Data: df.subject.social (Number of observations: 93)
Samples: 4 chains, each with iter = 10000; warmup = 5000; thin = 1;
total post-warmup samples = 20000
Population-Level Effects:
Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
Intercept 0.59 0.03 0.54 0.64 17455 1.00
explanationformal 0.05 0.04 -0.02 0.13 18021 1.00
Family Specific Parameters:
Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
sigma 0.17 0.01 0.15 0.20 16746 1.00
Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample
is a crude measure of effective sample size, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).
We can run a sanity check on the Bayesian model by plotting trace plots, an autocorrelation plot, and a posterior predictive check.
set.seed(1)
## plot model
plot(fit.brm.social.expl)
ggsave("brm_social_expl_plot.png", path = "../../figures")
Saving 7 x 5 in image
## trace plot for explanationformal parameter
fit.brm.social.expl %>%
spread_draws(b_explanationformal) %>%
clean_names() %>%
mutate(chain = as.factor(chain)) %>%
ggplot(aes(x = iteration, y = b_explanationformal, group = chain, color = chain)) +
geom_line()
ggsave("brm_social_expl_trace_explanationformal.png", path = "../../figures")
Saving 7 x 5 in image
The trace plots look random per chain, which is a positive indicator for the trustworthiness of this model.
## autocorrelation plot
variables <- fit.brm.social.expl %>% get_variables() %>% .[1:4]
fit.brm.social.expl %>%
posterior_samples() %>%
mcmc_acf(pars = variables,
lags = 4)
ggsave("brm_social_expl_autocorrelation.png", path = "../../figures")
Saving 7 x 5 in image
The autocorrelations decrease as lag increases, which signals that the model is getting independent samples from the posterior, which is another positive indicator for the trustworthiness of this model.
## posterior predictive check
pp_check(fit.brm.social.expl, nsamples = 100)
ggsave("brm_social_expl_ppcheck.png", path = "../../figures")
Saving 7 x 5 in image
The posterior predictive check shows that the model does a decent job of following the shape of the data, which is yet another positive indicator for the truthworthiness of this model.
Having established the truthworthiness of the model, we can examine the posteriors generated.
## report parameter estimates
fit.brm.social.expl.tidy <- fit.brm.social.expl %>%
tidy()
## visualize posteriors
set.seed(1)
fit.brm.social.expl %>%
posterior_samples() %>%
select(-lp__) %>%
gather("variable", "value") %>%
ggplot(data = .,
mapping = aes(y = variable, x = value)) +
geom_halfeyeh()
ggsave("brm_social_expl_posteriors.png", path = "../../figures")
Saving 7 x 5 in image
## compute MAP, 95% density interval
fit.brm.social.expl %>%
posterior_samples() %>%
clean_names() %>%
select(starts_with("b_"), sigma) %>%
mode_hdi() %>%
gather("index", "value", -c(.width:.interval)) %>%
select(index, value) %>%
mutate(index = ifelse(str_detect(index, fixed(".")), index, str_c(index, ".mode"))) %>%
separate(index, into = c("parameter", "type"), sep = "\\.") %>%
spread(type, value) %>%
arrange(desc(parameter)) %>%
kable(digits = 2) %>%
kable_styling(bootstrap_options = "striped",
full_width = F)
parameter | lower | mode | upper |
---|---|---|---|
sigma | 0.15 | 0.17 | 0.20 |
b_intercept | 0.54 | 0.59 | 0.64 |
b_explanationformal | -0.02 | 0.06 | 0.13 |
Participants who heard a control explanation are estimated to have an essentialism measure of 0.59 (95% credible interval: 0.55 to 0.63), and participants who heard a formal explanation are estimated to have an essentialism measure of 0.65 (95% credible interval: 0.59 to 0.7).
## test hypothesis that formal explanation > control explanation
set.seed(1)
fit.brm.social.expl %>%
posterior_samples() %>%
select(b_explanationformal) %>%
gather("variable", "value") %>%
ggplot(data = .,
mapping = aes(y = variable, x = value)) +
geom_halfeyeh() +
geom_vline(xintercept = 0,
color = "red")
ggsave("brm_social_expl_hypothesis.png", path = "../../figures")
Saving 7 x 5 in image
post.prob.social.expl <- hypothesis(fit.brm.social.expl,
hypothesis = "explanationformal + Intercept > Intercept")$hypothesis$Post.Prob
## Bayes factor for null vs difference between conditions
bf.social.expl <- bayes_factor(fit.brm.social.expl, fit.brm.social.compact)$bf
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4
A hypothesis test reveals a 93.48% posterior probability that the formal explanation condition increases essentialism over the control condition. Comparison with a compact null model produces a Bayes factor of 0.29, which is considered anecdotal evidence for the null hypothesis over the target hypothesis. (Note to readers: I ran this the other day and thought I had gotten a BF around 30, not sure how the BF dropped so low now!)
As Muradoglu et al. (2019) have found, formal explanations can cue essentialism about gender, and perhaps about animal categories as well, in preschool children.
The key finding from Muradoglu et al. (2019), Experiment 2 about gender categories was qualitatively reproduced using their same analyses: formal explanations boost gender essentialism in 6-year-olds but not 5-year-olds.
Follow-up exploratory analyses using bootstrapping, permutation tests, and Bayesian data analysis found suggestive evidence that formal explanations may boost gender essentialism for all participants, but not strong evidence.
There were limitations in understanding the data from Experiment 1 on animal categories because the data I was working with was incomplete, for unknown reasons.
Further exploration could investigate effects by domain (animal vs social), by item (learning about a novel behavior vs learning about a behavioral preference), and by essentialism DV (each of the 5 DVs). One might imagine that children are more ready to essentialize animal than social categories, to reason in an essentialist manner about behavior rather than behavioral preference, and that the essentialism DVs would hang together, but these are open empirical questions.
Further exploration could also run Bayesian data analysis using priors from the generics literature, since generics are well-established as a linguistic cue for essentialism, and their essentialism boosting effects are widely documented.
In my own work, I would like to follow up by considering whether formal explanations always cue essentialism. I have noticed that we sometimes use and interpret formal explanations in a non-essentialist manner. here are just a few natural sounding formal explanations that do not seem to convey an essentialist reading:
Instead, it may be that formal explanations are open to a variety of interpretation, and that speakers and listeners rely on world knowledge about the category, the property, the social context we are operating within to reason about the most likely interpretation. In some cases, this interpretation might be an essentialist interpretation. But in other cases, this interpretation might be an alternative interpration, for an example, one that references the social-structural factors operating on the category (e.g. social attitudes about dogs and food for human consumption, structural inequalities affecting women and minorities).
Auguie, Baptiste. 2017. GridExtra: Miscellaneous Functions for “Grid” Graphics. https://CRAN.R-project.org/package=gridExtra.
Bates, Douglas, and Martin Maechler. 2018. Matrix: Sparse and Dense Matrix Classes and Methods. https://CRAN.R-project.org/package=Matrix.
Bates, Douglas, Martin Maechler, Ben Bolker, and Steven Walker. 2019. Lme4: Linear Mixed-Effects Models Using ’Eigen’ and S4. https://CRAN.R-project.org/package=lme4.
Bürkner, Paul-Christian. 2018. Brms: Bayesian Regression Models Using ’Stan’. https://CRAN.R-project.org/package=brms.
Canty, Angelo, and Brian Ripley. 2017. Boot: Bootstrap Functions (Originally by Angelo Canty for S). https://CRAN.R-project.org/package=boot.
Eddelbuettel, Dirk, Romain Francois, JJ Allaire, Kevin Ushey, Qiang Kou, Nathan Russell, Douglas Bates, and John Chambers. 2019. Rcpp: Seamless R and C++ Integration. https://CRAN.R-project.org/package=Rcpp.
Firke, Sam. 2018. Janitor: Simple Tools for Examining and Cleaning Dirty Data. https://CRAN.R-project.org/package=janitor.
Gabry, Jonah, and Tristan Mahr. 2018. Bayesplot: Plotting for Bayesian Models. https://CRAN.R-project.org/package=bayesplot.
Gelman, Susan A. 2003. The Essential Child Origins of Essentialism in Everyday Thought. Oxford Series in Cognitive Dev.
Gelman, Susan A, Andrei Cimpian, and Steven O Roberts. 2018. “How Deep Do We Dig? Formal Explanations as Placeholders for Inherent Explanations.” Cognitive Psychology 106 (August): 43–59. doi:10.1016/j.cogpsych.2018.08.002.
Gelman, Susan A, Elizabeth A Ware, and Felicia Kleinberg. 2010. “Effects of Generic Language on Category Content and Structure.” Cognitive Psychology 61 (3). Elsevier: 273–301.
Haslam, Nick, Louis Rothschild, and Donald Ernst. 2002. “Are Essentialist Beliefs Associated with Prejudice?” British Journal of Social Psychology 41 (1). Wiley Online Library: 87–100.
Henry, Lionel, and Hadley Wickham. 2019. Purrr: Functional Programming Tools. https://CRAN.R-project.org/package=purrr.
Kay, Matthew. 2019. Tidybayes: Tidy Data and ’Geoms’ for Bayesian Models. https://CRAN.R-project.org/package=tidybayes.
Kuznetsova, Alexandra, Per Bruun Brockhoff, and Rune Haubo Bojesen Christensen. 2019. LmerTest: Tests in Linear Mixed Effects Models. https://CRAN.R-project.org/package=lmerTest.
Medin, Douglas L, and Andrew Ortony. 1989. “Psychological Essentialism.” In Similarity and Analogical Reasoning, edited by Stella Vosniadou and Andrew Ortony, 179–95. Cambridge University Press.
Muradoglu, Melis, Kristan Marchak, Andrei Cimpian, and Susan A Gelman. 2019. “Do Formal Explanations Promote Essentialist Reasoning in Children?”
Müller, Kirill, and Hadley Wickham. 2019. Tibble: Simple Data Frames. https://CRAN.R-project.org/package=tibble.
Prasada, Sandeep, and Elaine M Dillingham. 2006. “Principled and Statistical Connections in Common Sense Conception.” Cognition 99 (1). Elsevier: 73–112.
———. 2009. “Representation of Principled Connections a Window onto the Formal Aspect of Common Sense Conception.” Cognitive Science 33 (3). Wiley Online Library: 401–48.
R Core Team. 2018. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Rhodes, Marjorie, and Susan A Gelman. 2009. “A Developmental Examination of the Conceptual Structure of Animal, Artifact, and Human Social Categories Across Two Cultural Contexts.” Cognitive Psychology 59 (3). Elsevier: 244–74.
Rhodes, Marjorie, Sarah-Jane Leslie, and Christina M Tworek. 2012. “Cultural Transmission of Social Essentialism.” Proceedings of the National Academy of Sciences 109 (34). National Acad Sciences: 13526–31.
Robinson, David, and Alex Hayes. 2018. Broom: Convert Statistical Analysis Objects into Tidy Tibbles. https://CRAN.R-project.org/package=broom.
Wickham, Hadley. 2017. Tidyverse: Easily Install and Load the ’Tidyverse’. https://CRAN.R-project.org/package=tidyverse.
———. 2019a. Forcats: Tools for Working with Categorical Variables (Factors). https://CRAN.R-project.org/package=forcats.
———. 2019b. Modelr: Modelling Functions That Work with the Pipe. https://CRAN.R-project.org/package=modelr.
———. 2019c. Stringr: Simple, Consistent Wrappers for Common String Operations. https://CRAN.R-project.org/package=stringr.
Wickham, Hadley, and Lionel Henry. 2018. Tidyr: Easily Tidy Data with ’Spread()’ and ’Gather()’ Functions. https://CRAN.R-project.org/package=tidyr.
Wickham, Hadley, Winston Chang, Lionel Henry, Thomas Lin Pedersen, Kohske Takahashi, Claus Wilke, and Kara Woo. 2018. Ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. https://CRAN.R-project.org/package=ggplot2.
Wickham, Hadley, Romain François, Lionel Henry, and Kirill Müller. 2019. Dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr.
Wickham, Hadley, Jim Hester, and Romain Francois. 2018. Readr: Read Rectangular Text Data. https://CRAN.R-project.org/package=readr.
Xie, Yihui. 2018. Bookdown: Authoring Books and Technical Documents with R Markdown. https://CRAN.R-project.org/package=bookdown.
———. 2019. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://CRAN.R-project.org/package=knitr.
Zhu, Hao. 2019. KableExtra: Construct Complex Table with ’Kable’ and Pipe Syntax. https://CRAN.R-project.org/package=kableExtra.