# Load data (1 data frame)
slid_data <- read.csv(here("Semantic Learning & ID Data","Semantic Learning & ID Data","Semantic learning and identification data.csv"),stringsAsFactors=TRUE) # sentence length data
slid_data %<>%
mutate(Participant.ID = factor(Participant.ID),
Group = factor(Child.or.adult),
SL.Meaning.Condition = factor(SL.Meaning.Condition),
SL.Correct.Response = factor(SL.Correct.Response),
SL.Triplet.Number = as.numeric(SL.Triplet.Number),
SL.Trial.Order.by.Task = as.numeric(SL.Trial.Order.by.Task),
SL.Response = factor(SL.Response),
SL.Response.Type = factor(SL.Response.Type),
SL.Correct.Based.on.Only.SL. = as.numeric(SL.Correct.Based.on.Only.SL.),
SL.Correct.Enough.for.IT. = as.numeric(SL.Correct.Enough.for.IT.),
IT.Trial.Number = as.numeric(IT.Trial.Number),
IT.Trial.Order.by.Task = as.numeric(IT.Trial.Order.by.Task),
IT.Correct.Response = as.numeric(IT.Correct.Response),
IT.Response = as.numeric(IT.Response),
IT.Correct. = as.numeric(IT.Correct.),
Exclude. = as.numeric(Exclude.),
SL.Nonword = factor(SL.Nonword),
SL.meaning.cond.c = as.numeric(SL.Meaning.Condition) - 1.5)
str(slid_data)
## 'data.frame': 4680 obs. of 36 variables:
## $ Participant.ID : Factor w/ 156 levels "049b2dc2","070821_1f_10",..: 113 143 47 93 51 131 128 155 152 145 ...
## $ Child.or.adult : Factor w/ 2 levels "A","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.block.or.condition : Factor w/ 31 levels "apple_block",..: 25 25 25 25 25 25 25 25 25 25 ...
## $ Task : Factor w/ 1 level "SL": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.Triplet.Number : num 30 30 30 30 16 16 16 18 18 18 ...
## $ SL.Trial.Order.by.Task : num 4 22 24 27 3 11 19 4 8 13 ...
## $ SL.Meaning.Condition : Factor w/ 2 levels "M-","M+": 2 2 2 2 2 2 2 2 2 2 ...
## $ SL.Nonword : Factor w/ 31 levels "bov","chaws",..: 21 21 21 21 18 18 18 15 15 15 ...
## $ SL.Correct.Response : Factor w/ 17 levels "apple","bed",..: 1 1 1 1 4 4 4 3 3 3 ...
## $ SL.Response : Factor w/ 263 levels ""," "," nice",..: 7 163 7 7 175 97 208 20 106 20 ...
## $ SL.Response.Category : Factor w/ 3 levels "correct word",..: 1 3 1 1 2 2 3 1 2 1 ...
## $ SL.Correct.Based.on.Only.SL. : num 1 1 1 1 0 0 0 1 0 1 ...
## $ SL.Correct.Enough.for.IT. : num 1 0 1 1 0 0 0 1 0 1 ...
## $ SL.Response.Type : Factor w/ 6 levels "correct response (no meaning)",..: 2 6 2 2 4 4 6 2 4 2 ...
## $ IT.Block : Factor w/ 31 levels "ID_apple","ID_bed",..: 31 31 31 31 31 31 31 31 31 31 ...
## $ IT.Trial.Type : Factor w/ 30 levels "recog1","recog10",..: 1 1 1 1 12 12 12 23 23 23 ...
## $ Task.1 : Factor w/ 1 level "IT": 1 1 1 1 1 1 1 1 1 1 ...
## $ IT.Trial.Number : num 1 1 1 1 2 2 2 3 3 3 ...
## $ IT.Trial.Order.by.Task : num 1 1 1 1 1 1 1 1 1 1 ...
## $ IT.Meaning.Condition : Factor w/ 2 levels "M-","M+": 2 2 2 2 2 2 2 2 2 2 ...
## $ IT.Nonword : Factor w/ 30 levels "bov","chaws",..: 20 20 20 20 17 17 17 15 15 15 ...
## $ IT.Correct.Response : num 1 1 1 1 3 3 3 2 2 2 ...
## $ IT.Response : num 3 3 1 5 1 5 4 1 5 3 ...
## $ IT.Correct. : num 0 0 1 0 0 0 0 0 0 0 ...
## $ IT.Response.Type : Factor w/ 11 levels "#N/A","correct response (M+ target word)",..: 4 4 2 9 4 9 10 11 9 10 ...
## $ Semantic.vs.Other : Factor w/ 3 levels "#N/A","other foil",..: 2 2 NA NA 2 NA 3 2 NA 3 ...
## $ Familiar.vs.Unrelated : Factor w/ 3 levels "#N/A","familiar foil",..: 2 2 NA NA 2 NA NA 3 NA NA ...
## $ Language.Status : Factor w/ 8 levels "","bilingual (English, Chinese)",..: 7 7 7 7 7 6 2 7 7 5 ...
## $ Exclude. : num 0 0 0 1 1 0 0 0 0 0 ...
## $ Exclusion.Reason : Factor w/ 18 levels "","Completed portion of SL task before restarting and completing whole study",..: 1 1 1 12 4 1 1 1 1 1 ...
## $ Age : num 26 24 26 29 25 27 25 25 28 24 ...
## $ Gender : Factor w/ 6 levels "","3","5","female",..: 4 5 4 5 5 4 4 5 5 5 ...
## $ Highest.Completed.Education.Level: Factor w/ 8 levels "","associate's degree",..: 7 2 2 2 4 3 3 5 5 7 ...
## $ Highest.Degree.Earned : Factor w/ 24 levels "","B.A","B.A.",..: 1 1 1 1 20 2 3 15 15 1 ...
## $ Group : Factor w/ 2 levels "A","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.meaning.cond.c : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
# Create some data subsets
incl_slid_data <- subset(slid_data, Exclude. != 1 & !grepl("bilingual", Language.Status, ignore.case = TRUE)) # only included, monolingual participants
incl_slid_data %<>%
mutate(Age = as.numeric(Age),
age.c = as.numeric(scale(Age, center = TRUE, scale = FALSE)),
Gender = factor(Gender),
gender.c = as.numeric(Gender) - 1.5)
str(incl_slid_data)
## 'data.frame': 3150 obs. of 38 variables:
## $ Participant.ID : Factor w/ 156 levels "049b2dc2","070821_1f_10",..: 113 143 47 155 152 153 140 81 114 57 ...
## $ Child.or.adult : Factor w/ 2 levels "A","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.block.or.condition : Factor w/ 31 levels "apple_block",..: 25 25 25 25 25 25 25 25 25 25 ...
## $ Task : Factor w/ 1 level "SL": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.Triplet.Number : num 30 30 30 18 18 17 19 19 19 20 ...
## $ SL.Trial.Order.by.Task : num 4 22 24 4 8 11 3 13 24 21 ...
## $ SL.Meaning.Condition : Factor w/ 2 levels "M-","M+": 2 2 2 2 2 2 2 2 2 2 ...
## $ SL.Nonword : Factor w/ 31 levels "bov","chaws",..: 21 21 21 15 15 6 16 16 16 14 ...
## $ SL.Correct.Response : Factor w/ 17 levels "apple","bed",..: 1 1 1 3 3 14 17 17 17 15 ...
## $ SL.Response : Factor w/ 263 levels ""," "," nice",..: 7 163 7 20 106 221 225 251 225 243 ...
## $ SL.Response.Category : Factor w/ 3 levels "correct word",..: 1 3 1 1 2 1 1 1 1 1 ...
## $ SL.Correct.Based.on.Only.SL. : num 1 1 1 1 0 1 1 1 1 1 ...
## $ SL.Correct.Enough.for.IT. : num 1 0 1 1 0 1 1 1 1 1 ...
## $ SL.Response.Type : Factor w/ 6 levels "correct response (no meaning)",..: 2 6 2 2 4 2 2 2 2 2 ...
## $ IT.Block : Factor w/ 31 levels "ID_apple","ID_bed",..: 31 31 31 31 31 31 31 31 31 31 ...
## $ IT.Trial.Type : Factor w/ 30 levels "recog1","recog10",..: 1 1 1 23 23 25 26 26 26 27 ...
## $ Task.1 : Factor w/ 1 level "IT": 1 1 1 1 1 1 1 1 1 1 ...
## $ IT.Trial.Number : num 1 1 1 3 3 4 5 5 5 6 ...
## $ IT.Trial.Order.by.Task : num 1 1 1 1 1 1 1 1 1 1 ...
## $ IT.Meaning.Condition : Factor w/ 2 levels "M-","M+": 2 2 2 2 2 2 2 2 2 2 ...
## $ IT.Nonword : Factor w/ 30 levels "bov","chaws",..: 20 20 20 15 15 6 16 16 16 14 ...
## $ IT.Correct.Response : num 1 1 1 2 2 4 1 1 1 2 ...
## $ IT.Response : num 3 3 1 1 5 4 1 1 1 2 ...
## $ IT.Correct. : num 0 0 1 0 0 1 1 1 1 1 ...
## $ IT.Response.Type : Factor w/ 11 levels "#N/A","correct response (M+ target word)",..: 4 4 2 11 9 2 2 2 2 2 ...
## $ Semantic.vs.Other : Factor w/ 3 levels "#N/A","other foil",..: 2 2 NA 2 NA NA NA NA NA NA ...
## $ Familiar.vs.Unrelated : Factor w/ 3 levels "#N/A","familiar foil",..: 2 2 NA 3 NA NA NA NA NA NA ...
## $ Language.Status : Factor w/ 8 levels "","bilingual (English, Chinese)",..: 7 7 7 7 7 7 7 7 7 7 ...
## $ Exclude. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Exclusion.Reason : Factor w/ 18 levels "","Completed portion of SL task before restarting and completing whole study",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Age : num 26 24 26 25 28 23 25 24 25 27 ...
## $ Gender : Factor w/ 2 levels "female","male": 1 2 1 2 2 2 1 2 1 1 ...
## $ Highest.Completed.Education.Level: Factor w/ 8 levels "","associate's degree",..: 7 2 2 5 5 7 3 3 3 3 ...
## $ Highest.Degree.Earned : Factor w/ 24 levels "","B.A","B.A.",..: 1 1 1 15 15 1 3 9 7 13 ...
## $ Group : Factor w/ 2 levels "A","C": 1 1 1 1 1 1 1 1 1 1 ...
## $ SL.meaning.cond.c : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ age.c : num 6.71 4.71 6.71 5.71 8.71 ...
## $ gender.c : num -0.5 0.5 -0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 ...
mp_slid_data <- subset(incl_slid_data, SL.Meaning.Condition == "M+") # only M+ trials
# Calculate the proportions of responses in the semantic learning task for each participant
# Step 1: Define valid response types per condition
valid_responses <- tribble(
~SL.Meaning.Condition, ~SL.Response.Type,
"M+", "correct response (target word)",
"M+", "incorrect response (no meaning)",
"M+", "incorrect response (no response)",
"M+", "incorrect response (wrong word)",
"M-", "correct response (no meaning)",
"M-", "incorrect response (any meaning)",
"M-", "incorrect response (no response)"
)
# Step 2: Summarise participant-level counts
participant_counts <- incl_slid_data %>%
group_by(Participant.ID, Group, SL.Meaning.Condition, SL.Response.Type) %>%
summarise(n = n(), .groups = "drop")
# Step 3: Get unique Participant × Condition combos from actual data
participant_conditions <- incl_slid_data %>%
distinct(Participant.ID, Group, SL.Meaning.Condition)
# Step 4: Create complete grid of valid combinations per participant
full_grid <- participant_conditions %>%
inner_join(valid_responses, by = "SL.Meaning.Condition")
## Warning in inner_join(., valid_responses, by = "SL.Meaning.Condition"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 1 of `x` matches multiple rows in `y`.
## ℹ Row 1 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
# Step 5: Left join actual counts onto full grid (so missing = 0)
propsl_data <- full_grid %>%
left_join(participant_counts,
by = c("Participant.ID", "Group", "SL.Meaning.Condition", "SL.Response.Type")) %>%
mutate(n = replace_na(n, 0)) %>%
group_by(Participant.ID, Group, SL.Meaning.Condition) %>%
mutate(
total_responses = sum(n),
proportion = n / total_responses
) %>%
ungroup()
# Notes:
# SL Meaning Condition = context condition (M- = unsupportive, M+ = supportive); default reference level = unsupportive/M-
# For SL Meaning Condition, M+ = -0.5 (after centering), M- = 0.5 (after centering)
# For Gender, female = -0.5 (after centering), male = 0.5 (after center)
# Is each participant in only one group?
# Expected: TRUE (between-subjects design)
slid_data %>% group_by(Participant.ID) %>%
summarise(Group = n_distinct(Group)) %>%
as.data.frame() %>%
{.$Group == 1} %>%
all()
## [1] TRUE
# Number of included participants per experimental condition
# Expected: Children = 45, Adults = 69
incl_slid_data %>% group_by(Participant.ID) %>%
summarise(Group = first(Group)) %>%
ungroup() %>%
group_by(Group) %>%
summarise(n = n())
## # A tibble: 2 × 2
## Group n
## <fct> <int>
## 1 A 60
## 2 C 45
# Number of different target words (collapsed across participants) by group
# Expected: 15
mp_slid_data %>%
group_by(Group) %>%
summarise(items = n_distinct(SL.Correct.Response))
## # A tibble: 2 × 2
## Group items
## <fct> <int>
## 1 A 15
## 2 C 15
#summarise(items = n_distinct(Distinct.Target))
# Number of different psuedowords (collapsed across participants) by group
# Expected: 15
mp_slid_data %>%
group_by(Group) %>%
summarise(items = n_distinct(SL.Nonword))
## # A tibble: 2 × 2
## Group items
## <fct> <int>
## 1 A 15
## 2 C 15
slid_data %>%
distinct(Participant.ID, Group, Language.Status, Exclude., Exclusion.Reason)%>%
group_by(Exclude.,Group, Language.Status, Exclusion.Reason)%>%
summarise(n = n())%>%
mutate(total.Exclusion.Reason.n = sum(n))%>%
knitr::kable()
## `summarise()` has grouped output by 'Exclude.', 'Group', 'Language.Status'. You
## can override using the `.groups` argument.
| Exclude. | Group | Language.Status | Exclusion.Reason | n | total.Exclusion.Reason.n |
|---|---|---|---|---|---|
| 0 | A | bilingual (English, Chinese) | 2 | 2 | |
| 0 | A | bilingual (English, Korean) | 1 | 1 | |
| 0 | A | bilingual (English, Spanish) | 5 | 5 | |
| 0 | A | bilingual (English, Vietnamese) | 1 | 1 | |
| 0 | A | monolingual | 60 | 60 | |
| 0 | C | 45 | 45 | ||
| 1 | A | bilingual (English, French) | This participant provided the same 2 answers for almost all of the R/IT trials | 1 | 1 |
| 1 | A | monolingual | Participant didn’t seem to understand WLT (provided nonwords as responses) | 1 | 29 |
| 1 | A | monolingual | Repeated attempts by Mturk workers that should be excluded | 9 | 29 |
| 1 | A | monolingual | This participant did not complete the study | 1 | 29 |
| 1 | A | monolingual | This participant did not respond to almost any of the R/IT trials (let almost all of them time out) | 1 | 29 |
| 1 | A | monolingual | This participant did not respond to any of the R/IT trials (let them all time out) | 1 | 29 |
| 1 | A | monolingual | This participant selected “no meaning” for most of the R/IT trials | 3 | 29 |
| 1 | A | monolingual | This participant spent ten or less minutes | 10 | 29 |
| 1 | A | monolingual | This participant spent ten or less minutes and provided the same 2 answers for almost all of the answers in the WLT and most of the R/IT | 1 | 29 |
| 1 | A | monolingual | This participant spent ten or less minutes, didn’t seem to understand WLT (provided repeated, nonsensical responses), and selected “no meaning” for all of the R/IT trials | 1 | 29 |
| 1 | A | monolingual | This participant spent ten or less minutes, provided the same 2 answers for almost all of the answers in the WLT, and provided repeated answers for much of R/IT | 1 | 29 |
| 1 | A | N/A | Repeated attempts by Mturk workers that should be excluded | 1 | 11 |
| 1 | A | N/A | This participant did not fill out the demographics | 4 | 11 |
| 1 | A | N/A | This participant did not fill out the demographics and selected “no meaning” for all of the R/IT trials | 1 | 11 |
| 1 | A | N/A | This participant spent ten or less minutes | 2 | 11 |
| 1 | A | N/A | This participant spent ten or less minutes and did not fill out the demographics | 1 | 11 |
| 1 | A | N/A | This participant spent ten or less minutes, provided repeated answers for much of WLT, and selected “no meaning” for all of the R/IT trials | 1 | 11 |
| 1 | A | N/A | This was a practice run | 1 | 11 |
| 1 | C | Completed portion of SL task before restarting and completing whole study | 1 | 1 |
# Age
incl_slid_data %>%
distinct(Participant.ID, Group, Age)%>%
group_by(Group)%>%
summarise_at('Age',
list(~mean(., na.rm=T),
~sd(., na.rm=T),
~median(., na.rm=T),
~min(., na.rm=T),
~max(., na.rm=T),
~sum(!is.na(.))))%>%
dplyr::rename("n" = "sum")%>%
dplyr::select(Group, n, mean, sd, median, min, max)%>%
mutate(total.n = sum(n))%>%
knitr::kable()
| Group | n | mean | sd | median | min | max | total.n |
|---|---|---|---|---|---|---|---|
| A | 60 | 25.38333 | 1.7083213 | 25 | 22 | 29 | 105 |
| C | 45 | 11.15556 | 0.7964568 | 11 | 10 | 12 | 105 |
# Gender
incl_slid_data %>%
distinct(Participant.ID, Group, Gender)%>%
group_by(Group, Gender)%>%
summarise(n = n())%>%
mutate(total.Gender.n = sum(n))%>%
knitr::kable()
## `summarise()` has grouped output by 'Group'. You can override using the
## `.groups` argument.
| Group | Gender | n | total.Gender.n |
|---|---|---|---|
| A | female | 33 | 60 |
| A | male | 27 | 60 |
| C | female | 26 | 45 |
| C | male | 19 | 45 |
# Semantic learning task performance
incl_slid_data_partsum <- incl_slid_data %>%
group_by(Participant.ID, Group,SL.Meaning.Condition) %>%
summarise(SL_corr_partacc = mean(SL.Correct.Enough.for.IT., na.rm = TRUE), .groups = "drop")
sl_summary_df <- incl_slid_data_partsum %>%
group_by(Group,SL.Meaning.Condition) %>%
summarise(
mean_accuracy = mean(SL_corr_partacc),
sd_accuracy = sd(SL_corr_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_accuracy + sd_accuracy + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(sl_summary_df)
| Group | SL.Meaning.Condition | mean_accuracy | sd_accuracy | n | label_y | total_n |
|---|---|---|---|---|---|---|
| A | M- | 0.9611111 | 0.0697498 | 60 | 1.0508609 | 210 |
| A | M+ | 0.7755556 | 0.1472749 | 60 | 0.9428304 | 210 |
| C | M- | 0.9570370 | 0.0767464 | 45 | 1.0537834 | 210 |
| C | M+ | 0.6459259 | 0.1757076 | 45 | 0.8416336 | 210 |
# Proportions of semantic learning task
propsl_data_partsum <- propsl_data %>%
group_by(Participant.ID, Group,SL.Meaning.Condition, SL.Response.Type) %>%
summarise(proportion_partacc = mean(proportion, na.rm = TRUE), .groups = "drop")
propsl_summary_df <- propsl_data_partsum %>%
group_by(Group, SL.Meaning.Condition, SL.Response.Type) %>%
summarise(
mean_proportion = mean(proportion_partacc),
sd_proportion = sd(proportion_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_proportion + sd_proportion + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(propsl_summary_df)
| Group | SL.Meaning.Condition | SL.Response.Type | mean_proportion | sd_proportion | n | label_y | total_n |
|---|---|---|---|---|---|---|---|
| A | M+ | correct response (target word) | 0.7755556 | 0.1472749 | 60 | 0.9428304 | 735 |
| A | M+ | incorrect response (no meaning) | 0.1388889 | 0.1395671 | 60 | 0.2984560 | 735 |
| A | M+ | incorrect response (no response) | 0.0000000 | 0.0000000 | 60 | 0.0200000 | 735 |
| A | M+ | incorrect response (wrong word) | 0.0855556 | 0.0650559 | 60 | 0.1706114 | 735 |
| A | M- | correct response (no meaning) | 0.9622222 | 0.0653735 | 60 | 1.0475957 | 735 |
| A | M- | incorrect response (any meaning) | 0.0377778 | 0.0653735 | 60 | 0.1231513 | 735 |
| A | M- | incorrect response (no response) | 0.0000000 | 0.0000000 | 60 | 0.0200000 | 735 |
| C | M+ | correct response (target word) | 0.7555556 | 0.1669694 | 45 | 0.9425250 | 735 |
| C | M+ | incorrect response (no meaning) | 0.1422222 | 0.1106455 | 45 | 0.2728677 | 735 |
| C | M+ | incorrect response (no response) | 0.0014815 | 0.0099381 | 45 | 0.0314196 | 735 |
| C | M+ | incorrect response (wrong word) | 0.1007407 | 0.1021212 | 45 | 0.2228619 | 735 |
| C | M- | correct response (no meaning) | 0.9570370 | 0.0767464 | 45 | 1.0537834 | 735 |
| C | M- | incorrect response (any meaning) | 0.0414815 | 0.0769217 | 45 | 0.1384032 | 735 |
| C | M- | incorrect response (no response) | 0.0014815 | 0.0099381 | 45 | 0.0314196 | 735 |
# Semantic learning task performance
incl_slid_data_partsum %>%
mutate(#SL.Meaning.Condition = factor(SL.Meaning.Condition, levels = c("M-", "M+"),
#labels = c("Unsupportive Context", "Supportive Context"))),
SL.Meaning.Condition = factor(SL.Meaning.Condition, levels = c("M+","M-")) # Set the desired order of variables
)%>%
ggplot(aes(x = SL.Meaning.Condition, y = SL_corr_partacc, fill = SL.Meaning.Condition, color = SL.Meaning.Condition)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = sl_summary_df,
aes(
x = SL.Meaning.Condition,
y = label_y,
label = sprintf("%.2f", mean_accuracy),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
# scale_fill_brewer(palette = "Dark2") +
#langcog::scale_fill_solarized()+
labs(y = "Mean Accuracy of Target Meaning/Word Identification",
x = "Group",
fill = "Meaning Condition") +
theme(axis.text.x = element_text(hjust = 0.5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 10),
legend.title = element_text(size = 11),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 12)) +
guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Proportions of semantic learning task
## M+
mp_resp_types <- c(
"correct response (target word)",
"incorrect response (no meaning)",
"incorrect response (no response)",
"incorrect response (wrong word)"
)
propsl_data_partsum %>%
filter(
SL.Meaning.Condition == "M+",
SL.Response.Type %in% mp_resp_types
) %>%
mutate(SL.Response.Type = factor(SL.Response.Type, levels = mp_resp_types)) %>%
droplevels() %>%
ggplot(aes(x = SL.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_wrap(~ Group, scales = "free_y", drop = TRUE) + # Drop unused categories
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
scale_x_discrete(limits = mp_resp_types) + # <-- THIS IS KEY
geom_text(
data = propsl_summary_df,
aes(
x = SL.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black"
) + # Add formatted text on top of bars
labs(title = "Proportions of M+ Semantic Learning Task Responses",
x = "Response Type",
y = "Mean Proportion of Responses",
fill = "Group"
) +
theme(
axis.text.x = element_text(hjust = 1, angle = 45, size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)),
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 14, face = "bold")
) +
scale_y_continuous(breaks = seq(0, 1, .25))
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_text()`).
## M-
mm_resp_types <- c(
"correct response (no meaning)",
"incorrect response (any meaning)",
"incorrect response (no response)"
)
propsl_data_partsum %>%
filter(
SL.Meaning.Condition == "M-",
SL.Response.Type %in% mm_resp_types
) %>%
mutate(SL.Response.Type = factor(SL.Response.Type, levels = mm_resp_types)) %>%
droplevels() %>%
ggplot(aes(x = SL.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_wrap(~ Group, scales = "free_y", drop = TRUE) + # Drop unused categories
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
scale_x_discrete(limits = mm_resp_types) + # <-- THIS IS KEY
geom_text(
data = propsl_summary_df,
aes(
x = SL.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black"
) + # Add formatted text on top of bars
labs(title = "Proportions of M- Semantic Learning Task Responses",
x = "Response Type",
y = "Mean Proportion of Responses",
fill = "Group"
) +
theme(
axis.text.x = element_text(hjust = 1, angle = 45, size = 12, color = "black"),
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)),
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 14, face = "bold")
) +
scale_y_continuous(breaks = seq(0, 1, .25))
## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_text()`).
# Create some data subsets (from previously loaded dataset)
mp_slid_data <- subset(incl_slid_data, SL.Meaning.Condition == "M+") # only M+ trials
learned_slid_data <- subset(mp_slid_data, SL.Correct.Enough.for.IT. == 1) # only M+ trials where nonsense words' target meanings were IDed
mp_foil_data <- subset(mp_slid_data, !is.na(Semantic.vs.Other)) # only M+ trials where semantically-related, unrelated, or familiar foils were selected
learned_foil_data <- subset(learned_slid_data, !is.na(Semantic.vs.Other)) # only M+ trials where nonsense words' target meanings were IDed AND then only either a semantically-related, unrelated, or familiar foil was selected
# Calculate the proportions of responses in the identification task for each participant (disregarding learned/not learned status in SL task)
# Step 1: Define valid response types for IT
valid_IT_responses <- tribble(
~IT.Response.Type,
"correct response (M+ target word)",
"familiar foil",
"unrelated foil",
"no meaning",
"NA",
"semantically-related foil"
)
# Step 2: Count IT responses per participant (no SL.Meaning.Condition involved)
it_participant_counts <- mp_slid_data %>%
group_by(Participant.ID, Group, IT.Response.Type) %>%
summarise(n = n(), .groups = "drop")
# Step 3: Get participant × valid IT response type combinations
it_full_grid <- mp_slid_data %>%
distinct(Participant.ID, Group) %>%
crossing(IT.Response.Type = valid_IT_responses$IT.Response.Type) # Using predefined valid response types
# Step 4: Left join actual counts onto the grid to fill missing values
propit_data <- it_full_grid %>%
left_join(it_participant_counts,
by = c("Participant.ID", "Group", "IT.Response.Type")) %>%
mutate(n = replace_na(n, 0)) %>%
group_by(Participant.ID, Group) %>%
mutate(
total_responses = sum(n),
proportion = n / total_responses
) %>%
ungroup()
# Calculate the proportions of responses in the identification task for each participant for only *learned* words
# Step 1: Define valid response types for IT
valid_IT_responses <- tribble(
~IT.Response.Type,
"correct response (M+ target word)",
"familiar foil",
"unrelated foil",
"no meaning",
"NA",
"semantically-related foil"
)
# Step 2: Count IT responses per participant (no SL.Meaning.Condition involved)
learned_it_participant_counts <- learned_slid_data %>%
group_by(Participant.ID, Group, IT.Response.Type) %>%
summarise(n = n(), .groups = "drop")
# Step 3: Get participant × valid IT response type combinations
learned_it_full_grid <- learned_slid_data %>%
distinct(Participant.ID, Group) %>%
crossing(IT.Response.Type = valid_IT_responses$IT.Response.Type) # Using predefined valid response types
# Step 4: Left join actual counts onto the grid to fill missing values
learned_propit_data <- learned_it_full_grid %>%
left_join(learned_it_participant_counts,
by = c("Participant.ID", "Group", "IT.Response.Type")) %>%
mutate(n = replace_na(n, 0)) %>%
group_by(Participant.ID, Group) %>%
mutate(
total_responses = sum(n),
proportion = n / total_responses
) %>%
ungroup()
# Notes:
# SL Meaning Condition = context condition (M- = unsupportive, M+ = supportive); default reference level = unsupportive/M-
# For SL Meaning Condition, M+ = -0.5 (after centering), M- = 0.5 (after centering)
# For Gender, female = -0.5 (after centering), male = 0.5 (after center)
# Identification task performance (disregarding learned/not learned status in SL task)
mp_slid_data_partsum <- mp_slid_data %>%
group_by(Participant.ID, Group) %>%
summarise(IT_corr_partacc = mean(IT.Correct., na.rm = TRUE), .groups = "drop")
it_summary_df <- mp_slid_data_partsum %>%
group_by(Group) %>%
summarise(
mean_accuracy = mean(IT_corr_partacc),
sd_accuracy = sd(IT_corr_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_accuracy + sd_accuracy + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(it_summary_df)
| Group | mean_accuracy | sd_accuracy | n | label_y | total_n |
|---|---|---|---|---|---|
| A | 0.3688889 | 0.1593143 | 60 | 0.5482032 | 105 |
| C | 0.3718519 | 0.1636014 | 45 | 0.5554533 | 105 |
# Identification task performance for *learned* words
learned_slid_data_partsum <- learned_slid_data %>%
group_by(Participant.ID, Group) %>%
summarise(IT_corr_partacc = mean(IT.Correct., na.rm = TRUE), .groups = "drop")
learned_it_summary_df <- learned_slid_data_partsum %>%
group_by(Group) %>%
summarise(
mean_accuracy = mean(IT_corr_partacc),
sd_accuracy = sd(IT_corr_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_accuracy + sd_accuracy + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(learned_it_summary_df)
| Group | mean_accuracy | sd_accuracy | n | label_y | total_n |
|---|---|---|---|---|---|
| A | 0.4271696 | 0.1734506 | 60 | 0.6206202 | 105 |
| C | 0.4393798 | 0.1939308 | 45 | 0.6533106 | 105 |
# Proportions of identification task (disregarding learned/not learned status in SL task)
propit_data_partsum <- propit_data %>%
group_by(Participant.ID, Group,IT.Response.Type) %>%
summarise(proportion_partacc = mean(proportion, na.rm = TRUE), .groups = "drop")
propit_summary_df <- propit_data_partsum %>%
group_by(Group, IT.Response.Type) %>%
summarise(
mean_proportion = mean(proportion_partacc),
sd_proportion = sd(proportion_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_proportion + sd_proportion + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(propit_summary_df)
| Group | IT.Response.Type | mean_proportion | sd_proportion | n | label_y | total_n |
|---|---|---|---|---|---|---|
| A | NA | 0.0000000 | 0.0000000 | 60 | 0.0200000 | 630 |
| A | correct response (M+ target word) | 0.3703175 | 0.1581543 | 60 | 0.5484717 | 630 |
| A | familiar foil | 0.2578571 | 0.1340458 | 60 | 0.4119029 | 630 |
| A | no meaning | 0.2751587 | 0.1715924 | 60 | 0.4667511 | 630 |
| A | semantically-related foil | 0.0633333 | 0.0992818 | 60 | 0.1826151 | 630 |
| A | unrelated foil | 0.0333333 | 0.0527939 | 60 | 0.1061272 | 630 |
| C | NA | 0.0000000 | 0.0000000 | 45 | 0.0200000 | 630 |
| C | correct response (M+ target word) | 0.3718519 | 0.1636014 | 45 | 0.5554533 | 630 |
| C | familiar foil | 0.2118519 | 0.1075803 | 45 | 0.3394321 | 630 |
| C | no meaning | 0.3511111 | 0.1702049 | 45 | 0.5413160 | 630 |
| C | semantically-related foil | 0.0296296 | 0.0523306 | 45 | 0.1019603 | 630 |
| C | unrelated foil | 0.0355556 | 0.0612991 | 45 | 0.1168546 | 630 |
# Proportions of identification task for *learned* words
learned_propit_data_partsum <- learned_propit_data %>%
group_by(Participant.ID, Group,IT.Response.Type) %>%
summarise(proportion_partacc = mean(proportion, na.rm = TRUE), .groups = "drop")
learned_propit_summary_df <- learned_propit_data_partsum %>%
group_by(Group, IT.Response.Type) %>%
summarise(
mean_proportion = mean(proportion_partacc),
sd_proportion = sd(proportion_partacc),
n = n(),
.groups = "drop"
) %>%
mutate(
label_y = mean_proportion + sd_proportion + 0.02, # Add small buffer
total_n = sum(n)
)
knitr::kable(learned_propit_summary_df)
| Group | IT.Response.Type | mean_proportion | sd_proportion | n | label_y | total_n |
|---|---|---|---|---|---|---|
| A | NA | 0.0000000 | 0.0000000 | 60 | 0.0200000 | 630 |
| A | correct response (M+ target word) | 0.4287081 | 0.1719068 | 60 | 0.6206149 | 630 |
| A | familiar foil | 0.2320241 | 0.1433781 | 60 | 0.3954022 | 630 |
| A | no meaning | 0.2421080 | 0.1893168 | 60 | 0.4514248 | 630 |
| A | semantically-related foil | 0.0608621 | 0.1009820 | 60 | 0.1818442 | 630 |
| A | unrelated foil | 0.0362977 | 0.0628175 | 60 | 0.1191152 | 630 |
| C | NA | 0.0000000 | 0.0000000 | 45 | 0.0200000 | 630 |
| C | correct response (M+ target word) | 0.4393798 | 0.1939308 | 45 | 0.6533106 | 630 |
| C | familiar foil | 0.1887736 | 0.1238211 | 45 | 0.3325947 | 630 |
| C | no meaning | 0.3287325 | 0.1888939 | 45 | 0.5376264 | 630 |
| C | semantically-related foil | 0.0262722 | 0.0600091 | 45 | 0.1062813 | 630 |
| C | unrelated foil | 0.0168419 | 0.0515258 | 45 | 0.0883677 | 630 |
write.csv(mp_slid_data$IT.Correct., "check_sd.csv", row.names = FALSE)
# Identification task performance (disregarding learned/not learned status in SL task)
mp_slid_data_partsum %>%
#mutate(SL.Meaning.Condition = factor(SL.Meaning.Condition, levels = c("M+","M-")) # Set the desired order of variables
#)%>%
ggplot(aes(x = Group, y = IT_corr_partacc, fill = Group, color = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
#facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = it_summary_df,
aes(
x = Group,
y = label_y,
label = sprintf("%.2f", mean_accuracy),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
# scale_fill_brewer(palette = "Dark2") +
#langcog::scale_fill_solarized()+
labs(y = "Mean Accuracy of Target Meaning/Word Identification",
x = "Group")+
#fill = "Meaning Condition") +
theme(axis.text.x = element_text(hjust = 0.5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 10),
legend.title = element_text(size = 11),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 12)) +
guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
# Identification task performance for *learned* words
learned_slid_data_partsum %>%
#mutate(SL.Meaning.Condition = factor(SL.Meaning.Condition, levels = c("M+","M-")) # Set the desired order of variables
#)%>%
ggplot(aes(x = Group, y = IT_corr_partacc, fill = Group, color = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
#facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = learned_it_summary_df,
aes(
x = Group,
y = label_y,
label = sprintf("%.2f", mean_accuracy),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
# scale_fill_brewer(palette = "Dark2") +
#langcog::scale_fill_solarized()+
labs(y = "Mean Accuracy of Target Meaning/Word Identification",
x = "Group")+
#fill = "Meaning Condition") +
theme(axis.text.x = element_text(hjust = 0.5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 10),
legend.title = element_text(size = 11),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 12)) +
guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
# Proportions of identification task (disregarding learned/not learned status in SL task)
propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = propit_summary_df %>%
filter(IT.Response.Type != "NA") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(M+ target word)",
"semantically-related foil" = "semantically-related foil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "no meaning"
))+
theme(axis.text.x = element_text(hjust = 1, angle = 45, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
# Proportions of identification task for *learned* words
learned_propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = learned_propit_summary_df %>%
filter(IT.Response.Type != "NA") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(M+ target word)",
"semantically-related foil" = "semantically-related foil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "no meaning"
))+
theme(axis.text.x = element_text(hjust = 1, angle = 45, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
# Proportions of identification task for adult data only (disregarding learned/not learned status in SL task)
adultpropit_data_plot <- propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA" & Group == "A") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = propit_summary_df %>%
filter(IT.Response.Type != "NA" & Group == "A") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Semantic Recognition Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(target word)",
"semantically-related foil" = "semantically-related\nfoil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "red X\n(no meaning)"
))+
theme(axis.text.x = element_text(hjust = .5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
legend.position = "none",
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
ggplot2::ggsave(filename = "ID Task Responses - Adults.jpeg",
plot = adultpropit_data_plot,
device = "jpeg",
dpi = 300,
width = 12,
height = 8,
units = "in",
limitsize = FALSE)
# Proportions of identification task for adult data only for *learned* words
learned_adultpropit_data_plot <- learned_propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA" & Group == "A") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = learned_propit_summary_df %>%
filter(IT.Response.Type != "NA" & Group == "A") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Semantic Recognition Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(target word)",
"semantically-related foil" = "semantically related\nfoil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "red X\n(no meaning)"
))+
theme(axis.text.x = element_text(hjust = .5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
legend.position = "none",
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
ggplot2::ggsave(filename = "ID Task Responses - Adults.jpeg",
plot = learned_adultpropit_data_plot,
device = "jpeg",
dpi = 300,
width = 12,
height = 8,
units = "in",
limitsize = FALSE)
# Proportions of identification task for child data only (disregarding learned/not learned status in SL task)
kidpropit_data_plot <- propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA" & Group == "C") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black", fill = "#619CFF") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = propit_summary_df %>%
filter(IT.Response.Type != "NA" & Group == "C") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Semantic Recognition Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(target word)",
"semantically-related foil" = "semantically-related\nfoil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "red X\n(no meaning)"
))+
theme(axis.text.x = element_text(hjust = .5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
legend.position = "none",
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
ggplot2::ggsave(filename = "ID Task Responses - Kids.jpeg",
plot = kidpropit_data_plot,
device = "jpeg",
dpi = 300,
width = 12,
height = 8,
units = "in",
limitsize = FALSE)
# Proportions of identification task for child data only for *learned* words
learned_kidpropit_data_plot <- learned_propit_data_partsum %>%
mutate(IT.Response.Type = factor(IT.Response.Type, levels = c("correct response (M+ target word)","semantically-related foil", "familiar foil", "unrelated foil", "no meaning")) # Set the desired order of variables
)%>%
filter(IT.Response.Type != "NA" & Group == "C") %>% # Removes both NA and character "NA"
droplevels() %>%
ggplot(aes(x = IT.Response.Type, y = proportion_partacc, fill = Group)) +
stat_summary(fun = mean, position = position_dodge(width = .9),
geom="bar", colour = "black", fill = "#619CFF") +
geom_hline(yintercept = .5, color = "grey", linetype = "dashed") +
facet_grid(~Group) +
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
geom = "errorbar",
position = position_dodge(width = 0.9),
size = 1, width = 0.25, color = "black") + # Standard deviation bars
geom_text(
data = learned_propit_summary_df %>%
filter(IT.Response.Type != "NA" & Group == "C") %>%
droplevels(),
aes(
x = IT.Response.Type,
y = label_y,
label = sprintf("%.2f", mean_proportion),
group = Group
),
position = position_dodge(width = 0.9),
size = 4,
color = "black") + # Add formatted text on top of bars
labs(#title = "Proportions of Identification Task Responses",
x = "Semantic Recognition Response Type",
y = "Mean Proportion of Responses",
fill = "Group") +
scale_x_discrete(labels = c(
"correct response (M+ target word)" = "correct response\n(target word)",
"semantically-related foil" = "semantically related\nfoil",
"familiar foil" = "familiar foil",
"unrelated foil" = "unrelated foil",
"no meaning" = "red X\n(no meaning)"
))+
theme(axis.text.x = element_text(hjust = .5, angle = 0, size = 12, color = "black"), # Customize x-axis text
axis.text.y = element_text(size = 12, color = "black"),
axis.title.x = element_text(size = 14, color = "black", face = "bold", margin = margin(t = 10)), # x-axis title
axis.title.y = element_text(size = 14, color = "black", face = "bold", margin = margin(r = 10)), # y-axis title
strip.text = element_text(size = 12, color = "black", face = "bold"), # Facet labels
legend.key.size = unit(.5, 'cm'),
legend.text = element_text(size = 11),
legend.title = element_text(size = 12, face = "bold"),
legend.margin = margin(t = 0, unit = 'cm'),
legend.position = "none",
plot.title = element_text(size = 12),
plot.margin = margin(t = 10, r = 20, b = 20, l = 10, unit = "pt"))+
#guides(fill = FALSE, color = FALSE) + # Remove both fill and color legends
scale_y_continuous(breaks = seq(0, 1, .25))
ggplot2::ggsave(filename = "ID Task Responses - Kids.jpeg",
plot = learned_kidpropit_data_plot,
device = "jpeg",
dpi = 300,
width = 12,
height = 8,
units = "in",
limitsize = FALSE)
Results:
- intercept is significant, so adult participants who failed to identify
the meaning of the word in the semantic learning task were significantly
more likely to not correctly identify the image in the identification
task (i.e., pick a foil/say no meaning)
- 4.8 times more likely to correctly identify the image in the
identification task if they had correctly identified the word’s meaning
in the semantic learning task, compared to if they didn’t
Adult participants who formed a correct semantic representation during learning were significantly more likely to get the identification trial correct—about 4.8 times higher odds, even after accounting for age, gender, and subject/item variability.
Note: may want to throw in at least one of our measures of education for adults since we have them – currently not included in analysis
# # maximal model
#rq1.a.m1 <- glmer(IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 + SL.Correct.Enough.for.IT. |Participant.ID)+(1 + SL.Correct.Enough.for.IT. |SL.Correct.Response)+(1+ SL.Correct.Enough.for.IT.|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_slid_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to simplify model
#
# summary(rePCA(rq1.a.m1)) # all PC 2s for semantic learning task accuracy (SL.Correct.Enough.for.IT.) account for negligible proportions of variance
#
# # model with all random slopes removed
# rq1.a.m2 <- glmer(IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 |Participant.ID)+(1 |SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_slid_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to further simplify model
#
# summary(rePCA(rq1.a.m2)) # random intercept for semantic learning task order (SL.Trial.Order.by.Task) and identification task trial order (IT.Trial.Order.by.Task) accounts for a negligible proportion of variance
#
# # model with random intercept for semantic learning task order (SL.Trial.Order.by.Task) and identification task trial order (IT.Trial.Order.by.Task) removed
rq1.a.m3 <- glmer(IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 |Participant.ID)+(1 |SL.Correct.Response), data=subset(mp_slid_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
# final model results
tab_model(rq1.a.m3, show.se = TRUE,show.ci = FALSE,show.stat = TRUE, show.df = TRUE)
| IT.Correct. | |||||
|---|---|---|---|---|---|
| Predictors | Odds Ratios | std. Error | Statistic | p | df |
| (Intercept) | 0.15 | 0.06 | -4.64 | <0.001 | Inf |
| SL Correct Enough for IT | 4.80 | 1.08 | 6.96 | <0.001 | Inf |
| age c | 1.00 | 0.05 | 0.05 | 0.957 | Inf |
| gender c | 1.24 | 0.22 | 1.20 | 0.231 | Inf |
| Random Effects | |||||
| σ2 | 3.29 | ||||
| τ00 Participant.ID | 0.14 | ||||
| τ00 SL.Correct.Response | 0.14 | ||||
| ICC | 0.08 | ||||
| N Participant.ID | 60 | ||||
| N SL.Correct.Response | 15 | ||||
| Observations | 900 | ||||
| Marginal R2 / Conditional R2 | 0.106 / 0.176 | ||||
summary(rq1.a.m3)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c +
## (1 | Participant.ID) + (1 | SL.Correct.Response)
## Data: subset(mp_slid_data, Group == "A")
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 20000))
##
## AIC BIC logLik deviance df.resid
## 1117.8 1146.6 -552.9 1105.8 894
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.4151 -0.7930 -0.4219 0.9933 3.6762
##
## Random effects:
## Groups Name Variance Std.Dev.
## Participant.ID (Intercept) 0.1394 0.3734
## SL.Correct.Response (Intercept) 0.1396 0.3737
## Number of obs: 900, groups: Participant.ID, 60; SL.Correct.Response, 15
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.866224 0.401821 -4.644 3.41e-06 ***
## SL.Correct.Enough.for.IT. 1.568281 0.225440 6.957 3.49e-12 ***
## age.c 0.002893 0.053101 0.054 0.957
## gender.c 0.214073 0.178667 1.198 0.231
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) SL.C.E age.c
## SL.C.E..IT. -0.501
## age.c -0.812 0.021
## gender.c -0.098 0.102 0.089
Results:
- intercept not significant, so child participants who failed to
identify the meaning of the word in the semantic learning task were not
significantly more likely to correctly or incorrectly identify the image
in the identification task
- 2.91 times more likely to correctly identify the image in the
identification task if they had correctly identified the word’s meaning
in the semantic learning task, compared to if they didn’t
Child participants who formed a correct semantic representation during learning were significantly more likely to get the identification trial correct—almost 3 times higher odds, even after accounting for age, gender, and subject/item variability.
Comparing patterns of results across the two participant groups, while semantic learning task performance still supports identification task performance in children, it has a weaker effect in children than in adults.
# # maximal model
# rq1.c.m1 <- glmer(IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c +(1 + SL.Correct.Enough.for.IT. |Participant.ID) +(1 + SL.Correct.Enough.for.IT. |SL.Correct.Response)+(1+ SL.Correct.Enough.for.IT.|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_slid_data,Group == "C"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to simplify model
#
# summary(rePCA(rq1.c.m1)) # PC 2 for semantic learning task trial order (SL.Trial.Order.by.Task), identification task trial order (IT.Trial.Order.by.Task), and participant account for negligible proportions of variance
#
# # model with above random slopes removed
rq1.c.m2 <- glmer(IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c +(1|Participant.ID)+ (1 + SL.Correct.Enough.for.IT. |SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_slid_data,Group == "C"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
# final model results
tab_model(rq1.c.m2, show.se = TRUE,show.ci = FALSE,show.stat = TRUE, show.df = TRUE)
| IT.Correct. | |||||
|---|---|---|---|---|---|
| Predictors | Odds Ratios | std. Error | Statistic | p | df |
| (Intercept) | 0.23 | 0.27 | -1.27 | 0.205 | Inf |
| SL Correct Enough for IT | 2.91 | 0.80 | 3.89 | <0.001 | Inf |
| age c | 0.98 | 0.13 | -0.13 | 0.900 | Inf |
| gender c | 1.17 | 0.26 | 0.71 | 0.478 | Inf |
| Random Effects | |||||
| σ2 | 3.29 | ||||
| τ00 Participant.ID | 0.17 | ||||
| τ00 IT.Trial.Order.by.Task | 0.03 | ||||
| τ00 SL.Trial.Order.by.Task | 0.08 | ||||
| τ00 SL.Correct.Response | 0.12 | ||||
| τ11 SL.Correct.Response.SL.Correct.Enough.for.IT. | 0.42 | ||||
| ρ01 SL.Correct.Response | -0.68 | ||||
| ICC | 0.13 | ||||
| N Participant.ID | 45 | ||||
| N SL.Correct.Response | 15 | ||||
| N SL.Trial.Order.by.Task | 30 | ||||
| N IT.Trial.Order.by.Task | 31 | ||||
| Observations | 675 | ||||
| Marginal R2 / Conditional R2 | 0.064 / 0.182 | ||||
summary(rq1.c.m2)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: IT.Correct. ~ SL.Correct.Enough.for.IT. + age.c + gender.c +
## (1 | Participant.ID) + (1 + SL.Correct.Enough.for.IT. | SL.Correct.Response) +
## (1 | SL.Trial.Order.by.Task) + (1 | IT.Trial.Order.by.Task)
## Data: subset(mp_slid_data, Group == "C")
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 20000))
##
## AIC BIC logLik deviance df.resid
## 863.5 908.6 -421.7 843.5 665
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.4958 -0.7278 -0.5010 0.9408 2.2953
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Participant.ID (Intercept) 0.17282 0.4157
## IT.Trial.Order.by.Task (Intercept) 0.02539 0.1594
## SL.Trial.Order.by.Task (Intercept) 0.07857 0.2803
## SL.Correct.Response (Intercept) 0.11698 0.3420
## SL.Correct.Enough.for.IT. 0.42399 0.6511 -0.68
## Number of obs: 675, groups:
## Participant.ID, 45; IT.Trial.Order.by.Task, 31; SL.Trial.Order.by.Task, 30; SL.Correct.Response, 15
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.45000 1.14441 -1.267 0.205
## SL.Correct.Enough.for.IT. 1.06959 0.27469 3.894 9.87e-05 ***
## age.c -0.01725 0.13686 -0.126 0.900
## gender.c 0.15553 0.21934 0.709 0.478
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) SL.C.E age.c
## SL.C.E..IT. -0.182
## age.c 0.981 -0.043
## gender.c 0.154 0.084 0.159
Results:
- intercept not significant, so adult participants who failed to
identify the meaning of the word in the semantic learning task were not
significantly more likely to choose the semantically-related foil or
other foils
- correctly identifying the word’s meaning in the semantic learning task
did not significantly influence the likelihood of choosing the
semantically-related foil over the other foils
Regardless of whether adult participants correctly or incorrectly identified a word’s meaning in the semantic learning task, when they did not identify the correct image in the identification task, they were not significantly more likely to select the semantically-related foil than any other foil, even after accounting for age, gender, and subject/item variability.
Note: may want to throw in at least one of our measures of education for adults since we have them – currently not included in analysis
# # maximal model
# rq2.1.a.m1 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 + SL.Correct.Enough.for.IT. |Participant.ID) + (1 + SL.Correct.Enough.for.IT.|SL.Nonword)+(1 + SL.Correct.Enough.for.IT. |SL.Correct.Response)+(1+ SL.Correct.Enough.for.IT.|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to simplify model
#
# summary(rePCA(rq2.1.a.m1)) # random slopes for semantic learning task accuracy (SL.Correct.Enough.for.IT.) for all variables account for negligible proportions of variance
#
# # model with all random slopes removed
# rq2.1.a.m2 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1|SL.Nonword)+(1|SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to further simplify model
#
# summary(rePCA(rq2.1.a.m2)) # all random intercepts account for non-zero proportions of variance, but the model is still too complex to converge, so will try removing each random intercept
#
# # model with random intercept for nonword (SL.Nonword) removed
# rq2.1.a.m3.nonw <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID)+(1|SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning
#
# # model with random intercept for target word (SL.Correct.Response) removed
# rq2.1.a.m3.nocr <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1|SL.Nonword)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning
#
# # model with random intercept for semantic learning task trial order (SL.Trial.Order.by.Task) removed
# rq2.1.a.m3.noslto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1|SL.Nonword)+(1|SL.Correct.Response)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # model is nearly unidentifiable: large eigenvalue ratio
#
# # model with random intercetp for identification task trial order (IT.Trial.Order.by.Task) removed
# rq2.1.a.m3.noitto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1|SL.Nonword)+(1|SL.Correct.Response)+(1|SL.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A"), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning
#
# # models are still too complex, so will try removing multiple random intercepts at once
#
# # model with random intercepts for semantic learning task trial order (SL.Trial.Order.by.Task) and identification task trial order (IT.Trial.Order.by.Task) removed
# rq2.1.a.m4.noto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1 |SL.Nonword)+(1|SL.Correct.Response), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # model is nearly unidentifiable: large eigenvalue ratio
#
# # model with random intercept for nonword (SL.Nonword) and target word (SL.Correct.Response) removed
# rq2.1.a.m4.nonwocr <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
# model with random intercept for nonword (SL.Nonword) and semantic learning task trial order (SL.Trial.Order.by.Task) removed
rq2.1.a.m4.nonwoslto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1|SL.Correct.Response) + (1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
# # model with random intercept for nonword (SL.Nonword) and identification task trial order (IT.Trial.Order.by.Task) removed
# rq2.1.a.m4.nonwoitto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) +(1|SL.Correct.Response)+(1|SL.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning
#
# # model with random intercept for target word (SL.Correct.Response) and semantic learning task trial order (SL.Trial.Order.by.Task) removed
# rq2.1.a.m4.nocroslto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1 |SL.Nonword)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
#
# # model with random intercept for target word (SL.Correct.Response) and identification task trial order (SL.Trial.Order.by.Task) removed
# rq2.1.a.m4.nocroritto <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1|Participant.ID) + (1 |SL.Nonword)+(1|SL.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "A" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning
# # comparing models that converged to see which is best
# anova(rq2.1.a.m4.nocroslto,rq2.1.a.m4.nonwocr) # rq2.1.a.m4.nocroslto has slightly smaller AIC & BIC
# anova(rq2.1.a.m4.nonwoslto,rq2.1.a.m4.nonwocr) # rq2.1.a.m4.nonwoslto has slightly smaller AIC & BIC
# anova(rq2.1.a.m4.nocroslto,rq2.1.a.m4.nonwoslto) # no model comes out better than the other, but already know target word has levels with observations, so will keep that variable
mp_foil_data$Semantic.vs.Other <- relevel(mp_foil_data$Semantic.vs.Other, ref = "other foil")
tab_model(rq2.1.a.m4.nonwoslto, show.se = TRUE,show.ci = FALSE,show.stat = TRUE, show.df = TRUE)
| Semantic.vs.Other | |||||
|---|---|---|---|---|---|
| Predictors | Odds Ratios | std. Error | Statistic | p | df |
| (Intercept) | 0.56 | 0.53 | -0.61 | 0.539 | Inf |
| SL Correct Enough for IT | 0.94 | 0.38 | -0.14 | 0.887 | Inf |
| age c | 0.78 | 0.11 | -1.84 | 0.065 | Inf |
| gender c | 1.01 | 0.45 | 0.03 | 0.980 | Inf |
| Random Effects | |||||
| σ2 | 3.29 | ||||
| τ00 Participant.ID | 0.81 | ||||
| τ00 IT.Trial.Order.by.Task | 0.33 | ||||
| τ00 SL.Correct.Response | 0.52 | ||||
| ICC | 0.34 | ||||
| N Participant.ID | 58 | ||||
| N SL.Correct.Response | 15 | ||||
| N IT.Trial.Order.by.Task | 30 | ||||
| Observations | 319 | ||||
| Marginal R2 / Conditional R2 | 0.034 / 0.359 | ||||
Results:
- intercept not significant, so child participants who failed to
identify the meaning of the word in the semantic learning task were not
significantly more likely to choose the semantically-related foil or
other foils
- correctly identifying the word’s meaning in the semantic learning task
did not significantly influence the likelihood of choosing the
semantically-related foil over the other foils
- male child participants were 4.08 times more likely than female child
participants to choose the semantically-related foil over the other
foils
Regardless of whether child participants correctly or incorrectly identified a word’s meaning in the semantic learning task, when they did not identify the correct image in the identification task, they were not significantly more likely to select the semantically-related foil than any other foil, even after accounting for age, gender, and subject/item variability. However, male child participants were significantly more likely than female child participants to choose a semantically-related foil over any other foil , even after accounting for semantic learning task performance, age, and subject/item variability.
Comparing patterns of results across the two participant groups, adult and child participants appear generally no different in their word learning strategies, although there is an bias present in female children that is absent in adults.
# # maximal model
# rq2.1.c.m1 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 + SL.Correct.Enough.for.IT. |Participant.ID) + (1 + SL.Correct.Enough.for.IT.|SL.Nonword)+(1 + SL.Correct.Enough.for.IT. |SL.Correct.Response)+(1+ SL.Correct.Enough.for.IT.|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "C" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # failed to converge, so checking importance of each component to decide how to simplify model
#
# summary(rePCA(rq2.1.c.m1)) # random slopes for semantic learning task accuracy (SL.Correct.Enough.for.IT.) for target word (SL.Correct.Response) and nonword (SL.Nonword) account for negligible proportions of variance
#
# # model with above random slopes removed
# rq2.1.c.m2 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 + SL.Correct.Enough.for.IT. |Participant.ID) + (1 |SL.Nonword)+(1 |SL.Correct.Response)+(1+ SL.Correct.Enough.for.IT.|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "C" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # failed to converge, so checking importance of each component to decide how to further simplify model
#
# summary(rePCA(rq2.1.c.m2)) # random slope for semantic learning task accuracy (SL.Correct.Enough.for.IT.) for semantic learning task trial order (SL.Trial.Order.by.Task) accounts for a negligible proportion of variance
#
# # model with random slope for semantic learning task accuracy (SL.Correct.Enough.for.IT.) for semantic learning task trial order (SL.Trial.Order.by.Task) removed
# rq2.1.c.m3 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 + SL.Correct.Enough.for.IT. |Participant.ID) + (1 |SL.Nonword)+(1 |SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1+ SL.Correct.Enough.for.IT.|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "C" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # failed to converge, so checking importance of each component to decide how to further simplify model
#
# summary(rePCA(rq2.1.c.m3)) # random slopes for semantic learning task accuracy (SL.Correct.Enough.for.IT.) for participant and identification task trial order (IT.Trial.Order.by.Task) account for non-zero proportions of variance, but the model is still too complex to converge, so will try removing them
#
# # model with all random slopes removed
# rq2.1.c.m4 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 |Participant.ID) + (1 |SL.Nonword)+(1 |SL.Correct.Response)+(1|SL.Trial.Order.by.Task)+(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "C" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # isSingular warning, so checking importance of each component to decide how to further simplify model
#
# summary(rePCA(rq2.1.c.m4)) # random intercepts for semantic learning task trial order (SL.Trial.Order.by.Task), target word (SL.Correct.Response), and nonword (SL.Nonword) account for negligible proportions of variance
# model with above random intercepts removed
rq2.1.c.m5 <- glmer(Semantic.vs.Other ~ SL.Correct.Enough.for.IT. + age.c + gender.c + (1 |Participant.ID) +(1|IT.Trial.Order.by.Task), data=subset(mp_foil_data,Group == "C" & !is.na(Semantic.vs.Other)), family = 'binomial', control=glmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e4))) # converges!
mp_foil_data$Semantic.vs.Other <- relevel(mp_foil_data$Semantic.vs.Other, ref = "other foil")
tab_model(rq2.1.c.m5, show.se = TRUE,show.ci = FALSE,show.stat = TRUE, show.df = TRUE)
| Semantic.vs.Other | |||||
|---|---|---|---|---|---|
| Predictors | Odds Ratios | std. Error | Statistic | p | df |
| (Intercept) | 0.01 | 0.02 | -1.49 | 0.136 | Inf |
| SL Correct Enough for IT | 0.68 | 0.40 | -0.65 | 0.515 | Inf |
| age c | 0.75 | 0.30 | -0.72 | 0.469 | Inf |
| gender c | 4.08 | 2.82 | 2.03 | 0.042 | Inf |
| Random Effects | |||||
| σ2 | 3.29 | ||||
| τ00 Participant.ID | 0.68 | ||||
| τ00 IT.Trial.Order.by.Task | 1.82 | ||||
| ICC | 0.43 | ||||
| N Participant.ID | 44 | ||||
| N IT.Trial.Order.by.Task | 31 | ||||
| Observations | 187 | ||||
| Marginal R2 / Conditional R2 | 0.102 / 0.489 | ||||