Experiment 1
We created a paradigm to independently manipulate expectations about speaker plausibility and perceptual noise. We introduced preschoolers (and adults) to either a Plausible or Implausible Speaker who initially uttered unambiguously different sentences like “my cat has three little [kittens/hammers].” Participants were then asked to resolve the intended meaning for ambiguous sentences like the “I had carrots and bees for dinner,” which could either be produced by a perceptual error, or could convey implausible content. If children integrate speaker expectations and channel noise, their interpretations should be a product of both.
Load in data
exp1_child_data <- read_csv("data/exp1_child.csv")
exp1_adult_data <- read_csv("data/exp1_adult.csv")
exp1_data <- bind_rows(exp1_child_data, exp1_adult_data) %>%
mutate(response = factor(response, levels = c("Implausible", "Plausible")))
Munge data
child_demo_data <- exp1_child_data %>%
distinct(subject, .keep_all = TRUE) %>%
group_by(condition) %>%
summarise(n = n(),
num_girls = sum(sex == "female"),
min_age = min(age),
mean_age = mean(age),
max_age = max(age))
adult_demo_data <- exp1_adult_data %>%
distinct(subject, .keep_all = TRUE) %>%
group_by(condition) %>%
summarise(n = n())
exp1_group_data <- exp1_data %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(group,condition,trial_type) %>%
multi_boot_standard("response", na.rm = T)
Demographics
kable(child_demo_data,
col.names = c("Speaker Condition", "Num Participants",
"Num Girls","Min Age","Mean Age","Max. Age"),
caption = "Child demographic data")
Child demographic data
Implausible |
20 |
10 |
4.08 |
4.74 |
5.40 |
Plausible |
23 |
12 |
4.00 |
4.63 |
5.26 |
kable(adult_demo_data,
col.names = c("Speaker Condition", "Num Participants"),
caption = "Adult demographic data")
Adult demographic data
Implausible |
23 |
Plausible |
27 |
Exposure trials
exp1_group_exposure <- exp1_data %>%
filter(trial_type == "Exposure") %>%
group_by(group) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(model %>% map(function(x) tidy_lmer(x, c("Intercept", "Plausible")))) %>%
arrange(group)
kable(exp1_group_exposure)
adult |
Intercept |
-3.81 |
0.769 |
-4.95 |
< .001 |
*** |
adult |
Plausible |
9.41 |
1.613 |
5.83 |
< .001 |
*** |
child |
Intercept |
-1.91 |
0.342 |
-5.57 |
< .001 |
*** |
child |
Plausible |
4.54 |
0.548 |
8.28 |
< .001 |
*** |
exp1_exposure_es <- exp1_data %>%
filter(trial_type == "Exposure") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(group, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$group) %>%
map(mes_df) %>%
bind_rows(.id = "group")
kable(exp1_exposure_es)
adult |
24.30 |
19.4 |
29.22 |
Plausible |
child |
5.56 |
4.2 |
6.92 |
Plausible |
exp1_exposure_lm <- glmer(response ~ group * condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp1_data,trial_type == "Exposure"))
kable(tidy_lmer(exp1_exposure_lm, c("Intercept", "Children", "Plausible",
"Children x Plausible")))
Intercept |
-3.86 |
0.542 |
-7.13 |
< .001 |
*** |
Children |
1.97 |
0.590 |
3.33 |
0.001 |
*** |
Plausible |
9.52 |
1.210 |
7.87 |
< .001 |
*** |
Children x Plausible |
-5.01 |
1.217 |
-4.12 |
< .001 |
*** |
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model.
exp1_exposure_lm_simple <- glmer(response ~ group + condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp1_data,trial_type == "Exposure"))
kable(tidy_anova(anova(exp1_exposure_lm_simple, exp1_exposure_lm)))
exp1_exposure_lm_simple |
5 |
339 |
362 |
-164 |
329 |
|
|
|
|
exp1_exposure_lm |
6 |
315 |
343 |
-152 |
303 |
25.741 |
1 |
< .001 |
*** |
ggplot(filter(exp1_group_data,trial_type == "Exposure"),
aes(x=condition, y=mean, fill=group)) +
facet_grid(. ~ group) +
geom_bar(stat="identity",position=position_dodge(1))+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
scale_fill_manual(values = colors) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nSpeaker Condition")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
Thus, both children and adults were sensitive to the speaker manipulation during Exposure trials, selecting the appropriate referent whether or not the request was implausible, although adults selected the correct referent more often in both conditions.
Test trials
exp1_group_test <- exp1_data %>%
filter(trial_type == "Test") %>%
group_by(group) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(model %>% map(function(x) tidy_lmer(x, c("Intercept", "Plausible")))) %>%
arrange(group)
kable(exp1_group_test)
adult |
Intercept |
-4.185 |
1.013 |
-4.13 |
< .001 |
*** |
adult |
Plausible |
3.112 |
0.874 |
3.56 |
< .001 |
*** |
child |
Intercept |
-0.464 |
0.323 |
-1.44 |
0.151 |
|
child |
Plausible |
1.099 |
0.311 |
3.53 |
< .001 |
*** |
exp1_test_es <- exp1_data %>%
filter(trial_type == "Test") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(group, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$group) %>%
map(mes_df) %>%
bind_rows(.id = "group")
kable(exp1_test_es)
adult |
1.09 |
0.48 |
1.70 |
Plausible |
child |
1.10 |
0.44 |
1.76 |
Plausible |
exp1_test_lm <- glmer(response ~ group * condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp1_data,trial_type == "Test"))
kable(tidy_lmer(exp1_test_lm, c("Intercept", "Children", "Plausible",
"Children x Plausible")))
Intercept |
-3.15 |
0.606 |
-5.19 |
< .001 |
*** |
Children |
2.62 |
0.792 |
3.31 |
0.001 |
*** |
Plausible |
2.33 |
0.530 |
4.40 |
< .001 |
*** |
Children x Plausible |
-1.05 |
0.693 |
-1.51 |
0.130 |
|
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model.
exp1_test_lm_simple <- glmer(response ~ group + condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp1_data,trial_type == "Test"))
kable(tidy_anova(anova(exp1_test_lm_simple, exp1_test_lm)))
exp1_test_lm_simple |
5 |
690 |
713 |
-340 |
680 |
|
|
|
|
exp1_test_lm |
6 |
690 |
717 |
-339 |
678 |
2.341 |
1 |
0.126 |
|
#quartz(width=6,height=4)
ggplot(filter(exp1_group_data,trial_type == "Test"),
aes(x=condition, y=mean, fill=group)) +
facet_grid(. ~ group) +
geom_bar(stat="identity",position=position_dodge(1))+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
scale_fill_manual(values = colors) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nSpeaker Condition")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
Thus, children and adults, to the same degree, were more likely to select the plausible referent on ambiguous Test trials when the speaker had previously referred to plausible referent on unambiguous Exposure trials. When children and adults were exposed to a speaker who was likely to produce semantically implausible utterances (e.g. “my cat has three little hammers”), they were more likely to interpret ambiguous utterances literally instead of error-correcting to a more semantically plausible alternative. Intriguingly, the size of this adaptation was nearly identical in both groups, suggesting that 4- and 5-year-olds are already adapting as rapidly as adults. Children were, however, more likely overall to pick the plausible referent during ambiguous test trials, suggesting that they generally rely more on their expectations than do adults. ***
Experiment 2
Experiment 2 replicates Experiment 1 in a larger and developmentally-broader sample of children. We ask two related questions: (1) Does the use of speaker-expectations increase over development, and (2) if so, is due to improving abilities to form these expectations or to bring them bear in processing ambiguous utterances.
Load data
exp2_data <- read_csv("data/exp2.csv") %>%
mutate(response = factor(response, levels = c("Implausible", "Plausible")),
age_group = floor(age))
Munge data
exp2_indiv_data <- exp2_data %>%
distinct(subject, .keep_all = TRUE)
exp2_low_english <- exp2_indiv_data %>%
filter(english <= 25) %>%
nrow()
exp2_demo_data <- exp2_indiv_data %>%
filter(english > 25) %>%
group_by(condition, age_group) %>%
summarise(n = n(),
num_girls = sum(sex == "female"),
min_age = min(age),
mean_age = mean(age),
max_age = max(age))
exp2_group_data <- exp2_data %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(age_group, condition, trial_type) %>%
multi_boot_standard("response", na.rm = T)
Demographics
kable(exp2_demo_data,
col.names = c("Speaker Condition", "Age Group", "Num Participants",
"Num Girls","Min Age","Mean Age","Max. Age"),
caption = "Child demographic data")
Child demographic data
Implausible |
3 |
21 |
8 |
3.02 |
3.49 |
3.93 |
Implausible |
4 |
28 |
23 |
4.00 |
4.51 |
4.94 |
Implausible |
5 |
20 |
12 |
5.05 |
5.48 |
5.90 |
Plausible |
3 |
27 |
16 |
3.00 |
3.50 |
3.93 |
Plausible |
4 |
21 |
7 |
4.22 |
4.60 |
4.97 |
Plausible |
5 |
23 |
19 |
5.01 |
5.49 |
5.95 |
Exposure trials
exp2_age_group_exposure <- exp2_data %>%
filter(trial_type == "Exposure") %>%
group_by(age_group) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(model %>% map(function(x) tidy_lmer(x, c("Intercept", "Plausible")))) %>%
arrange(age_group)
kable(exp2_age_group_exposure)
3 |
Intercept |
-0.500 |
0.279 |
-1.79 |
0.073 |
. |
3 |
Plausible |
1.434 |
0.386 |
3.71 |
< .001 |
*** |
4 |
Intercept |
-0.943 |
0.271 |
-3.48 |
< .001 |
*** |
4 |
Plausible |
3.101 |
0.467 |
6.63 |
< .001 |
*** |
5 |
Intercept |
-1.915 |
0.385 |
-4.97 |
< .001 |
*** |
5 |
Plausible |
5.550 |
0.751 |
7.39 |
< .001 |
*** |
exp2_exposure_es <- exp2_data %>%
filter(trial_type == "Exposure") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(age_group, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$age_group) %>%
map(mes_df) %>%
bind_rows(.id = "age_group")
kable(exp2_exposure_es)
3 |
1.20 |
0.61 |
1.80 |
Plausible |
4 |
2.66 |
1.87 |
3.44 |
Plausible |
5 |
8.27 |
6.37 |
10.17 |
Plausible |
exp2_exposure_lm <- glmer(response ~ age * condition + (1|word) +
(1|subject), family = "binomial",
data = filter(exp2_data,trial_type == "Exposure"))
kable(tidy_lmer(exp2_exposure_lm, c("Intercept", "Age", "Plausible",
"Age x Plausible")))
Intercept |
2.194 |
0.788 |
2.78 |
0.005 |
** |
Age |
-0.737 |
0.176 |
-4.18 |
< .001 |
*** |
Plausible |
-6.157 |
1.181 |
-5.21 |
< .001 |
*** |
Age x Plausible |
2.116 |
0.278 |
7.61 |
< .001 |
*** |
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model. Also, because there are significant sex-imbalances across conditions, check to see whether this affects the Exposure results.
exp2_exposure_lm_simple <- glmer(response ~ age + condition + (1|word) +
(1|subject), family = "binomial",
data = filter(exp2_data,trial_type == "Exposure"))
kable(tidy_anova(anova(exp2_exposure_lm_simple, exp2_exposure_lm)))
exp2_exposure_lm_simple |
5 |
1196 |
1222 |
-593 |
1186 |
|
|
|
|
exp2_exposure_lm |
6 |
1140 |
1171 |
-564 |
1128 |
58.390 |
1 |
< .001 |
*** |
exp2_exposure_lm_sex_simple <- glmer(response ~ age * condition + sex + (1|word) +
(1|subject), family = "binomial",
data = filter(exp2_data,trial_type == "Exposure"))
exp2_exposure_lm_sex_interaction <- glmer(response ~ age * condition * sex + (1|word) +
(1|subject), family = "binomial",
data = filter(exp2_data,trial_type == "Exposure"),
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_lmer(exp2_exposure_lm_sex_simple, c("Intercept", "Age", "Plausible",
"Male", "Age x Plausible")))
Intercept |
2.237 |
0.800 |
2.796 |
0.005 |
** |
Age |
-0.741 |
0.177 |
-4.190 |
< .001 |
*** |
Plausible |
-6.158 |
1.181 |
-5.215 |
< .001 |
*** |
Male |
-0.068 |
0.215 |
-0.314 |
0.754 |
|
Age x Plausible |
2.117 |
0.278 |
7.606 |
< .001 |
*** |
kable(tidy_lmer(exp2_exposure_lm_sex_interaction, c("Intercept", "Age", "Plausible",
"Male", "Age x Plausible", "Age x Male",
"Plausible x Male", "Age x Plausible x Male")))
Intercept |
2.871 |
1.048 |
2.741 |
0.006 |
** |
Age |
-0.920 |
0.235 |
-3.919 |
< .001 |
*** |
Plausible |
-6.488 |
1.543 |
-4.204 |
< .001 |
*** |
Male |
-1.681 |
1.517 |
-1.108 |
0.268 |
|
Age x Plausible |
2.282 |
0.363 |
6.284 |
< .001 |
*** |
Age x Male |
0.470 |
0.345 |
1.362 |
0.173 |
|
Plausible x Male |
1.123 |
2.291 |
0.490 |
0.624 |
|
Age x Plausible x Male |
-0.482 |
0.544 |
-0.885 |
0.376 |
|
kable(tidy_anova(anova(exp2_exposure_lm_sex_simple,
exp2_exposure_lm_sex_interaction)))
exp2_exposure_lm_sex_simple |
7 |
1142 |
1177 |
-564 |
1128 |
|
|
|
|
exp2_exposure_lm_sex_interaction |
10 |
1141 |
1192 |
-561 |
1121 |
6.870 |
3 |
0.076 |
. |
kable(tidy_anova(anova(exp2_exposure_lm_sex_simple, exp2_exposure_lm)))
exp2_exposure_lm |
6 |
1140 |
1171 |
-564 |
1128 |
|
|
|
|
exp2_exposure_lm_sex_simple |
7 |
1142 |
1177 |
-564 |
1128 |
0.099 |
1 |
0.754 |
|
kable(tidy_anova(anova(exp2_exposure_lm_sex_interaction, exp2_exposure_lm)))
exp2_exposure_lm |
6 |
1140 |
1171 |
-564 |
1128 |
|
|
|
|
exp2_exposure_lm_sex_interaction |
10 |
1141 |
1192 |
-561 |
1121 |
6.968 |
4 |
0.138 |
|
ggplot(filter(exp2_group_data,trial_type == "Exposure"),
aes(x=condition, y=mean, fill=as.factor(age_group))) +
facet_grid(. ~ age_group) +
geom_bar(stat="identity",position=position_dodge(1))+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
scale_fill_manual(values = colors) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nSpeaker Condition")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
Older children showed a greater sensitivity to the speaker on the unambiguous Exposure trials.
Test trials
exp2_age_group_test <- exp2_data %>%
filter(trial_type == "Test") %>%
group_by(age_group) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(model %>% map(function(x) tidy_lmer(x, c("Intercept", "Plausible")))) %>%
arrange(age_group)
kable(exp2_age_group_test)
3 |
Intercept |
-0.026 |
0.202 |
-0.128 |
0.898 |
|
3 |
Plausible |
0.055 |
0.261 |
0.212 |
0.832 |
|
4 |
Intercept |
-0.424 |
0.284 |
-1.494 |
0.135 |
|
4 |
Plausible |
1.006 |
0.350 |
2.872 |
0.004 |
** |
5 |
Intercept |
-1.089 |
0.438 |
-2.486 |
0.013 |
* |
5 |
Plausible |
1.355 |
0.342 |
3.963 |
< .001 |
*** |
exp2_test_es <- exp2_data %>%
filter(trial_type == "Test") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(age_group, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$age_group) %>%
map(mes_df) %>%
bind_rows(.id = "age_group")
kable(exp2_test_es)
3 |
0.06 |
-0.49 |
0.60 |
Plausible |
4 |
0.82 |
0.22 |
1.42 |
Plausible |
5 |
1.24 |
0.57 |
1.91 |
Plausible |
exp2_test_lm <- glmer(response ~ age * condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp2_data,trial_type == "Test"))
kable(tidy_lmer(exp2_test_lm, c("Intercept", "Age", "Plausible",
"Age x Plausible")))
Intercept |
1.471 |
0.725 |
2.03 |
0.042 |
* |
Age |
-0.430 |
0.156 |
-2.75 |
0.006 |
** |
Plausible |
-1.708 |
0.937 |
-1.82 |
0.068 |
. |
Age x Plausible |
0.538 |
0.209 |
2.58 |
0.010 |
** |
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model. Also, because there are significant sex-imbalances across conditions, check to see whether this affects the Txposure results.
exp2_test_lm_simple <- glmer(response ~ age + condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp2_data,trial_type == "Test"))
kable(tidy_anova(anova(exp2_test_lm_simple, exp2_test_lm)))
exp2_test_lm_simple |
5 |
1365 |
1389 |
-677 |
1355 |
|
|
|
|
exp2_test_lm |
6 |
1360 |
1390 |
-674 |
1348 |
6.561 |
1 |
0.010 |
* |
exp2_test_lm_sex_simple <- glmer(response ~ age * condition + sex +
(1|word) + (1|subject),
family = "binomial",
data = filter(exp2_data,trial_type == "Test"))
kable(tidy_lmer(exp2_test_lm_sex_simple, c("Intercept", "Age", "Plausible",
"Male", "Age x Plausible")))
Intercept |
1.251 |
0.727 |
1.72 |
0.085 |
. |
Age |
-0.407 |
0.155 |
-2.63 |
0.009 |
** |
Plausible |
-1.730 |
0.927 |
-1.86 |
0.062 |
. |
Male |
0.318 |
0.181 |
1.76 |
0.078 |
. |
Age x Plausible |
0.540 |
0.206 |
2.61 |
0.009 |
** |
exp2_test_lm_sex_interaction <- glmer(response ~ age * condition * sex +
(1|word) + (1|subject),
family = "binomial",
data = filter(exp2_data,trial_type == "Test"),
control = glmerControl(optimizer = "bobyqa",
optCtrl = list(maxfun = 2e5)))
kable(tidy_lmer(exp2_test_lm_sex_interaction, c("Intercept", "Age", "Plausible",
"Male", "Age x Plausible",
"Age x Male", "Plausible x Male",
"Age x Plausible x Male")))
Intercept |
1.302 |
0.944 |
1.380 |
0.168 |
|
Age |
-0.419 |
0.203 |
-2.061 |
0.039 |
* |
Plausible |
-1.460 |
1.216 |
-1.200 |
0.230 |
|
Male |
0.192 |
1.396 |
0.138 |
0.890 |
|
Age x Plausible |
0.482 |
0.266 |
1.812 |
0.070 |
. |
Age x Male |
0.031 |
0.313 |
0.099 |
0.921 |
|
Plausible x Male |
-0.742 |
1.895 |
-0.391 |
0.695 |
|
Age x Plausible x Male |
0.166 |
0.426 |
0.390 |
0.696 |
|
kable(tidy_anova(anova(exp2_test_lm_sex_simple, exp2_test_lm_sex_interaction)))
exp2_test_lm_sex_simple |
7 |
1359 |
1394 |
-673 |
1345 |
|
|
|
|
exp2_test_lm_sex_interaction |
10 |
1365 |
1414 |
-672 |
1345 |
0.476 |
3 |
0.924 |
|
kable(tidy_anova(anova(exp2_test_lm_sex_simple, exp2_test_lm)))
exp2_test_lm |
6 |
1360 |
1390 |
-674 |
1348 |
|
|
|
|
exp2_test_lm_sex_simple |
7 |
1359 |
1394 |
-673 |
1345 |
3.078 |
1 |
0.079 |
. |
kable(tidy_anova(anova(exp2_test_lm_sex_interaction, exp2_test_lm)))
exp2_test_lm |
6 |
1360 |
1390 |
-674 |
1348 |
|
|
|
|
exp2_test_lm_sex_interaction |
10 |
1365 |
1414 |
-672 |
1345 |
3.554 |
4 |
0.470 |
|
#quartz(width=8,height=4)
ggplot(filter(exp2_group_data, trial_type == "Test"),
aes(x = condition, y=mean, fill=as.factor(age_group))) +
facet_grid(. ~ age_group,
labeller=as_labeller(function(value) sprintf("%s-years", value))) +
geom_bar(stat="identity",position=position_dodge(1))+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
scale_fill_manual(values = colors) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nSpeaker Condition")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
In line with previous work, these results show that 3-year-old children have trouble using top-down speaker expectations when processing ambiguous utterances. However, children appear to improve significantly over the next two years.
Older children were thus more sensitive to the speaker’s utterances on unambiguous Exposure trials, and relied more on their speaker-expectations on ambiguous Test trials. Did older children rely more on their speaker-expectations because they had built stronger expectations on Exposure trial? If so, individual differences in children’s performance on Exposure trials should explain away the effect of age on Test trials. In contrast, if the ability to leverage these expectations is improving over development, age should predict additional variance in ambiguous Test trial responses over and above children’s responses on Exposure trials.
To answer this question, we fit an additional model including the proportion of Exposure trials on which individual children had selected the plausible referent. We assume that children who more frequently selected the plausible referent in the Plausible referent in the Plausible Speaker condition, or less frequently selected the plausible referent in the Implausible Speaker condition were encoding more information about the Speaker’s plausibility.
Exposure predicts test
exp2_bykid_data <- exp2_data %>%
filter(trial_type == "Exposure") %>%
group_by(age, age_group, condition, subject) %>%
summarise(Exposure = mean(response == "Plausible")) %>%
left_join(filter(exp2_data, trial_type == "Test"))
exp2_bykid_lmer <- glmer(response ~ age + condition * Exposure + (1|subject) +
(1|word), family = "binomial", data = exp2_bykid_data,
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_lmer(exp2_bykid_lmer, c("Intercept", "Age", "Plausible",
"Exposure", "Plausible x Exposure")))
Intercept |
-1.577 |
0.647 |
-2.435 |
0.015 |
* |
Age |
0.066 |
0.117 |
0.564 |
0.573 |
|
Plausible |
1.917 |
0.566 |
3.385 |
0.001 |
*** |
Exposure |
2.840 |
0.618 |
4.595 |
< .001 |
*** |
Plausible x Exposure |
-3.323 |
0.913 |
-3.638 |
< .001 |
*** |
Compare this model to both simpler and more complex models. Also show that the same results hold when only the 4- and 5-year-olds kids were analyzed.
exp2_bykid_lmer_simple <- glmer(response ~ age + condition + Exposure + (1|subject) +
(1|word), family = "binomial", data = exp2_bykid_data,
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_anova(anova(exp2_bykid_lmer_simple, exp2_bykid_lmer)))
exp2_bykid_lmer_simple |
6 |
1359 |
1389 |
-673 |
1347 |
|
|
|
|
exp2_bykid_lmer |
7 |
1348 |
1382 |
-667 |
1334 |
13.005 |
1 |
< .001 |
*** |
exp2_bykid_lmer_3way <- glmer(response ~ age * condition * Exposure + (1|subject) +
(1|word), family = "binomial", data = exp2_bykid_data,
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_anova(anova(exp2_bykid_lmer_3way, exp2_bykid_lmer)))
exp2_bykid_lmer |
7 |
1348 |
1382 |
-667 |
1334 |
|
|
|
|
exp2_bykid_lmer_3way |
10 |
1350 |
1399 |
-665 |
1330 |
3.978 |
3 |
0.264 |
|
exp2_bykid_lmer_2way_other1 <- glmer(response ~ age * condition + Exposure +
(1|subject) + (1|word),
family = "binomial", data = exp2_bykid_data,
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_anova(anova(exp2_bykid_lmer_2way_other1, exp2_bykid_lmer)))
exp2_bykid_lmer_2way_other1 |
7 |
1359 |
1394 |
-673 |
1345 |
|
|
|
|
exp2_bykid_lmer |
7 |
1348 |
1382 |
-667 |
1334 |
11.335 |
0 |
< .001 |
*** |
exp2_bykid_lmer_2way_other2 <- glmer(response ~ age * Exposure + condition +
(1|subject) + (1|word),
family = "binomial", data = exp2_bykid_data,
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_anova(anova(exp2_bykid_lmer_2way_other2, exp2_bykid_lmer)))
exp2_bykid_lmer_2way_other2 |
7 |
1357 |
1391 |
-671 |
1343 |
|
|
|
|
exp2_bykid_lmer |
7 |
1348 |
1382 |
-667 |
1334 |
8.989 |
0 |
< .001 |
*** |
exp2_bykid_lmer_younger <- glmer(response ~ age + condition * Exposure + (1|subject) +
(1|word), family = "binomial",
data = filter(exp2_bykid_data, age >= 4),
control=glmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
kable(tidy_lmer(exp2_bykid_lmer_younger, c("Intercept", "Age", "Plausible",
"Exposure", "Plausible x Exposure")))
Intercept |
-1.237 |
1.230 |
-1.01 |
0.315 |
|
Age |
-0.056 |
0.226 |
-0.25 |
0.803 |
|
Plausible |
3.835 |
1.302 |
2.94 |
0.003 |
** |
Exposure |
3.351 |
0.781 |
4.29 |
< .001 |
*** |
Plausible x Exposure |
-5.426 |
1.647 |
-3.29 |
0.001 |
*** |
exp2_cor_data <- exp2_bykid_data %>%
group_by(age, Exposure, condition, subject) %>%
summarise(Test = mean(response == "Plausible"))
ggplot(aes(x = Exposure, y = Test, color = age), data = exp2_cor_data) +
facet_grid(~ condition) +
geom_jitter() +
geom_smooth(method = "lm") +
theme_bw(base_size=14) +
theme(panel.grid=element_blank()) +
scale_x_continuous(name = "\nExposure Proportion plausible",
limits = c(-.1, 1.1), breaks = seq(0, 1, .2)) +
scale_y_continuous(name = "Test Proportion plausible",
limits=c(-.1, 1.1), breaks = seq(0, 1, .2))
Thus, it appears that older children relied more on speaker expectations because they had formed stronger expectations rather than because they rely on expectations differently. Experiments 1 and 2 thus show that children’s reliance on speaker-expectations remains relatively constant across the 3–6 year range, but that their ability to build these expectations improves gradually across development.
Experiment 3
Experiment 3 tests a second prediction of noisy channel processing: As speech becomes noisier, and thus less reliable, children should rely more on their expectations.
Load data
exp3_data <- read_csv("data/exp3.csv") %>%
mutate(response = factor(response, levels = c("Implausible", "Plausible")),
condition = factor(condition, levels = c("Implausible", "Plausible", "Control"),
labels = c("Implausible", "Plausible",
"Implausible (Control)")))
Munge data
exp3_demo_data <- exp3_data %>%
distinct(subject, .keep_all = TRUE) %>%
group_by(condition, noise) %>%
summarise(n = n(),
num_girls = sum(sex == "female", na.rm = T),
min_age = min(age),
mean_age = mean(age),
max_age = max(age))
exp3_group_data <- exp3_data %>%
mutate(response = as.numeric(response)-1) %>%
group_by(condition,noise,trial_type) %>%
multi_boot_standard("response", na.rm = T)
Demographics
kable(exp3_demo_data,
col.names = c("Speaker Condition", "Noise Level", "Num Participants",
"Num Girls","Min Age","Mean Age","Max. Age"))
Implausible |
No Noise |
20 |
12 |
4.00 |
4.98 |
5.83 |
Implausible |
Noisy |
24 |
11 |
4.01 |
5.01 |
5.92 |
Plausible |
No Noise |
21 |
8 |
4.10 |
4.89 |
5.93 |
Plausible |
Noisy |
26 |
12 |
4.02 |
4.98 |
5.94 |
Implausible (Control) |
Noisy |
20 |
11 |
4.15 |
4.96 |
5.91 |
Exposure trials
exp3_group_exposure <- exp3_data %>%
filter(trial_type == "Exposure") %>%
group_by(noise) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(map2(model, list(c("Intercept", "Plausible", "Implausible (Control)"),
c("Intercept", "Plausible")),
function(x,y) tidy_lmer(x, y))) %>%
arrange(noise)
kable(exp3_group_exposure)
No Noise |
Intercept |
-2.882 |
0.578 |
-4.987 |
< .001 |
*** |
No Noise |
Plausible |
6.922 |
1.126 |
6.148 |
< .001 |
*** |
Noisy |
Intercept |
-1.890 |
0.358 |
-5.277 |
< .001 |
*** |
Noisy |
Plausible |
4.906 |
0.594 |
8.255 |
< .001 |
*** |
Noisy |
Implausible (Control) |
0.351 |
0.432 |
0.813 |
0.416 |
|
exp3_exposure_es <- exp3_data %>%
filter(trial_type == "Exposure") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(noise, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$noise) %>%
map(mes_df) %>%
bind_rows(.id = "noise")
kable(exp3_exposure_es)
No Noise |
7.94 |
6.05 |
9.82 |
Plausible |
Noisy |
4.46 |
3.40 |
5.52 |
Plausible |
Noisy |
0.21 |
-0.40 |
0.83 |
Implausible (Control) |
exp3_exposure_lm <- glmer(response ~ noise * condition + (1|word) +
(1|subject), family = "binomial",
data = filter(exp3_data,trial_type == "Exposure"))
kable(tidy_lmer(exp3_exposure_lm, c("Intercept", "Noisy", "Plausible",
"Implausible (Control)",
"Plausible x Noisy")))
Intercept |
-2.750 |
0.437 |
-6.297 |
< .001 |
*** |
Noisy |
0.863 |
0.495 |
1.743 |
0.081 |
. |
Plausible |
6.622 |
0.746 |
8.878 |
< .001 |
*** |
Implausible (Control) |
0.355 |
0.442 |
0.803 |
0.422 |
|
Plausible x Noisy |
-1.707 |
0.793 |
-2.153 |
0.031 |
* |
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model.
exp3_exposure_lm_simple <- glmer(response ~ noise + condition + (1|word) +
(1|subject), family = "binomial",
data = filter(exp3_data,trial_type == "Exposure"))
anova(exp3_exposure_lm_simple, exp3_exposure_lm)
## Data: filter(exp3_data, trial_type == "Exposure")
## Models:
## exp3_exposure_lm_simple: response ~ noise + condition + (1 | word) + (1 | subject)
## exp3_exposure_lm: response ~ noise * condition + (1 | word) + (1 | subject)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## exp3_exposure_lm_simple 6 604 633 -296 592
## exp3_exposure_lm 7 602 635 -294 588 4.8 1 0.028
##
## exp3_exposure_lm_simple
## exp3_exposure_lm *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(filter(exp3_group_data,trial_type == "Exposure"),
aes(x = condition, y = mean)) +
facet_grid(. ~ noise) +
geom_bar(stat="identity", position=position_dodge(1), fill = colors[2])+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nSpeaker Condition")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
Compared to the Implausible Speaker condition, children exposed to the Plausible Speaker were more likely to pick the plausible referent on Exposure trials. Children exposed to the Control speaker did not perform differently on Exposure trials from those exposed to the Implausible speaker, as predicted. Further, the model showed a marginal effect of Noise level and a significant interaction between Noise level and Speaker, indicating that the addition of noise moved children in both conditions closer to chance.
Test trials
exp3_group_test <- exp3_data %>%
filter(trial_type == "Test") %>%
group_by(noise) %>%
nest() %>%
mutate(model = map(data, ~ glmer(response ~ condition + (1|word) +
(1|subject), family = "binomial", data = .))) %>%
unnest(map2(model, list(c("Intercept", "Plausible", "Implausible (Control)"),
c("Intercept", "Plausible")),
function(x,y) tidy_lmer(x, y))) %>%
arrange(noise)
kable(exp3_group_test)
No Noise |
Intercept |
-1.288 |
0.352 |
-3.65 |
< .001 |
*** |
No Noise |
Plausible |
1.172 |
0.315 |
3.72 |
< .001 |
*** |
Noisy |
Intercept |
-0.515 |
0.335 |
-1.54 |
0.125 |
|
Noisy |
Plausible |
1.570 |
0.379 |
4.14 |
< .001 |
*** |
Noisy |
Implausible (Control) |
2.628 |
0.529 |
4.97 |
< .001 |
*** |
exp3_test_es <- exp3_data %>%
filter(trial_type == "Test") %>%
mutate(response = as.numeric(response) - 1) %>%
group_by(noise, condition, subject) %>%
summarise(response = mean(response)) %>%
group_by(condition) %>%
split(.$noise) %>%
map(mes_df) %>%
bind_rows(.id = "noise")
kable(exp3_test_es)
No Noise |
1.17 |
0.49 |
1.85 |
Plausible |
Noisy |
1.17 |
0.55 |
1.78 |
Plausible |
Noisy |
1.93 |
1.19 |
2.67 |
Implausible (Control) |
exp3_test_lm <- glmer(response ~ noise * condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp3_data,trial_type == "Test",
condition != "Implausible (Control)"))
kable(tidy_lmer(exp3_test_lm, c("Intercept", "Noisy",
"Plausible",
"Noisy x Plausible")))
Intercept |
-1.313 |
0.352 |
-3.732 |
< .001 |
*** |
Noisy |
0.810 |
0.366 |
2.211 |
0.027 |
* |
Plausible |
1.201 |
0.376 |
3.198 |
0.001 |
** |
Noisy x Plausible |
0.329 |
0.504 |
0.653 |
0.514 |
|
Verify Wald Z-test p values using log-likelihood to compare the interaction model to the simple effects model.
exp3_test_lm_simple <- glmer(response ~ noise + condition + (1|word) + (1|subject),
family = "binomial",
data = filter(exp3_data,trial_type == "Test",
condition != "Implausible (Control)"))
kable(tidy_anova(anova(exp3_test_lm_simple, exp3_test_lm)))
exp3_test_lm_simple |
5 |
882 |
905 |
-436 |
872 |
|
|
|
|
exp3_test_lm |
6 |
884 |
912 |
-436 |
872 |
0.422 |
1 |
0.516 |
|
plotting_test_data <- filter(exp3_group_data, trial_type == "Test") %>%
mutate(width = ifelse(condition == "Implausible (Control)", .4, .9)) %>%
mutate(test_type = ifelse(condition == "Implausible (Control)",
"Plausible", "Implausible"))
#quartz(width=7.5,height=4)
ggplot(plotting_test_data,
aes(x=noise, y=mean, fill=test_type)) +
facet_grid(. ~ condition, scales = "free_x") +
geom_bar(aes(width = width),
stat="identity", position=position_dodge(1))+
geom_linerange(aes(ymin = ci_lower,
ymax = ci_upper),
size = .8,
show.legend = FALSE,
position=position_dodge(1)) +
scale_fill_manual(values = colors[2:3]) +
geom_hline(aes(yintercept=.5),lty=2)+
theme_bw(base_size=14) +
theme(legend.position="none", panel.grid=element_blank()) +
scale_x_discrete(name = "\nNoise Level")+
scale_y_continuous(name = "Proportion Choosing Plausible",
limits=c(0,1))
As predicted, children showed sensitivity to both speaker reliability and acoustic noise. Children selected the plausible referent at Test, correcting the error in their acoustic input, more often when the speaker had said plausible things on Exposure trials. In addition, regardless of Speaker plausibility, children selected the plausible referent more frequently when the acoustic input was noisy. To quantify this pattern, we again fit a mixed-effects regression predicting choice on test trials from Speaker type and Noise level as well as their interaction. As predicted, both main effects were significant, but their interaction was not
Finally, one alternative explanation for the difference between Speaker conditions is that children simply followed their expectations at all times, e.g., that those exposed to the Implausible speaker chose “silly” responses regardless of the question. To test this alternative, we asked whether children who responded to an Implausible speaker on Exposure trials always chose the implausible referent on Test trials even when the speaker referred to the plausible referent (Implausible Control condition).
Control condition
control_data <- exp3_data %>%
filter(trial_type == "Test", noise == "Noisy") %>%
mutate(condition = factor(condition, levels = c("Plausible", "Implausible",
"Implausible (Control)")))
exp3_control_lm <- glmer(response ~ condition + (1|word) + (1|subject),
family = "binomial",
data = control_data)
kable(tidy_lmer(exp3_control_lm, c("Intercept",
"Implausible",
"Implausible (Control)")))
Intercept |
1.05 |
0.334 |
3.15 |
0.002 |
** |
Implausible |
-1.57 |
0.379 |
-4.14 |
< .001 |
*** |
Implausible (Control) |
1.06 |
0.516 |
2.05 |
0.040 |
* |
exp3_control_lm_simple <- glmer(response ~ (1|word) + (1|subject),
family = "binomial",
data = control_data)
kable(tidy_anova(anova(exp3_control_lm, exp3_control_lm_simple)))
exp3_control_lm_simple |
3 |
647 |
660 |
-320 |
641 |
|
|
|
|
exp3_control_lm |
5 |
622 |
644 |
-306 |
612 |
28.444 |
2 |
< .001 |
*** |
Thus, children who were asked for the plausible referent at Test selected it, even when the speaker had previously always referred to the implausible referent. This Control condition provides further evidence that children were attending to and responding to the acoustic input from the speaker on Test trials, integrating it with their prior expectations