Data Processing

Read in data

d <- read_csv(data_path)
## Rows: 20700 Columns: 43
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (30): trial_type, internal_node_id, subject, hitId, assignmentId, struct...
## dbl (11): trial_index, time_elapsed, rt, start_time, end_time, choice_index,...
## lgl  (2): success, timeout
## 
## ℹ 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 %>%
  filter(
    !(trial_type %in% c("show-reward"))
  )

Adding some useful columns

Adding columns to characterize participant choices.

d <- d %>%
  mutate(
    trial_number = case_when(
      trial_index<8 ~ trial_index,
      trial_index<199 ~ 7+(trial_index-7)/2,
      TRUE ~ trial_index-96
    )
  ) %>%
  relocate(trial_number,.after=trial_index) %>%
  mutate(
    test_trial_number = case_when(
      trial_number<7 ~ NA_real_,
      trial_number<103 ~ trial_number-6,
      TRUE ~ NA_real_
    )
  ) %>%
  relocate(test_trial_number,.after=trial_number) %>%
  mutate(
    block_trial_number = case_when(
      test_trial_number < 49 ~ test_trial_number,
      TRUE ~ test_trial_number - 48),
    block_trial_number_c = block_trial_number - 24.5
  ) %>%
  relocate(block_trial_number,.after=test_trial_number) %>%
  relocate(block_trial_number_c,.after=block_trial_number) %>%
  mutate(
    explore_block = case_when(
      test_trial_number<9 ~ 1,
      test_trial_number<17 ~ 2,
      test_trial_number<25 ~ 3,
      test_trial_number<33 ~ 4,
      test_trial_number < 41 ~ 5,
      test_trial_number < 49 ~ 6,
      test_trial_number < 57 ~ 7,
      test_trial_number<65 ~ 8,
      test_trial_number<73 ~ 9,
      test_trial_number<81 ~ 10,
      test_trial_number <89 ~ 11,
      test_trial_number <97 ~ 12,
      TRUE ~ NA_real_
    )
  ) %>%
  mutate(
    max_reward_choice = case_when(
      reward_score_unadjusted ==8 ~ 1,
      !is.na(test_trial_number) ~ 0,
      TRUE ~ NA_real_
    )
  ) %>%
  mutate(
    cur_structure_condition=case_when(
      test_trial_number < 49 ~ structure_condition,
      !is.na(test_trial_number) & match_condition == "match" ~ structure_condition,
       test_trial_number >= 49 & structure_condition == "emotion" ~ "model",
      test_trial_number >= 49 & structure_condition == "model" ~ "emotion"
    )
  ) %>%
  mutate(block = case_when(
      test_trial_number < 49 ~ 1,
      test_trial_number >= 49 ~ 2,
      TRUE ~ NA_real_
    ))

#recenter vars
d <- d %>%
  mutate(
    structure_condition_c = case_when(
      structure_condition == "model" ~ -0.5,
      structure_condition == "emotion" ~ 0.5),
    cur_structure_condition_c = case_when(
      cur_structure_condition == "model" ~ -0.5,
      cur_structure_condition == "emotion" ~ 0.5),
    match_condition_c = case_when(
      match_condition == "match" ~ 0.5,
      match_condition == "mismatch" ~ -0.5
    ),
    cur_structure_condition_model = case_when(
      cur_structure_condition == "model" ~ 0,
      cur_structure_condition == "emotion" ~ 1),
    cur_structure_condition_emotion = case_when(
      cur_structure_condition == "model" ~ -1,
      cur_structure_condition == "emotion" ~ 0),
    match_condition_match = case_when(
      match_condition == "match" ~ 0,
      match_condition == "mismatch" ~ -1
    ),
    match_condition_mismatch = case_when(
      match_condition == "match" ~ 1,
      match_condition == "mismatch" ~ 0
    ),
    block_c = case_when(
      test_trial_number < 49 ~ -0.5,
      TRUE ~ 0.5
    ),
    block_learn = case_when(
      block==1 ~ 0,
      block==2 ~ 1
    ),
    block_gen = case_when(
      block==1 ~ -1,
      block==2 ~ 0
    )
  )

Check data

Open ended responses

open_resps <- d %>%
  filter(trial_index %in% 206) %>%
  select(subject, structure_condition, match_condition ,response) %>% 
  extract(response, into = c("patterns", "strategy", "comments"),
          regex = "patterns\":\"(.*)\",\"strategy\":\"(.*)\",\"comments\":\"(.*)")

#write_csv(open_resps, here("data-analysis","data","v1","processed","emogo-v1-openresponses.csv"))

Attention check

attention_check <- d %>%
  filter(trial_index %in% c(4,5)) %>%
  mutate(
    attention_check_correct_choice = case_when(
      trial_index == 4 ~ "stimuli/horse.jpg",
      trial_index == 5 ~ "stimuli/hammer.jpg"
    ),
    check_correct = ifelse(attention_check_correct_choice==choiceImage,1,0)
  ) %>%
  group_by(subject) %>%
  summarize(
    N=n(),
    avg_correct = mean(check_correct)
  )

passed_attention_check <- attention_check %>%
  filter(avg_correct ==1) %>%
  pull(subject)

Total time

total_time <- d %>%
  filter(trial_index==206) %>%
  select(subject,time_elapsed) %>%
  distinct() %>%
  mutate(time_mins = time_elapsed/1000/60)

#Minumum time
min(total_time$time_mins)
## [1] 6.6528
#Any subjects with times under 4 minutes?
subjects_too_fast <- total_time %>%
  filter(time_mins<4)

subjects_too_fast %>%
  pull(subject)
## character(0)

Check image location selection

percent_location_selections <- d %>%
  filter(!is.na(test_trial_number)) %>%
  group_by(subject,choiceLocation) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))
## `summarise()` has grouped output by 'subject'. You can override using the
## `.groups` argument.
#any frequencies above 80%?
subjects_same_location_exclusion <- percent_location_selections %>%
  filter(freq>0.8) 

subjects_same_location_exclusion %>%
  distinct(subject) %>%
  pull(subject)
## character(0)

Reward ranks

reward_rank <- d %>%
  filter(subject %in% passed_attention_check) %>%
  filter(test_trial_number==96) %>%
  select(subject,structure_condition,match_condition,score_after_trial)

median_score <- median(reward_rank$score_after_trial)

ggplot(reward_rank,aes(x=score_after_trial))+
  geom_histogram()+
  geom_vline(xintercept = median_score)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(reward_rank,aes(x=score_after_trial,color=match_condition))+
  geom_density()+
  facet_wrap(~structure_condition)

