data loading, munging

load data.

d_v1 <- read_csv(paste(here("../data/processed_data/polcon_v1_ready_for_ana.csv"))) %>%
  mutate(expt = "v1", 
         trial = substr(trial, 6, 6))
## Parsed with column specification:
## cols(
##   subid = col_character(),
##   order = col_integer(),
##   trial = col_character(),
##   speaker = col_character(),
##   request_type = col_character(),
##   question_type = col_character(),
##   correct = col_integer(),
##   polite_speaker = col_integer(),
##   answer = col_integer(),
##   choose_polite = col_integer(),
##   sex = col_character(),
##   age = col_integer()
## )
d_v2 <- read_csv(paste(here("../data/processed_data/polcon_v2_ready_for_ana.csv"))) %>%
  mutate(expt = "v2")
## Parsed with column specification:
## cols(
##   subid = col_character(),
##   order = col_integer(),
##   trial = col_integer(),
##   request_type = col_character(),
##   question_type = col_character(),
##   correct = col_integer(),
##   valence = col_character(),
##   adjective = col_character(),
##   age = col_double(),
##   gender = col_character(),
##   keepdrop = col_character(),
##   experimenter = col_character(),
##   site = col_character(),
##   age_fct = col_integer()
## )
d_v3 <- read_csv(paste(here("../data/processed_data/polcon_v3_ready_for_ana.csv"))) %>%
  mutate(expt = "v3")
## Parsed with column specification:
## cols(
##   subid = col_character(),
##   order = col_integer(),
##   trial = col_integer(),
##   request_type = col_character(),
##   question_type = col_character(),
##   correct = col_integer(),
##   age = col_double(),
##   gender = col_character(),
##   ethnicity = col_character(),
##   experimenter = col_character(),
##   comments = col_character(),
##   age_fct = col_integer()
## )
d_v3_lookit <- read_csv(paste(here("../data/processed_data/polcon_v3_lookit_processed.csv"))) %>%
  mutate(expt = "v3_lookit") %>%
  mutate(order = case_when(
    order_test == "0" ~ "1",
    order_test == "1" ~ "2",
    TRUE ~ "NA"
    )) %>%
  rename(trial = trial_num, question_type = question)
## Parsed with column specification:
## cols(
##   subid = col_integer(),
##   response_conditions = col_character(),
##   child_birthday = col_date(format = ""),
##   response_exp_data = col_character(),
##   order_test = col_integer(),
##   dot = col_date(format = ""),
##   age = col_double(),
##   trial_num = col_integer(),
##   choice = col_character(),
##   question = col_character(),
##   correct_answer = col_character(),
##   request_type = col_character(),
##   correct = col_integer()
## )

bind all data.

d <- rbind(
  d_v1 %>% select(subid, expt, age, order, trial, request_type, question_type, correct),
  d_v2 %>% select(subid, expt, age, order, trial, request_type, question_type, correct),
  d_v3 %>% select(subid, expt, age, order, trial, request_type, question_type, correct),
  d_v3_lookit %>% select(subid, expt, age, order, trial, request_type, question_type, correct)
) %>%
  mutate_if(is.character, as.factor) %>%
  mutate(age_fct = floor(age)) %>%
  mutate(question_type = fct_recode(question_type,
    "comp" = "compliance",
    "play" = "play_with"
  )) %>%
  mutate(correct = as.numeric(as.character(correct))) %>%
  mutate(question_type = fct_relevel(question_type, 
                                     "polite", "rude", "nice", "mean"),
         request_type = fct_recode(request_type,
                                   "can you~" = "idq",
                                   "can you please~" = "please_idq"),
         request_type = fct_relevel(request_type, "please"))

Version descriptions

main effect

click for main effect plots

correct ~ question type x age.

ms <- d %>%
  group_by(expt, age_fct, question_type, subid) %>%
  summarize(
    correct = mean(correct, na.rm=TRUE)
  ) %>%
  group_by(expt, age_fct, question_type) %>%
  multi_boot_standard(col = "correct", na.rm=TRUE) %>%
  ungroup() %>%
  mutate(correct = mean,
         age_fct = factor(age_fct, labels=c("2-yr-olds", "3-yr-olds", "4-yr-olds")))
p <- ggplot(subset(ms, correct!="NA" & (question_type != "play" & question_type != "comp")), 
            aes(x=age_fct, y=correct, col=expt))
p + 
  geom_point(position=position_dodge(width=.3), stat = "identity") +
  geom_linerange(aes(ymin=ci_lower, ymax=ci_upper), position=position_dodge(width=.3), stat = "identity") +
#   geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
  facet_grid(.~question_type) +
  xlab("Age") +
  ylab("Proportion correct") + 
  ggtitle("Correct answers on questions \"Who was being more _____ ?\"") +
  scale_fill_ptol(guide = "none") +
  # geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
    geom_hline(yintercept=.50,lty=4) + 
  theme_few()

correct ~ request type x age.

ms <- d %>%
  filter(question_type != "play" & question_type != "comp") %>%
  group_by(expt, age_fct, request_type, subid) %>%
  summarize(
    correct = mean(correct, na.rm=TRUE)
  ) %>%
  group_by(expt, age_fct, request_type) %>%
  multi_boot_standard(col = "correct", na.rm=TRUE) %>%
  ungroup() %>%
  mutate(correct = mean,
         age_fct = factor(age_fct, labels=c("2-yr-olds", "3-yr-olds", "4-yr-olds")))
