library(tidyverse)
library(broom)
library(readbulk)
library(lme4)
library(summarytools)
Reading raw data as logged by psychopy and combinging individual participant files using pck ‘readbulk’. We only analysed responses to trials with commutativity statments (“is equal to”).
raw <- read_bulk(directory = "~/data/", extension = ".csv")
data <-
raw %>%
group_by(participant) %>%
fill(left) %>%
filter(Condition == "is equal to") %>%
mutate(resp_true = case_when(left == TRUE & key_resp_2.keys == "left" ~ 1,
left == FALSE & key_resp_2.keys == "right" ~ 1,
left == TRUE & key_resp_2.keys == "right" ~ 0,
left == FALSE & key_resp_2.keys == "left" ~ 0)) %>%
mutate(Symmetric = if_else(Symmetric == "Y", 1, 0)) %>%
mutate(Symbol = gsub("[^0-9\\.]", "", Symbol) ) %>%
ungroup()
T-test of summary statistics (pre-registered)
summary <- data %>%
group_by(participant, Symmetric, Symbol) %>%
summarize(resp_true = sum(resp_true)/7) #percentage of endorsing commutativity out of the 7 trials per symbol
t_test <- data %>%
group_by(participant, Symmetric) %>%
summarize(resp_true = sum(resp_true)/70) %>%
spread(Symmetric, resp_true) %>%
ungroup()
t_test %>%
summarise_all(list(mean, sd, min, max))
## # A tibble: 1 x 12
## participant_fn1 `0_fn1` `1_fn1` participant_fn2 `0_fn2` `1_fn2`
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 15.5 0.267 0.668 8.80 0.257 0.261
## # … with 6 more variables: participant_fn3 <int>, `0_fn3` <dbl>, `1_fn3` <dbl>,
## # participant_fn4 <int>, `0_fn4` <dbl>, `1_fn4` <dbl>
tidy(t.test(t_test$`0`, t_test$`1`, paired = TRUE, alternative = 'less'))# t(29) = -5.577, p = .000000255
## # A tibble: 1 x 8
## estimate statistic p.value parameter conf.low conf.high method alternative
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
## 1 -0.400 -5.58 2.55e-6 29 -Inf -0.278 Paired … less
Further visual data exploration esp. effect within each participant, effect within each symbol
#Plot of symmetry effect by Symbol
ggplot(summary, aes(as.factor(Symmetric), resp_true, color = Symmetric, group = participant)) +
geom_line() +
geom_point() +
facet_wrap(~Symbol)
#Plot of symmetry effect by participant
ggplot(summary, aes(as.factor(Symmetric), resp_true, fill = as.factor(Symmetric))) +
geom_col() +
facet_wrap(~participant)
Modelling the effect as a generalized linear model with mixed effects and binomial link function. Modelling symbols and participants as random factors and comparing symmetry (vertical vs. horizontal) in the fixed factor
full_data_mixed_log <- glmer(resp_true ~ Symmetric + (1|Symbol) + (1|participant), data = data, family = binomial, nAGQ=1)
#using nAGQ=1 --> Laplace approximation algorithm used for estimation. The more accurate Gauss Hermite quadrature is not available for models estimating more than 1 random intercept.
tidy(full_data_mixed_log, conf.int=TRUE, exponentiate=TRUE) %>%
mutate(p.value = round(p.value, digits = 5))
## # A tibble: 4 x 8
## term estimate std.error statistic p.value conf.low conf.high group
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 (Intercept) -1.18 0.221 -5.33 0 -1.61 -0.747 fixed
## 2 Symmetric 2.01 0.0764 26.3 0 1.86 2.16 fixed
## 3 sd_(Intercept… 1.05 NA NA NA NA NA partic…
## 4 sd_(Intercept… 0.299 NA NA NA NA NA Symbol
#exponentiate TRUE transforms the estimate of the parameter from the log Odds to the odds ratio.
#i.e. there is a 1.73 times higher chance of endorsing commutativity for vertical symmetry given a constant symbol
#i.e. if adding both symbols and participants as random intercepts, the OR increases to 2 times righer risk
#we also see that there is a stronger random effect of participant than symbol
#if we add symbol as a fixed factor, we can see that symbols 10 (OR=0.66) and 6 (OR=0.60) have a significantly lower risk of being endorsed as commutative in general, while symbol 5 (OR=1.46) has a significantly higher risk of being endoresed
#in a simple logistic regression including only symmetry as fixed factor the OR increases to about 5 times higher risk