subjects_top_50 <- reward_rank %>%
  filter(score_after_trial>=median_score) %>%
  select(subject)

write_csv(subjects_top_50,here("data-analysis","data","v1","processed","subjects_top_50.csv"))

conditions_top_50 <- reward_rank %>%
  filter(subject %in% subjects_top_50$subject) %>%
  group_by(structure_condition,match_condition) %>%
  tally()
conditions_top_50
## # A tibble: 4 × 3
## # Groups:   structure_condition [2]
##   structure_condition match_condition     n
##   <chr>               <chr>           <int>
## 1 emotion             match              15
## 2 emotion             mismatch            9
## 3 model               match              19
## 4 model               mismatch            7

Final tally

#exclude any participants who meet exclusion criteria
d <- d %>%
  filter(subject %in% passed_attention_check) %>%
  filter(!(subject %in% subjects_same_location_exclusion)) %>%
  filter(!(subject %in% subjects_too_fast))

d %>%
  distinct(subject,structure_condition,match_condition) %>%
  group_by(structure_condition,match_condition) %>%
  tally()
## # A tibble: 4 × 3
## # Groups:   structure_condition [2]
##   structure_condition match_condition     n
##   <chr>               <chr>           <int>
## 1 emotion             match              25
## 2 emotion             mismatch           25
## 3 model               match              25
## 4 model               mismatch           25

Summarize

subject_by_block <- d %>%
  filter(!is.na(explore_block)) %>%
  group_by(subject,match_condition,structure_condition,explore_block) %>%
  summarize(
    max_choice_percent=mean(max_reward_choice)
  )
## `summarise()` has grouped output by 'subject', 'match_condition',
## 'structure_condition'. You can override using the `.groups` argument.
summarize_by_block <- subject_by_block %>%
  group_by(explore_block) %>%
  summarize(
    N=n(),
    max_choice = mean(max_choice_percent),
    se = sqrt(var(max_choice_percent, na.rm = TRUE)/N),
    ci=qt(0.975, N-1)*sd(max_choice_percent,na.rm=TRUE)/sqrt(N),
    lower_ci=max_choice-ci,
    upper_ci=max_choice+ci,
    lower_se=max_choice-se,
    upper_se=max_choice+se
  )

summarize_by_block_by_condition <- subject_by_block %>%
  group_by(match_condition,structure_condition,explore_block) %>%
  summarize(
     N=n(),
    max_choice = mean(max_choice_percent),
    se = sqrt(var(max_choice_percent, na.rm = TRUE)/N),
    ci=qt(0.975, N-1)*sd(max_choice_percent,na.rm=TRUE)/sqrt(N),
    lower_ci=max_choice-ci,
    upper_ci=max_choice+ci,
    lower_se=max_choice-se,
    upper_se=max_choice+se
  )
## `summarise()` has grouped output by 'match_condition', 'structure_condition'.
## You can override using the `.groups` argument.

Summarize by different reward choices

summarize_choice_by_trial <- d %>%
  filter(!is.na(test_trial_number)) %>%
  group_by(structure_condition, match_condition,test_trial_number) %>%
  summarize(
    N=n(),
    reward_8 = mean(reward_score_unadjusted==8),
    reward_6 = mean(reward_score_unadjusted==6),
    reward_4 = mean(reward_score_unadjusted==4),
    reward_2 = mean(reward_score_unadjusted==2)
  ) %>%
  pivot_longer(cols = c(reward_8,reward_6,reward_4,reward_2),names_to = "reward",values_to = "percent_choice",names_prefix="reward_")
## `summarise()` has grouped output by 'structure_condition', 'match_condition'.
## You can override using the `.groups` argument.
summarize_choice_by_block <- d %>%
  filter(!is.na(test_trial_number)) %>%
  group_by(structure_condition, match_condition,explore_block) %>%
  summarize(
    N=n(),
    reward_8 = mean(reward_score_unadjusted==8),
    reward_6 = mean(reward_score_unadjusted==6),
    reward_4 = mean(reward_score_unadjusted==4),
    reward_2 = mean(reward_score_unadjusted==2)
  ) %>%
  pivot_longer(cols = c(reward_8,reward_6,reward_4,reward_2),names_to = "reward",values_to = "percent_choice",names_prefix="reward_")
## `summarise()` has grouped output by 'structure_condition', 'match_condition'.
## You can override using the `.groups` argument.

Analysis

Plots

ggplot(subject_by_block,aes(explore_block,max_choice_percent))+
  geom_point(size=1.5,alpha=0.1,aes(group=subject))+
  geom_line(alpha=0.1,aes(group=subject))+
  geom_point(data=summarize_by_block,aes(y=max_choice),size=2,color="black")+
  geom_line(data=summarize_by_block,aes(y=max_choice),size=1.2,color="black")+
  geom_errorbar(data=summarize_by_block,aes(y=max_choice,ymin=lower_se,ymax=upper_se),width=0,color="black")+
  geom_vline(xintercept=6.5,linetype="dotted")+
  geom_hline(yintercept=0.25,linetype="dashed")+
  theme(legend.position="none")+
  scale_x_continuous(breaks=seq(1,12))+
  xlab("Block (8 Trials = 1 Block)")+
  ylab("Percent reward-maximizing choices")

ggplot(summarize_by_block_by_condition,aes(explore_block,max_choice, color=structure_condition,shape=match_condition,linetype=match_condition))+
  geom_point(size=1.5,alpha=0.5)+
  geom_line(alpha=0.5)+
  geom_point(aes(y=max_choice),size=2)+
  geom_line(aes(y=max_choice),size=1.2)+
  geom_errorbar(aes(y=max_choice,ymin=lower_se,ymax=upper_se),width=0)+
  geom_vline(xintercept=6.5,linetype="dotted")+
  geom_hline(yintercept=0.25,linetype="dashed")+
  #theme(legend.position="none")+
  scale_x_continuous(breaks=seq(1,12))+
  xlab("Block (8 Trials = 1 Block)")+
  ylab("Percent reward-maximizing choices")

ggplot(subject_by_block,aes(explore_block,max_choice_percent, group=subject))+
  #geom_point(size=1.5,alpha=0.5)+
  geom_line(alpha=0.5)+
  geom_vline(xintercept=6.5,linetype="dotted")+
  geom_hline(yintercept=0.25,linetype="dashed")+
  theme(legend.position="none")+
  facet_wrap(~structure_condition+match_condition)+
  scale_x_continuous(breaks=seq(1,12))+
  xlab("Block (8 Trials = 1 Block)")+
  ylab("Percent reward-maximizing choices")

