This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.
library(tidyverse)
library(metafor)
library(metalabr)
library(here)
SB_DATA <- read_csv(here("data/processed/syntactic_bootstrapping_tidy_data.csv"))
SB_DATA <- SB_DATA %>%
mutate(mean_age_1 = mean_age,
unique_row = row_number())
fit_model <- function(data, dataset_name){
null_model <- rma.mv(d_calc ~ 1,
V = d_var_calc,
random = ~ 1 | short_cite/same_infant/unique_row,
method = "REML",
data = data)
age_model <- rma.mv(d_calc ~ mean_age_1,
V = d_var_calc,
random = ~ 1 | short_cite/same_infant/unique_row,
method = "REML",
data = data)
params <- data.frame(dataset_name = dataset_name,
null_estimate = null_model$b[1],
null_estimate.cil = null_model$ci.lb[1],
null_estimate.cih = null_model$ci.ub[1],
null_z = null_model$zval[1],
null_p = null_model$pval[1],
age_estimate = age_model$b[1],
age_estimate.cil = age_model$ci.lb[1],
age_estimate.cih = age_model$ci.ub[1],
age_z = age_model$zval[1],
age_p = age_model$pval[1]
)
return(params)
}
get_model_results <- function(
dataset_name){
ml_dataset_info <- metalabr::get_metalab_dataset_info()
ME_info <- ml_dataset_info %>%
filter(name == "Mutual exclusivity")
SS_info <- ml_dataset_info %>%
filter(name == "Sound symbolism")
XS_info <- ml_dataset_info %>%
filter(name == "Cross-situational word learning")
GF_info <- ml_dataset_info %>%
filter(name == "Gaze following")
ME_data <- metalabr::get_metalab_data(ME_info) %>%
mutate(dataset = "Mutual exclusivity")
SS_data <- metalabr::get_metalab_data(SS_info) %>%
mutate(dataset = "Sound symbolism")
XS_data <- metalabr::get_metalab_data(XS_info) %>%
mutate(dataset = "Cross-situational word learning")
GF_data <- metalabr::get_metalab_data(GF_info) %>%
mutate(dataset = "Gaze following")
ALL_data <- bind_rows(ME_data,
SS_data,
XS_data,
GF_data)
mod_data <- ALL_data %>%
filter(dataset == dataset_name)
mod_results <- fit_model(mod_data, dataset_name)
return (mod_results)
}
get_model_results_younger <- function(
dataset_name){
ml_dataset_info <- metalabr::get_metalab_dataset_info()
ME_info <- ml_dataset_info %>%
filter(name == "Mutual exclusivity")
SS_info <- ml_dataset_info %>%
filter(name == "Sound symbolism")
XS_info <- ml_dataset_info %>%
filter(name == "Cross-situational word learning")
GF_info <- ml_dataset_info %>%
filter(name == "Gaze following")
ME_data <- metalabr::get_metalab_data(ME_info) %>%
mutate(dataset = "Mutual exclusivity")
SS_data <- metalabr::get_metalab_data(SS_info) %>%
mutate(dataset = "Sound symbolism")
XS_data <- metalabr::get_metalab_data(XS_info) %>%
mutate(dataset = "Cross-situational word learning")
GF_data <- metalabr::get_metalab_data(GF_info) %>%
mutate(dataset = "Gaze following")
ALL_data <- bind_rows(ME_data,
SS_data,
XS_data,
GF_data)
mod_data <- ALL_data %>%
filter(dataset == dataset_name, mean_age_1 < 30.44 * 48)
mod_results <- fit_model(mod_data, dataset_name)
return (mod_results)
}
MAPPING_STUDIES <- c("Mutual exclusivity",
"Sound symbolism",
"Cross-situational word learning",
"Gaze following")
all_models_res_younger <- map_df(MAPPING_STUDIES, get_model_results_younger)
## Getting raw MetaLab data from Google Sheets for dataset: Mutual exclusivity
## Warning: `data_frame()` is deprecated as of tibble 1.1.0.
## Please use `tibble()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Warning: `add_rownames()` is deprecated as of dplyr 1.0.0.
## Please use `tibble::rownames_to_column()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
## Getting raw MetaLab data from Google Sheets for dataset: Sound symbolism
## Getting raw MetaLab data from Google Sheets for dataset: Cross-situational word learning
## Getting raw MetaLab data from Google Sheets for dataset: Gaze following
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Mutual exclusivity
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Sound symbolism
## Getting raw MetaLab data from Google Sheets for dataset: Cross-situational word learning
## Getting raw MetaLab data from Google Sheets for dataset: Gaze following
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Mutual exclusivity
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Sound symbolism
## Getting raw MetaLab data from Google Sheets for dataset: Cross-situational word learning
## Getting raw MetaLab data from Google Sheets for dataset: Gaze following
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Mutual exclusivity
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
## Getting raw MetaLab data from Google Sheets for dataset: Sound symbolism
## Getting raw MetaLab data from Google Sheets for dataset: Cross-situational word learning
## Getting raw MetaLab data from Google Sheets for dataset: Gaze following
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
SB_results_younger <- fit_model(filter(SB_DATA, mean_age_1 < 30.44 * 48), "Syntactic Bootstrapping")
all_models_res_younger <- bind_rows(all_models_res_younger, SB_results_younger)
all_models_younger_tidy <- all_models_res_younger %>%
pivot_longer(
null_estimate:age_p,
names_to = "model_name",
values_to = "value"
) %>%
mutate(
model_type = case_when(
grepl("null", model_name) ~ "null",
grepl("age", model_name) ~ "age"
),
value_type = gsub(".*_", "", model_name)
) %>%
pivot_wider(
names_from = value_type,
values_from = value
) %>%
group_by(dataset_name, model_type) %>%
mutate_at(vars(-group_cols()), function(x) {x[!is.na(x)][1]}) %>%
distinct() %>%
select(-model_name)
ml_dataset_info <- metalabr::get_metalab_dataset_info()
ME_info <- ml_dataset_info %>%
filter(name == "Mutual exclusivity")
SS_info <- ml_dataset_info %>%
filter(name == "Sound symbolism")
XS_info <- ml_dataset_info %>%
filter(name == "Cross-situational word learning")
GF_info <- ml_dataset_info %>%
filter(name == "Gaze following")
ME_data <- metalabr::get_metalab_data(ME_info) %>%
mutate(dataset = "Mutual exclusivity")
## Getting raw MetaLab data from Google Sheets for dataset: Mutual exclusivity
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
SS_data <- metalabr::get_metalab_data(SS_info) %>%
mutate(dataset = "Sound symbolism")
## Getting raw MetaLab data from Google Sheets for dataset: Sound symbolism
XS_data <- metalabr::get_metalab_data(XS_info) %>%
mutate(dataset = "Cross-situational word learning")
## Getting raw MetaLab data from Google Sheets for dataset: Cross-situational word learning
GF_data <- metalabr::get_metalab_data(GF_info) %>%
mutate(dataset = "Gaze following")
## Getting raw MetaLab data from Google Sheets for dataset: Gaze following
## Warning in field_fun(dataset_contents[[field$field]]): NAs introduced by
## coercion
ALL_data <- bind_rows(ME_data,
SS_data,
XS_data,
GF_data)
age_data_younger <- bind_rows(ME_data,
SS_data,
XS_data,
GF_data) %>%
select(dataset, mean_age_1) %>%
filter(mean_age_1 < 30.44 * 48)
sb_data_younger <- SB_DATA %>%
mutate(mean_age_1 = mean_age,
unique_row = row_number(),
dataset = "Syntactic Bootstrapping") %>%
select(dataset, mean_age_1) %>%
filter(mean_age_1 < 30.44 * 48)
age_data_younger <- bind_rows(age_data_younger, sb_data_younger)
summarize_age_younger <- age_data_younger %>%
group_by(dataset) %>%
summarise(
mean_age = mean(mean_age_1),
mean_age_in_month = mean_age / 30.44,
num_study = n()
) %>%
mutate(
dataset_name = dataset
)
## `summarise()` ungrouping output (override with `.groups` argument)
tidy_models_with_age_younger <- left_join(all_models_younger_tidy,
summarize_age_younger,
by = "dataset_name") %>%
filter(model_type == "null")
tidy_models_with_age_younger %>%
mutate(
text_color = case_when(
dataset_name == "Syntactic Bootstrapping" ~ "red",
TRUE ~ "black"
),
dataset_name = case_when(
dataset_name == "Cross-situational word learning" ~ "Cross-situational\n word learning",
dataset_name == "Syntactic Bootstrapping" ~ "Syntactic \n Bootstrapping",
dataset_name == "Mutual exclusivity" ~ "Mutual \n Exclusivity",
dataset_name == "Gaze following" ~ "Gaze \n Following",
dataset_name == "Sound symbolism" ~ "Sound \n Symbolism",
TRUE ~ dataset_name
)
) %>%
ggplot(aes(x = mean_age_in_month,
y = estimate,
ymin = estimate.cil,
ymax = estimate.cih,
size = (num_study * 0.1),
color = text_color
)) +
guides(size = FALSE) +
xlim(0,36) +
coord_flip() +
geom_point() +
scale_color_manual(values = c("black", "red")) +
guides(color = FALSE) +
geom_text(aes(label = dataset_name), hjust = 0.5, vjust = -.5, size = 3) +
geom_linerange(size = 0.5) +
geom_hline(yintercept = 0, color = "black", linetype="dashed")+
theme(
axis.line = element_line(size = 1.2),
axis.ticks = element_line(size = 1),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank()) +
xlab("Mean Age (Months)") +
ylab("Effect Size Estimate")