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