ggplot(summarize_choice_by_trial,aes(test_trial_number,percent_choice,color=reward))+
  geom_point()+
  geom_line()+
  geom_vline(xintercept=48.5,linetype="dotted")+
  geom_hline(yintercept=0.25,linetype="dashed")+
  xlab("Trial Number")+
  ylab("Percent choices")+
  facet_wrap(~structure_condition+match_condition)

ggplot(summarize_choice_by_block,aes(explore_block,percent_choice,color=reward))+
  geom_point()+
  geom_line()+
  geom_vline(xintercept=6.5,linetype="dotted")+
  geom_hline(yintercept=0.25,linetype="dashed")+
  xlab("Block (8 Trials = 1 Block)")+
  ylab("Percent choices")+
  facet_wrap(~structure_condition+match_condition)

Model

Overall

#### Pruning random effects structure
#maximal random effects structure
m <- glmer(max_reward_choice ~ cur_structure_condition_c*match_condition_c*block_c*block_trial_number_c + (1+block_c*block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial,glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=100000)))
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ cur_structure_condition_c * match_condition_c *  
##     block_c * block_trial_number_c + (1 + block_c * block_trial_number_c |  
##     subject) + (1 | choiceImage)
##    Data: d
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+05))
## 
##      AIC      BIC   logLik deviance df.resid 
##   8871.0   9064.6  -4408.5   8817.0     9573 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -88.769  -0.496   0.068   0.470   4.853 
## 
## Random effects:
##  Groups      Name                         Variance Std.Dev. Corr          
##  choiceImage (Intercept)                  1.187091 1.08954                
##  subject     (Intercept)                  3.349599 1.83019                
##              block_c                      6.364282 2.52275  0.17          
##              block_trial_number_c         0.003632 0.06026  0.86 0.22     
##              block_c:block_trial_number_c 0.008271 0.09095  0.29 0.81 0.33
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                                           Estimate
## (Intercept)                                                               0.824848
## cur_structure_condition_c                                                -1.072925
## match_condition_c                                                         1.702332
## block_c                                                                   0.327357
## block_trial_number_c                                                      0.071721
## cur_structure_condition_c:match_condition_c                              -0.879433
## cur_structure_condition_c:block_c                                        -0.927782
## match_condition_c:block_c                                                 1.307046
## cur_structure_condition_c:block_trial_number_c                           -0.040831
## match_condition_c:block_trial_number_c                                    0.033975
## block_c:block_trial_number_c                                              0.020457
## cur_structure_condition_c:match_condition_c:block_c                      -0.228689
## cur_structure_condition_c:match_condition_c:block_trial_number_c         -0.048890
## cur_structure_condition_c:block_c:block_trial_number_c                   -0.022276
## match_condition_c:block_c:block_trial_number_c                            0.036608
## cur_structure_condition_c:match_condition_c:block_c:block_trial_number_c -0.049989
##                                                                          Std. Error
## (Intercept)                                                                0.205145
## cur_structure_condition_c                                                  0.333521
## match_condition_c                                                          0.382493
## block_c                                                                    0.281175
## block_trial_number_c                                                       0.007122
## cur_structure_condition_c:match_condition_c                                0.662088
## cur_structure_condition_c:block_c                                          0.665454
## match_condition_c:block_c                                                  0.549266
## cur_structure_condition_c:block_trial_number_c                             0.012553
## match_condition_c:block_trial_number_c                                     0.013718
## block_c:block_trial_number_c                                               0.011766
## cur_structure_condition_c:match_condition_c:block_c                        1.320727
## cur_structure_condition_c:match_condition_c:block_trial_number_c           0.024771
## cur_structure_condition_c:block_c:block_trial_number_c                     0.025003
## match_condition_c:block_c:block_trial_number_c                             0.022312
## cur_structure_condition_c:match_condition_c:block_c:block_trial_number_c   0.049330
##                                                                          z value
## (Intercept)                                                                4.021
## cur_structure_condition_c                                                 -3.217
## match_condition_c                                                          4.451
## block_c                                                                    1.164
## block_trial_number_c                                                      10.070
## cur_structure_condition_c:match_condition_c                               -1.328
## cur_structure_condition_c:block_c                                         -1.394
## match_condition_c:block_c                                                  2.380
## cur_structure_condition_c:block_trial_number_c                            -3.253
## match_condition_c:block_trial_number_c                                     2.477
## block_c:block_trial_number_c                                               1.739
## cur_structure_condition_c:match_condition_c:block_c                       -0.173
## cur_structure_condition_c:match_condition_c:block_trial_number_c          -1.974
## cur_structure_condition_c:block_c:block_trial_number_c                    -0.891
## match_condition_c:block_c:block_trial_number_c                             1.641
## cur_structure_condition_c:match_condition_c:block_c:block_trial_number_c  -1.013
##                                                                          Pr(>|z|)
## (Intercept)                                                              5.80e-05
## cur_structure_condition_c                                                 0.00130
## match_condition_c                                                        8.56e-06
## block_c                                                                   0.24432
## block_trial_number_c                                                      < 2e-16
## cur_structure_condition_c:match_condition_c                               0.18409
## cur_structure_condition_c:block_c                                         0.16325
## match_condition_c:block_c                                                 0.01733
## cur_structure_condition_c:block_trial_number_c                            0.00114
## match_condition_c:block_trial_number_c                                    0.01326
## block_c:block_trial_number_c                                              0.08211
## cur_structure_condition_c:match_condition_c:block_c                       0.86253
## cur_structure_condition_c:match_condition_c:block_trial_number_c          0.04842
## cur_structure_condition_c:block_c:block_trial_number_c                    0.37297
## match_condition_c:block_c:block_trial_number_c                            0.10085
## cur_structure_condition_c:match_condition_c:block_c:block_trial_number_c  0.31089
##                                                                             
## (Intercept)                                                              ***
## cur_structure_condition_c                                                ** 
## match_condition_c                                                        ***
## block_c                                                                     
## block_trial_number_c                                                     ***
## cur_structure_condition_c:match_condition_c                                 
## cur_structure_condition_c:block_c                                           
## match_condition_c:block_c                                                *  
## cur_structure_condition_c:block_trial_number_c                           ** 
## match_condition_c:block_trial_number_c                                   *  
## block_c:block_trial_number_c                                             .  
## cur_structure_condition_c:match_condition_c:block_c                         
## cur_structure_condition_c:match_condition_c:block_trial_number_c         *  
## cur_structure_condition_c:block_c:block_trial_number_c                      
## match_condition_c:block_c:block_trial_number_c                              
## cur_structure_condition_c:match_condition_c:block_c:block_trial_number_c    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation matrix not shown by default, as p = 16 > 12.
## Use print(x, correlation=TRUE)  or
##     vcov(x)        if you need it

