library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.1 ✔ purrr 1.0.1
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.3.0 ✔ stringr 1.5.0
## ✔ readr 2.1.3 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(here)
## here() starts at /Users/caoanjie/Desktop/projects/looking_time/adult_analysis/study_3
d <- read_csv(here("data/01_trimmed_data/trimmed_lt_d.csv"))
## Rows: 27816 Columns: 30
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (20): prolific_id, block_type, background_stimulus, deviant_stimulus, ba...
## dbl (6): total_rt, total_trial_number, trial_number, block_number, val, pre...
## lgl (4): same_animacy, same_number, same_pose, same_id
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
d <- d %>% mutate(violation_type_with_background = case_when(
trial_type == "background" ~ "background",
TRUE ~ violation_type
))
running model
pre-registered model
m1 <- lmerTest::lmer(
log(total_rt) ~ I((exp(1) ** (-trial_number))) +
I((exp(1)**(-trial_number))) * number +
I((exp(1)**(-trial_number))) * pose +
I((exp(1)**(-trial_number))) * animacy +
I((exp(1)**(-trial_number))) * violation_type_with_background +
(1 | prolific_id),
data = d
)
d$m1_lt = predict(m1, re.form = NA)
visualization
d %>%
filter(trial_type == "background") %>%
select(trial_number, violation_type_with_background, total_rt, m1_lt) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("log_rt", "m1_lt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2))

d %>%
filter(trial_type == "background") %>%
select(trial_number, block_number, violation_type_with_background, total_rt, m1_lt) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("log_rt", "m1_lt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2)) +
facet_wrap(~block_number)

preregistered model plus block number
m1_with_block <- lmerTest::lmer(
log(total_rt) ~ I((exp(1) ** (-trial_number))) +
I((exp(1)**(-trial_number))) * number +
I((exp(1)**(-trial_number))) * pose +
I((exp(1)**(-trial_number))) * animacy +
I((exp(1)**(-trial_number))) * violation_type_with_background + log(block_number) +
(1 | prolific_id),
data = d
)
d$m1_lt = predict(m1_with_block, re.form = NA)
visualization
d %>%
filter(trial_type == "background") %>%
select(trial_number, violation_type_with_background, total_rt, m1_lt) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("log_rt", "m1_lt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2))

d %>%
filter(trial_type == "background") %>%
select(trial_number,block_number, violation_type_with_background, total_rt, m1_lt) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("log_rt", "m1_lt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2)) +
facet_wrap(~block_number)

background only
background_d <- d %>%
filter(trial_type == "background") %>%
mutate(log_rt = log(total_rt))
block_m_linear <- lmerTest::lmer(
log_rt ~ I((exp(1) ** (-trial_number))) * block_number +
(1 | prolific_id),
data = background_d
)
block_m_exp <- lmerTest::lmer(
log_rt ~ I((exp(1) ** (-trial_number))) * I((exp(1) ** (-block_number))) +
(1 | prolific_id),
data = background_d
)
block_m_log <- lmerTest::lmer(
log_rt ~ I((exp(1) ** (-trial_number))) * log(block_number) +
(1 | prolific_id),
data = background_d
)
block_m_log_two <- lmerTest::lmer(
log_rt ~ log(trial_number) * log(block_number) +
(1 | prolific_id),
data = background_d
)
background_d$linear_block_pred = predict(block_m_linear, re.form = NA)
background_d$exp_block_pred = predict(block_m_exp, re.form = NA)
background_d$log_block_pred = predict(block_m_log, re.form = NA)
background_d$log_two_block_pred = predict(block_m_log_two, re.form = NA)
visualization
background_d %>%
select(trial_number, violation_type_with_background, total_rt,
linear_block_pred, exp_block_pred, log_two_block_pred, log_block_pred) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("linear_block_pred", "exp_block_pred", "log_two_block_pred", "log_block_pred", "log_rt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2))

background_d %>%
select(block_number, trial_number, violation_type_with_background, total_rt,
linear_block_pred, exp_block_pred, log_two_block_pred, log_block_pred) %>%
mutate(log_rt = log(total_rt)) %>%
pivot_longer(cols = c("linear_block_pred", "exp_block_pred", "log_two_block_pred", "log_block_pred", "log_rt"),
names_to = "val_type",
values_to = "val") %>%
ggplot(aes(x = trial_number, y = val, color = val_type)) +
stat_summary(fun.data = "mean_cl_boot", position = position_dodge(width = .2)) +
stat_summary(fun.data = "mean_cl_boot", geom = "line", position = position_dodge(width = .2)) +
facet_wrap(~block_number)

background_d$linear_block_pred = predict(block_m_linear, re.form = NA)
background_d$exp_block_pred = predict(block_m_exp, re.form = NA)
background_d$log_block_pred = predict(block_m_log, re.form = NA)
background_d$log_two_block_pred = predict(block_m_log_two, re.form = NA)
aic_df <- tibble(
"linear_block_pred" = AIC(block_m_linear),
"exp_block_pred" = AIC(block_m_exp),
"log_block_pred" = AIC(block_m_log),
"log_two_block_pred" = AIC(block_m_log_two)
)
aic_df
## # A tibble: 1 × 4
## linear_block_pred exp_block_pred log_block_pred log_two_block_pred
## <dbl> <dbl> <dbl> <dbl>
## 1 33005. 33312. 32124. 32397.
block_m_log %>% summary()
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: log_rt ~ I((exp(1)^(-trial_number))) * log(block_number) + (1 |
## prolific_id)
## Data: background_d
##
## REML criterion at convergence: 32112.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -4.4682 -0.6077 -0.0355 0.5297 6.4960
##
## Random effects:
## Groups Name Variance Std.Dev.
## prolific_id (Intercept) 0.2728 0.5223
## Residual 0.2027 0.4502
## Number of obs: 24323, groups: prolific_id, 437
##
## Fixed effects:
## Estimate Std. Error df
## (Intercept) 8.039e+00 2.749e-02 6.212e+02
## I((exp(1)^(-trial_number))) 9.489e-01 5.423e-02 2.389e+04
## log(block_number) -2.747e-01 5.551e-03 2.390e+04
## I((exp(1)^(-trial_number))):log(block_number) 4.414e-02 2.628e-02 2.389e+04
## t value Pr(>|t|)
## (Intercept) 292.453 <2e-16 ***
## I((exp(1)^(-trial_number))) 17.499 <2e-16 ***
## log(block_number) -49.486 <2e-16 ***
## I((exp(1)^(-trial_number))):log(block_number) 1.679 0.0931 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) I((x(1)^(-_))) lg(b_)
## I((x(1)^(-_))) -0.302
## lg(blck_nm) -0.388 0.675
## I(((1)^(-_))): 0.281 -0.929 -0.725