p <- ggplot(subset(ms, correct!="NA"), 
            aes(x=age_fct, y=correct, col=expt))
p + 
  geom_point(position=position_dodge(width=.3), stat = "identity") +
  geom_linerange(aes(ymin=ci_lower, ymax=ci_upper), position=position_dodge(width=.3), stat = "identity") +
#   geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
  facet_grid(.~request_type) +
  xlab("Age") +
  ylab("Proportion correct") + 
  ggtitle("Correct answers on questions by polite marker type") +
  scale_fill_ptol(guide = "none") +
  # geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
    geom_hline(yintercept=.50,lty=4) + 
  theme_few()

interaction

correct ~ question type x request type x age

ms <- d %>%
  filter(question_type != "play" & question_type != "comp") %>%
  group_by(expt, age_fct, question_type, request_type, subid) %>%
  summarize(
    correct = mean(correct, na.rm=TRUE)
  ) %>%
  group_by(expt, age_fct, question_type, request_type) %>%
  multi_boot_standard(col = "correct", na.rm=TRUE) %>%
  ungroup() %>%
  mutate(correct = mean,
         age_fct = factor(age_fct, labels=c("2-yr-olds", "3-yr-olds", "4-yr-olds")))
p <- ggplot(subset(ms, correct!="NA"), 
            aes(x=age_fct, y=correct, col=expt))
p + 
  geom_point(position=position_dodge(width=.3), stat = "identity") +
  geom_linerange(aes(ymin=ci_lower, ymax=ci_upper), position=position_dodge(width=.3), stat = "identity") +
#   geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
  facet_grid(request_type~question_type) +
  xlab("Age") +
  ylab("Proportion correct") + 
  ggtitle("Correct answers on questions \"Who was being more _____ ?\"") +
  scale_fill_ptol(guide = "none") +
  # geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
    geom_hline(yintercept=.50,lty=4) + 
  theme_few()

Take-aways:

  • With age, children improve in correctly saying that a speaker who used a polite word is “polite” and “nice”, whereas a speaker who did not use a polite word is “rude” and “mean”.

  • Children benefit from facial expression and voicing cue for utterances with “can you~” or “can you please”, but not much for utterances with “please”. This may indicate the strong association between the word “please” and its politeness/niceness that is learned from early on.

play / compliance questions

ms <- d %>%
  filter(question_type == "play" | question_type == "comp") %>%
  group_by(expt, age_fct, question_type, request_type, subid) %>%
  summarize(
    correct = mean(correct, na.rm=TRUE)
  ) %>%
  group_by(expt, age_fct, question_type, request_type) %>%
  multi_boot_standard(col = "correct", na.rm=TRUE) %>%
  ungroup() %>%
  mutate(correct = mean,
         age_fct = factor(age_fct, labels=c("3-yr-olds", "4-yr-olds")),
         question_type = fct_recode(question_type,
           "who would you rather play with?" = "play",
           "who will [get what they want]?" = "comp"
         ))
p <- ggplot(subset(ms, correct!="NA"), 
            aes(x=age_fct, y=correct, col=expt))
p + 
  geom_point(position=position_dodge(width=.3), stat = "identity") +
  geom_linerange(aes(ymin=ci_lower, ymax=ci_upper), position=position_dodge(width=.3), stat = "identity") +
#   geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
  facet_grid(request_type~question_type) +
  xlab("Age") +
  ylab("Proportion correct") + 
  # ggtitle("Correct answers on questions \"Who was being more _____ ?\"") +
  scale_fill_ptol(guide = "none") +
  # geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
    geom_hline(yintercept=.50,lty=4) + 
  theme_few()

Even three year olds were mostly able to answer that the polite speaker is a more desirable play partner and will likely get what they want. Four year olds were able to answer the question more consistently.

tablet vs. lookit comparison

ms <- d %>%
  filter(expt %in% c("v3", "v3_lookit")) %>%
  filter(question_type != "play" & question_type != "comp") %>%
  group_by(expt, age_fct, question_type, request_type, subid) %>%
  summarize(
    correct = mean(correct, na.rm=TRUE)
  ) %>%
  group_by(expt, age_fct, question_type, request_type) %>%
  multi_boot_standard(col = "correct", na.rm=TRUE) %>%
  ungroup() %>%
  mutate(correct = mean,
         age_fct = factor(age_fct, labels=c("2-yr-olds", "3-yr-olds", "4-yr-olds")))
p <- ggplot(subset(ms, correct!="NA"), 
            aes(x=age_fct, y=correct, col=expt))
p + 
  geom_point(position=position_dodge(width=.3), stat = "identity") +
  geom_linerange(aes(ymin=ci_lower, ymax=ci_upper), position=position_dodge(width=.3), stat = "identity") +
#   geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
  facet_grid(request_type~question_type) +
  xlab("Age") +
  ylab("Proportion correct") + 
  ggtitle("Correct answers on questions \"Who was being more _____ ?\"") +
  scale_fill_ptol(guide = "none") +
  # geom_errorbar(position=position_dodge(.9), aes(ymin=ci_lower,ymax=ci_upper,width=.1)) +
    geom_hline(yintercept=.50,lty=4) + 
  theme_few()

Except for the “rude” x “please” responses, responses on lookit look very comparable to responses yielded on tablet by an experimenter!