Plot

#create predicted data
pX <- expand.grid(
  cur_structure_condition_c=c(-0.5,0.5),
  match_condition_c=c(-0.5,0.5),
  block_c=c(-0.5,0.5),
  block_trial_number_c=seq(-23.5,23.5,by=1))
predictions <- predictSE(m,pX,re.form=NA, type="response")
pX$fit <- predictions$fit
pX$se.fit <- predictions$se.fit
pX <- pX %>%
  mutate(
    block_trial_number = block_trial_number_c+24.5,
    cur_structure_condition = case_when(
      cur_structure_condition_c==0.5 ~ "emotion",
      cur_structure_condition_c==-0.5 ~ "model"
    ),
    match_condition=case_when(
      match_condition_c==0.5 ~ "match",
      match_condition_c==-0.5 ~ "mismatch"
    ),
    block_name = case_when(
      block_c==0.5 ~ "generalization block",
      block_c==-0.5~"learning block"
    )
  ) %>%
  mutate(
    block_name=factor(block_name,levels=c("learning block","generalization block"))
  )

d <- d %>%
  mutate(
    block_name = case_when(
      block==1 ~ "learning block",
      block==2 ~ "generalization block")
  ) %>%
  mutate(
    block_name=factor(block_name,levels=c("learning block","generalization block"))
  )


p <- ggplot(subset(d,!is.na(block_trial_number)),aes(block_trial_number,as.factor(max_reward_choice),color=cur_structure_condition))+
      geom_point(size = 0.5, alpha=0.2,shape=19,position  = position_jitterdodge(jitter.width = 0.05,jitter.height = 0.5,dodge.width = 0.2,seed = 1))+
      geom_violinh(data=subset(d,!is.na(block_trial_number)&cur_structure_condition_c==-0.5),aes(fill=cur_structure_condition),position = position_nudge(x = 0, y = .3 ),scale="count",width=0.4,alpha=0.3,color=NA)+
      geom_violinh(data=subset(d,!is.na(block_trial_number)&cur_structure_condition_c==0.5),aes(fill=cur_structure_condition),position = position_nudge(x = 0, y = -.3 ),scale="count",width=0.4,alpha=0.3,color=NA)+
  geom_hline(yintercept=0.25*4+1,linetype="dashed")+
      geom_smooth(data=pX,aes(y=fit*4+1,ymax=(fit+se.fit)*4+1,ymin=(fit-se.fit)*4+1,fill=cur_structure_condition),stat="identity")+
      theme_classic(base_size=18)+
      ylab("Probability of \nreward-maximizing choice")+
      scale_color_brewer(
        palette="Set1",
        name="Structure Condition",
        breaks=c(0.5,-0.5),
        labels=c("Emotion","Model"))+
      scale_fill_brewer(
        palette="Set1",
        name="Structure Condition",
        breaks=c(0.5,-0.5),
        labels=c("Emotion","Model"))+
      scale_y_discrete(limits=c("0","0.25","0.5","0.75","1"))+
      xlab("Block Trial Number")+
  facet_wrap(~match_condition+block_name)+
      theme(legend.position=c(0.4,0.4))
p

Generalization Condition Only

p <- ggplot(subset(d,!is.na(block_trial_number)&block==2),aes(block_trial_number,as.factor(max_reward_choice),color=cur_structure_condition))+
      geom_point(size = 0.5, alpha=0.1,shape=19,position  = position_jitterdodge(jitter.width = 0.05,jitter.height = 0.5,dodge.width = 0.2,seed = 1))+
      geom_violinh(data=subset(d,!is.na(block_trial_number)&cur_structure_condition_c==-0.5&block==2),aes(fill=cur_structure_condition),position = position_nudge(x = 0, y = .3 ),scale="count",width=0.4,alpha=0.2,color=NA)+
      geom_violinh(data=subset(d,!is.na(block_trial_number)&cur_structure_condition_c==0.5&block==2),aes(fill=cur_structure_condition),position = position_nudge(x = 0, y = -.3 ),scale="count",width=0.4,alpha=0.2,color=NA)+
  geom_hline(yintercept=0.25*4+1,linetype="dashed")+
      geom_smooth(data=filter(pX,block_name=="generalization block"),aes(y=fit*4+1,ymax=(fit+se.fit)*4+1,ymin=(fit-se.fit)*4+1,fill=cur_structure_condition),stat="identity")+
      theme_classic(base_size=18)+
      ylab("Probability of \nreward-maximizing choice")+
      scale_color_brewer(
        palette="Set1",
        name="Structure Condition",
        breaks=c("model","emotion"),
        labels=c("Model","Emotion"))+
      scale_fill_brewer(
        palette="Set1",
        name="Structure Condition",
        breaks=c("model","emotion"),
        labels=c("Model","Emotion"))+
      scale_y_discrete(limits=c("0","0.25","0.5","0.75","1"))+
      xlab("Block Trial Number")+
  facet_wrap(~match_condition)+
  theme(legend.position=c(0.39,0.45),legend.title=element_text(size=14),legend.text=element_text(size=12),legend.background=element_rect(fill =NA))
p

ggsave(here(figure_path,"model_prediction_generalization_only.pdf"),width=9,height=6)

Learning

Recenter the model on the learning block

m <- glmer(max_reward_choice ~ cur_structure_condition_c*match_condition_c*block_learn*block_trial_number_c+ (1+block_learn*block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial,glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=100000)))
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ cur_structure_condition_c * match_condition_c *  
##     block_learn * block_trial_number_c + (1 + block_learn * block_trial_number_c |  
##     subject) + (1 | choiceImage)
##    Data: d
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+05))
## 
##      AIC      BIC   logLik deviance df.resid 
##   8871.0   9064.6  -4408.5   8817.0     9573 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -88.212  -0.496   0.068   0.470   4.845 
## 
## Random effects:
##  Groups      Name                             Variance Std.Dev. Corr       
##  choiceImage (Intercept)                      1.185689 1.0889              
##  subject     (Intercept)                      4.131620 2.0326              
##              block_learn                      6.340697 2.5181   -0.47      
##              block_trial_number_c             0.003857 0.0621    0.79 -0.38
##              block_learn:block_trial_number_c 0.008227 0.0907   -0.24  0.81
##       
##       
##       
##       
##       
##  -0.41
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                                              Estimate
## (Intercept)                                                                   0.65917
## cur_structure_condition_c                                                    -0.60772
## match_condition_c                                                             1.04649
## block_learn                                                                   0.32279
## block_trial_number_c                                                          0.06132
## cur_structure_condition_c:match_condition_c                                  -0.76347
## cur_structure_condition_c:block_learn                                        -0.91953
## match_condition_c:block_learn                                                 1.29854
## cur_structure_condition_c:block_trial_number_c                               -0.02961
## match_condition_c:block_trial_number_c                                        0.01557
## block_learn:block_trial_number_c                                              0.02022
## cur_structure_condition_c:match_condition_c:block_learn                      -0.21635
## cur_structure_condition_c:match_condition_c:block_trial_number_c             -0.02380
## cur_structure_condition_c:block_learn:block_trial_number_c                   -0.02188
## match_condition_c:block_learn:block_trial_number_c                            0.03620
## cur_structure_condition_c:match_condition_c:block_learn:block_trial_number_c -0.04931
##                                                                              Std. Error
## (Intercept)                                                                     0.22282
## cur_structure_condition_c                                                       0.42160
## match_condition_c                                                               0.42198
## block_learn                                                                     0.27538
## block_trial_number_c                                                            0.00733
## cur_structure_condition_c:match_condition_c                                     0.84373
## cur_structure_condition_c:block_learn                                           0.65977
## match_condition_c:block_learn                                                   0.54177
## cur_structure_condition_c:block_trial_number_c                                  0.01431
## match_condition_c:block_trial_number_c                                          0.01435
## block_learn:block_trial_number_c                                                0.01134
## cur_structure_condition_c:match_condition_c:block_learn                         1.31371
## cur_structure_condition_c:match_condition_c:block_trial_number_c                0.02863
## cur_structure_condition_c:block_learn:block_trial_number_c                      0.02453
## match_condition_c:block_learn:block_trial_number_c                              0.02178
## cur_structure_condition_c:match_condition_c:block_learn:block_trial_number_c    0.04859
##                                                                              z value
## (Intercept)                                                                    2.958
## cur_structure_condition_c                                                     -1.441
## match_condition_c                                                              2.480
## block_learn                                                                    1.172
## block_trial_number_c                                                           8.366
## cur_structure_condition_c:match_condition_c                                   -0.905
## cur_structure_condition_c:block_learn                                         -1.394
## match_condition_c:block_learn                                                  2.397
## cur_structure_condition_c:block_trial_number_c                                -2.070
## match_condition_c:block_trial_number_c                                         1.085
## block_learn:block_trial_number_c                                               1.782
## cur_structure_condition_c:match_condition_c:block_learn                       -0.165
## cur_structure_condition_c:match_condition_c:block_trial_number_c              -0.831
## cur_structure_condition_c:block_learn:block_trial_number_c                    -0.892
## match_condition_c:block_learn:block_trial_number_c                             1.662
## cur_structure_condition_c:match_condition_c:block_learn:block_trial_number_c  -1.015
##                                                                              Pr(>|z|)
## (Intercept)                                                                   0.00309
## cur_structure_condition_c                                                     0.14946
## match_condition_c                                                             0.01314
## block_learn                                                                   0.24114
## block_trial_number_c                                                          < 2e-16
## cur_structure_condition_c:match_condition_c                                   0.36553
## cur_structure_condition_c:block_learn                                         0.16341
## match_condition_c:block_learn                                                 0.01654
## cur_structure_condition_c:block_trial_number_c                                0.03847
## match_condition_c:block_trial_number_c                                        0.27789
## block_learn:block_trial_number_c                                              0.07468
## cur_structure_condition_c:match_condition_c:block_learn                       0.86919
## cur_structure_condition_c:match_condition_c:block_trial_number_c              0.40583
## cur_structure_condition_c:block_learn:block_trial_number_c                    0.37249
## match_condition_c:block_learn:block_trial_number_c                            0.09650
## cur_structure_condition_c:match_condition_c:block_learn:block_trial_number_c  0.31015
##                                                                                 
## (Intercept)                                                                  ** 
## cur_structure_condition_c                                                       
## match_condition_c                                                            *  
## block_learn                                                                     
## block_trial_number_c                                                         ***
## cur_structure_condition_c:match_condition_c                                     
## cur_structure_condition_c:block_learn                                           
## match_condition_c:block_learn                                                *  
## cur_structure_condition_c:block_trial_number_c                               *  
## match_condition_c:block_trial_number_c                                          
## block_learn:block_trial_number_c                                             .  
## cur_structure_condition_c:match_condition_c:block_learn                         
## cur_structure_condition_c:match_condition_c:block_trial_number_c                
## cur_structure_condition_c:block_learn:block_trial_number_c                      
## match_condition_c:block_learn:block_trial_number_c                           .  
## cur_structure_condition_c:match_condition_c:block_learn:block_trial_number_c    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation matrix not shown by default, as p = 16 > 12.
## Use print(x, correlation=TRUE)  or
##     vcov(x)        if you need it

Generalization

Recenter the model on the generalization block

m <- glmer(max_reward_choice ~ cur_structure_condition_c*match_condition_c*block_gen*block_trial_number_c+ (1+block_gen*block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial,glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=100000)))
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ cur_structure_condition_c * match_condition_c *  
##     block_gen * block_trial_number_c + (1 + block_gen * block_trial_number_c |  
##     subject) + (1 | choiceImage)
##    Data: d
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+05))
## 
##      AIC      BIC   logLik deviance df.resid 
##   8871.0   9064.6  -4408.5   8817.0     9573 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -88.210  -0.496   0.068   0.470   4.845 
## 
## Random effects:
##  Groups      Name                           Variance Std.Dev. Corr          
##  choiceImage (Intercept)                    1.185684 1.08889                
##  subject     (Intercept)                    5.708779 2.38931                
##              block_gen                      6.340497 2.51803  0.66          
##              block_trial_number_c           0.007478 0.08648  0.88 0.58     
##              block_gen:block_trial_number_c 0.008227 0.09070  0.65 0.81 0.76
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                                            Estimate
## (Intercept)                                                                 0.98193
## cur_structure_condition_c                                                  -1.52733
## match_condition_c                                                           2.34499
## block_gen                                                                   0.32276
## block_trial_number_c                                                        0.08154
## cur_structure_condition_c:match_condition_c                                -0.97904
## cur_structure_condition_c:block_gen                                        -0.91974
## match_condition_c:block_gen                                                 1.29850
## cur_structure_condition_c:block_trial_number_c                             -0.05149
## match_condition_c:block_trial_number_c                                      0.05176
## block_gen:block_trial_number_c                                              0.02022
## cur_structure_condition_c:match_condition_c:block_gen                      -0.21509
## cur_structure_condition_c:match_condition_c:block_trial_number_c           -0.07308
## cur_structure_condition_c:block_gen:block_trial_number_c                   -0.02188
## match_condition_c:block_gen:block_trial_number_c                            0.03619
## cur_structure_condition_c:match_condition_c:block_gen:block_trial_number_c -0.04927
##                                                                            Std. Error
## (Intercept)                                                                   0.26562
## cur_structure_condition_c                                                     0.50692
## match_condition_c                                                             0.50595
## block_gen                                                                     0.27533
## block_trial_number_c                                                          0.01033
## cur_structure_condition_c:match_condition_c                                   1.00419
## cur_structure_condition_c:block_gen                                           0.65870
## match_condition_c:block_gen                                                   0.54151
## cur_structure_condition_c:block_trial_number_c                                0.01995
## match_condition_c:block_trial_number_c                                        0.01986
## block_gen:block_trial_number_c                                                0.01134
## cur_structure_condition_c:match_condition_c:block_gen                         1.30817
## cur_structure_condition_c:match_condition_c:block_trial_number_c              0.03925
## cur_structure_condition_c:block_gen:block_trial_number_c                      0.02451
## match_condition_c:block_gen:block_trial_number_c                              0.02177
## cur_structure_condition_c:match_condition_c:block_gen:block_trial_number_c    0.04846
##                                                                            z value
## (Intercept)                                                                  3.697
## cur_structure_condition_c                                                   -3.013
## match_condition_c                                                            4.635
## block_gen                                                                    1.172
## block_trial_number_c                                                         7.895
## cur_structure_condition_c:match_condition_c                                 -0.975
## cur_structure_condition_c:block_gen                                         -1.396
## match_condition_c:block_gen                                                  2.398
## cur_structure_condition_c:block_trial_number_c                              -2.581
## match_condition_c:block_trial_number_c                                       2.607
## block_gen:block_trial_number_c                                               1.783
## cur_structure_condition_c:match_condition_c:block_gen                       -0.164
## cur_structure_condition_c:match_condition_c:block_trial_number_c            -1.862
## cur_structure_condition_c:block_gen:block_trial_number_c                    -0.893
## match_condition_c:block_gen:block_trial_number_c                             1.662
## cur_structure_condition_c:match_condition_c:block_gen:block_trial_number_c  -1.017
##                                                                            Pr(>|z|)
## (Intercept)                                                                0.000218
## cur_structure_condition_c                                                  0.002587
## match_condition_c                                                          3.57e-06
## block_gen                                                                  0.241086
## block_trial_number_c                                                       2.89e-15
## cur_structure_condition_c:match_condition_c                                0.329585
## cur_structure_condition_c:block_gen                                        0.162625
## match_condition_c:block_gen                                                0.016488
## cur_structure_condition_c:block_trial_number_c                             0.009839
## match_condition_c:block_trial_number_c                                     0.009141
## block_gen:block_trial_number_c                                             0.074658
## cur_structure_condition_c:match_condition_c:block_gen                      0.869400
## cur_structure_condition_c:match_condition_c:block_trial_number_c           0.062580
## cur_structure_condition_c:block_gen:block_trial_number_c                   0.371892
## match_condition_c:block_gen:block_trial_number_c                           0.096422
## cur_structure_condition_c:match_condition_c:block_gen:block_trial_number_c 0.309252
##                                                                               
## (Intercept)                                                                ***
## cur_structure_condition_c                                                  ** 
## match_condition_c                                                          ***
## block_gen                                                                     
## block_trial_number_c                                                       ***
## cur_structure_condition_c:match_condition_c                                   
## cur_structure_condition_c:block_gen                                           
## match_condition_c:block_gen                                                *  
## cur_structure_condition_c:block_trial_number_c                             ** 
## match_condition_c:block_trial_number_c                                     ** 
## block_gen:block_trial_number_c                                             .  
## cur_structure_condition_c:match_condition_c:block_gen                         
## cur_structure_condition_c:match_condition_c:block_trial_number_c           .  
## cur_structure_condition_c:block_gen:block_trial_number_c                      
## match_condition_c:block_gen:block_trial_number_c                           .  
## cur_structure_condition_c:match_condition_c:block_gen:block_trial_number_c    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation matrix not shown by default, as p = 16 > 12.
## Use print(x, correlation=TRUE)  or
##     vcov(x)        if you need it

Various Exploratory Follow-up models

Lower Order Models

trying to sort out how to look at individual conditions and blocks

m <- glmer(max_reward_choice ~ cur_structure_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00326546 (tol = 0.002, component 1)
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: 
## max_reward_choice ~ cur_structure_condition_c * block_trial_number_c +  
##     (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: d
## 
##      AIC      BIC   logLik deviance df.resid 
##   9727.9   9785.3  -4856.0   9711.9     9592 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -61.540  -0.584   0.129   0.578   4.434 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          1.070949 1.03487      
##  subject     (Intercept)          2.822172 1.67993      
##              block_trial_number_c 0.002424 0.04923  0.82
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                 Estimate Std. Error z value
## (Intercept)                                     0.540477   0.184289   2.933
## cur_structure_condition_c                      -0.487870   0.074955  -6.509
## block_trial_number_c                            0.051945   0.005535   9.385
## cur_structure_condition_c:block_trial_number_c -0.014268   0.004723  -3.021
##                                                Pr(>|z|)    
## (Intercept)                                     0.00336 ** 
## cur_structure_condition_c                      7.58e-11 ***
## block_trial_number_c                            < 2e-16 ***
## cur_structure_condition_c:block_trial_number_c  0.00252 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) cr_s__ blc___
## cr_strctr__ -0.001              
## blck_trl_n_  0.714 -0.009       
## cr_st__:___ -0.006  0.147 -0.009
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.00326546 (tol = 0.002, component 1)
m <- glmer(max_reward_choice ~ match_condition_c*block_trial_number_c*block_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.0591377 (tol = 0.002, component 1)
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ match_condition_c * block_trial_number_c *  
##     block_c + (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: d
## 
##      AIC      BIC   logLik deviance df.resid 
##   9704.6   9790.6  -4840.3   9680.6     9588 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -64.509  -0.584   0.130   0.579   4.570 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          1.075042 1.03684      
##  subject     (Intercept)          2.409021 1.55210      
##              block_trial_number_c 0.002417 0.04916  0.82
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                 Estimate Std. Error z value
## (Intercept)                                     0.543771   0.172797   3.147
## match_condition_c                               1.443057   0.319467   4.517
## block_trial_number_c                            0.051998   0.005534   9.395
## block_c                                        -0.092464   0.058178  -1.589
## match_condition_c:block_trial_number_c          0.025082   0.010945   2.292
## match_condition_c:block_c                       0.838523   0.118100   7.100
## block_trial_number_c:block_c                   -0.001361   0.003934  -0.346
## match_condition_c:block_trial_number_c:block_c  0.005426   0.007861   0.690
##                                                Pr(>|z|)    
## (Intercept)                                     0.00165 ** 
## match_condition_c                              6.27e-06 ***
## block_trial_number_c                            < 2e-16 ***
## block_c                                         0.11199    
## match_condition_c:block_trial_number_c          0.02193 *  
## match_condition_c:block_c                      1.25e-12 ***
## block_trial_number_c:block_c                    0.72940    
## match_condition_c:block_trial_number_c:block_c  0.49009    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) mtch__ blc___ blck_c mt__:___ mt__:_ b___:_
## mtch_cndtn_  0.023                                            
## blck_trl_n_  0.706  0.040                                     
## block_c      0.001  0.002  0.000                              
## mtch_c_:___  0.037  0.763  0.068  0.007                       
## mtch_cnd_:_  0.005  0.011  0.013  0.127  0.003                
## blck_tr__:_ -0.001  0.003  0.006  0.159  0.009    0.106       
## mtc__:___:_  0.004  0.001  0.008  0.107  0.007    0.166  0.111
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.0591377 (tol = 0.002, component 1)
m <- glmer(max_reward_choice ~ match_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=filter(d,block==2), family=binomial)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00482086 (tol = 0.002, component 1)
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ match_condition_c * block_trial_number_c +  
##     (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: filter(d, block == 2)
## 
##      AIC      BIC   logLik deviance df.resid 
##   3918.6   3970.4  -1951.3   3902.6     4792 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -47.118  -0.368   0.022   0.348   7.633 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          4.650239 2.15644      
##  subject     (Intercept)          8.345391 2.88884      
##              block_trial_number_c 0.009313 0.09651  0.86
## Number of obs: 4800, groups:  choiceImage, 255; subject, 100
## 
## Fixed effects:
##                                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                             0.76174    0.33594   2.268   0.0234 *  
## match_condition_c                       2.36000    0.60452   3.904 9.47e-05 ***
## block_trial_number_c                    0.08098    0.01137   7.125 1.04e-12 ***
## match_condition_c:block_trial_number_c  0.04376    0.02172   2.015   0.0439 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) mtch__ blc___
## mtch_cndtn_ 0.042               
## blck_trl_n_ 0.743  0.068        
## mtch_c_:___ 0.057  0.816  0.093 
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.00482086 (tol = 0.002, component 1)
m <- glmer(max_reward_choice ~ match_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=filter(d,block==1), family=binomial)
summary(m)#not really sure why there should be a match effect here... Noise?
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ match_condition_c * block_trial_number_c +  
##     (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: filter(d, block == 1)
## 
##      AIC      BIC   logLik deviance df.resid 
##   4321.7   4373.5  -2152.8   4305.7     4792 
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -11.1178  -0.3982   0.1015   0.4471   6.8175 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          3.607795 1.89942      
##  subject     (Intercept)          4.671596 2.16139      
##              block_trial_number_c 0.004254 0.06522  0.78
## Number of obs: 4800, groups:  choiceImage, 251; subject, 100
## 
## Fixed effects:
##                                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                            0.458122   0.257661   1.778   0.0754 .  
## match_condition_c                      1.034323   0.449788   2.300   0.0215 *  
## block_trial_number_c                   0.063418   0.007741   8.192 2.57e-16 ***
## match_condition_c:block_trial_number_c 0.011691   0.015113   0.774   0.4392    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) mtch__ blc___
## mtch_cndtn_ 0.018               
## blck_trl_n_ 0.616  0.036        
## mtch_c_:___ 0.029  0.707  0.050

SRCD 2023 Abstract Exploration

## learning block
# m <- glmer(max_reward_choice ~ structure_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=filter(d,block==1), family=binomial)
# summary(m)
# 
# # re-run so I don't have to re-label things
# m <- glmer(max_reward_choice ~ structure_condition*block_trial_number+ (1+block_trial_number|subject)+(1|choiceImage),data=filter(d,block==1), family=binomial)
# summary(m)
# 
# sjPlot::plot_model(m, type = "pred", terms = c("block_trial_number", "structure_condition"),
#            show.data = T, 
#            jitter = .01, 
#            title = "",
#            axis.title = c("Trial", "Reward Maximizing Choices"),
#            legend.title = "Structure Condition",
#            colors = c( "orange3", "green4"),
#            auto.label = FALSE)+
#         theme_classic(base_size = 14, base_family = "")

# overall (same model as in section above)
m <- glmer(max_reward_choice ~ cur_structure_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=d, family=binomial)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00326546 (tol = 0.002, component 1)
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: 
## max_reward_choice ~ cur_structure_condition_c * block_trial_number_c +  
##     (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: d
## 
##      AIC      BIC   logLik deviance df.resid 
##   9727.9   9785.3  -4856.0   9711.9     9592 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -61.540  -0.584   0.129   0.578   4.434 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          1.070949 1.03487      
##  subject     (Intercept)          2.822172 1.67993      
##              block_trial_number_c 0.002424 0.04923  0.82
## Number of obs: 9600, groups:  choiceImage, 256; subject, 100
## 
## Fixed effects:
##                                                 Estimate Std. Error z value
## (Intercept)                                     0.540477   0.184289   2.933
## cur_structure_condition_c                      -0.487870   0.074955  -6.509
## block_trial_number_c                            0.051945   0.005535   9.385
## cur_structure_condition_c:block_trial_number_c -0.014268   0.004723  -3.021
##                                                Pr(>|z|)    
## (Intercept)                                     0.00336 ** 
## cur_structure_condition_c                      7.58e-11 ***
## block_trial_number_c                            < 2e-16 ***
## cur_structure_condition_c:block_trial_number_c  0.00252 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) cr_s__ blc___
## cr_strctr__ -0.001              
## blck_trl_n_  0.714 -0.009       
## cr_st__:___ -0.006  0.147 -0.009
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.00326546 (tol = 0.002, component 1)
m <- glmer(max_reward_choice ~ cur_structure_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=filter(d,block==2), family=binomial)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
## Model failed to converge with max|grad| = 0.00644451 (tol = 0.002, component 1)
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: 
## max_reward_choice ~ cur_structure_condition_c * block_trial_number_c +  
##     (1 + block_trial_number_c | subject) + (1 | choiceImage)
##    Data: filter(d, block == 2)
## 
##      AIC      BIC   logLik deviance df.resid 
##   3930.6   3982.4  -1957.3   3914.6     4792 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -43.586  -0.366   0.022   0.345   7.375 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          4.713247 2.17100      
##  subject     (Intercept)          9.526255 3.08646      
##              block_trial_number_c 0.009708 0.09853  0.86
## Number of obs: 4800, groups:  choiceImage, 255; subject, 100
## 
## Fixed effects:
##                                                Estimate Std. Error z value
## (Intercept)                                     0.78142    0.35435   2.205
## cur_structure_condition_c                      -1.47777    0.64598  -2.288
## block_trial_number_c                            0.08256    0.01163   7.099
## cur_structure_condition_c:block_trial_number_c -0.04878    0.02247  -2.171
##                                                Pr(>|z|)    
## (Intercept)                                      0.0274 *  
## cur_structure_condition_c                        0.0222 *  
## block_trial_number_c                           1.26e-12 ***
## cur_structure_condition_c:block_trial_number_c   0.0299 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) cr_s__ blc___
## cr_strctr__ -0.050              
## blck_trl_n_  0.746 -0.088       
## cr_st__:___ -0.075  0.815 -0.138
## optimizer (Nelder_Mead) convergence code: 0 (OK)
## Model failed to converge with max|grad| = 0.00644451 (tol = 0.002, component 1)
# generalization block 
m <- glmer(max_reward_choice ~ cur_structure_condition_c*match_condition_c*block_trial_number_c+ (1+block_trial_number_c|subject)+(1|choiceImage),data=filter(d,block==2), family=binomial,glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=20000)))
summary(m)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: max_reward_choice ~ cur_structure_condition_c * match_condition_c *  
##     block_trial_number_c + (1 + block_trial_number_c | subject) +  
##     (1 | choiceImage)
##    Data: filter(d, block == 2)
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 20000))
## 
##      AIC      BIC   logLik deviance df.resid 
##   3917.1   3994.8  -1946.6   3893.1     4788 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -41.738  -0.369   0.021   0.346   7.838 
## 
## Random effects:
##  Groups      Name                 Variance Std.Dev. Corr
##  choiceImage (Intercept)          4.6157   2.14842      
##  subject     (Intercept)          7.9295   2.81594      
##              block_trial_number_c 0.0089   0.09434  0.86
## Number of obs: 4800, groups:  choiceImage, 255; subject, 100
## 
## Fixed effects:
##                                                                  Estimate
## (Intercept)                                                       0.80352
## cur_structure_condition_c                                        -1.54997
## match_condition_c                                                 2.45284
## block_trial_number_c                                              0.08329
## cur_structure_condition_c:match_condition_c                      -0.89907
## cur_structure_condition_c:block_trial_number_c                   -0.05159
## match_condition_c:block_trial_number_c                            0.04894
## cur_structure_condition_c:match_condition_c:block_trial_number_c -0.06630
##                                                                  Std. Error
## (Intercept)                                                         0.33109
## cur_structure_condition_c                                           0.59623
## match_condition_c                                                   0.59385
## block_trial_number_c                                                0.01132
## cur_structure_condition_c:match_condition_c                         1.17985
## cur_structure_condition_c:block_trial_number_c                      0.02185
## match_condition_c:block_trial_number_c                              0.02158
## cur_structure_condition_c:match_condition_c:block_trial_number_c    0.04283
##                                                                  z value
## (Intercept)                                                        2.427
## cur_structure_condition_c                                         -2.600
## match_condition_c                                                  4.130
## block_trial_number_c                                               7.355
## cur_structure_condition_c:match_condition_c                       -0.762
## cur_structure_condition_c:block_trial_number_c                    -2.360
## match_condition_c:block_trial_number_c                             2.268
## cur_structure_condition_c:match_condition_c:block_trial_number_c  -1.548
##                                                                  Pr(>|z|)    
## (Intercept)                                                       0.01523 *  
## cur_structure_condition_c                                         0.00933 ** 
## match_condition_c                                                3.62e-05 ***
## block_trial_number_c                                             1.91e-13 ***
## cur_structure_condition_c:match_condition_c                       0.44605    
## cur_structure_condition_c:block_trial_number_c                    0.01825 *  
## match_condition_c:block_trial_number_c                            0.02336 *  
## cur_structure_condition_c:match_condition_c:block_trial_number_c  0.12166    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) cr_s__ mtch__ blc___ cr___:__ c___:___ m__:__
## cr_strctr__ -0.063                                              
## mtch_cndtn_  0.053 -0.043                                       
## blck_trl_n_  0.741 -0.107  0.086                                
## cr_str__:__ -0.035  0.051 -0.049 -0.055                         
## cr_st__:___ -0.091  0.818 -0.058 -0.156  0.067                  
## mtch_c_:___  0.072 -0.055  0.815  0.117 -0.069   -0.084         
## c___:__:___ -0.049  0.068 -0.070 -0.084  0.814    0.099   -0.102
sjPlot::plot_model(m, type = "pred", terms = c("block_trial_number_c", "match_condition_c","cur_structure_condition_c"),
                   jitter = .01,
                   title = "Structure Condition",
                   axis.title = c("Trial", "Reward Maximizing Choices"),
                   legend.title = "Match Condition",
                   colors = c( "firebrick", "darkblue")) +
                  theme_classic(base_size = 14, base_family = "")
## Data were 'prettified'. Consider using `terms="block_trial_number_c [all]"` to get smooth plots.