1 Set up R environment.

library(tidyverse)
library(ggplot2)
library(ggpubr)
library(plyr)
library(magick)
library(png)
library(lme4)
library(lmerTest)
library(irrNA)
library(psy)
library(coefficientalpha)

2 Set the R working drectory to the main experiment directory.

setwd("/Users/adambarnas/Box/MetaAwareness/data/")  

3 Read in data files.

4 Compute average likelihood rating.

tbl_all_subj_avg <- tbl_all %>%
  group_by(workerId,image) %>%
  dplyr::summarize(average = mean(likelihood_rating)) %>%
  spread(image,average) %>% 
  mutate(subj_avg = rowMeans(.[-1], na.rm = TRUE))
mean(tbl_all_subj_avg$subj_avg)
## [1] 3.102149

5 Mixed effects model and correlation.

5.1 Raw RT

fit_raw1 <- lmer(detection_rt ~ likelihood_rating * change_type + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all)
summary(fit_raw1)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: detection_rt ~ likelihood_rating * change_type + (1 | workerId) +  
##     (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: 25961.9
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.5965 -0.4283 -0.1249  0.1458  8.8315 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.4857  1.2189  
##  workerId (Intercept)  8.1531  2.8554  
##  stim_set (Intercept)  0.1343  0.3665  
##  Residual             20.9854  4.5810  
## Number of obs: 4305, groups:  image, 480; workerId, 188; stim_set, 4
## 
## Fixed effects:
##                                           Estimate Std. Error        df t value
## (Intercept)                                12.1880     0.5900   10.9872  20.656
## likelihood_rating                          -0.5421     0.1368 2874.6672  -3.962
## change_typedisappear                       -1.3041     0.5918  843.4201  -2.204
## change_typemovement                        -2.7111     0.8450 1409.1071  -3.208
## change_typereplacement                     -3.4837     2.2188 2530.8259  -1.570
## change_typesize                            -3.0626     1.1418 1239.0035  -2.682
## likelihood_rating:change_typedisappear      0.1151     0.1554 2844.3487   0.741
## likelihood_rating:change_typemovement       0.3911     0.2586 4041.5107   1.513
## likelihood_rating:change_typereplacement    0.7147     0.6374 3976.6076   1.121
## likelihood_rating:change_typesize           0.3401     0.3462 2975.2569   0.982
##                                          Pr(>|t|)    
## (Intercept)                              3.85e-10 ***
## likelihood_rating                        7.63e-05 ***
## change_typedisappear                      0.02782 *  
## change_typemovement                       0.00137 ** 
## change_typereplacement                    0.11653    
## change_typesize                           0.00741 ** 
## likelihood_rating:change_typedisappear    0.45875    
## likelihood_rating:change_typemovement     0.13044    
## likelihood_rating:change_typereplacement  0.26228    
## likelihood_rating:change_typesize         0.32601    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##                      (Intr) lklhd_ chng_typd chng_typm chng_typr chng_typs
## liklhd_rtng          -0.780                                               
## chng_typdsp          -0.747  0.743                                        
## chng_typmvm          -0.531  0.556  0.504                                 
## chng_typrpl          -0.209  0.215  0.197     0.176                       
## chang_typsz          -0.396  0.407  0.372     0.345     0.144             
## lklhd_rtng:chng_typd  0.666 -0.846 -0.874    -0.475    -0.184    -0.348   
## lklhd_rtng:chng_typm  0.391 -0.505 -0.384    -0.841    -0.119    -0.241   
## lklhd_rtng:chng_typr  0.170 -0.216 -0.164    -0.130    -0.878    -0.100   
## lklhd_rtng:chng_typs  0.299 -0.381 -0.289    -0.243    -0.091    -0.841   
##                      lklhd_rtng:chng_typd lklhd_rtng:chng_typm
## liklhd_rtng                                                   
## chng_typdsp                                                   
## chng_typmvm                                                   
## chng_typrpl                                                   
## chang_typsz                                                   
## lklhd_rtng:chng_typd                                          
## lklhd_rtng:chng_typm  0.440                                   
## lklhd_rtng:chng_typr  0.185                0.120              
## lklhd_rtng:chng_typs  0.327                0.229              
##                      lklhd_rtng:chng_typr
## liklhd_rtng                              
## chng_typdsp                              
## chng_typmvm                              
## chng_typrpl                              
## chang_typsz                              
## lklhd_rtng:chng_typd                     
## lklhd_rtng:chng_typm                     
## lklhd_rtng:chng_typr                     
## lklhd_rtng:chng_typs  0.095
fit_raw2 <- lmer(detection_rt ~ likelihood_rating + change_type + box_percent + change_percent + eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all)
summary(fit_raw2)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: detection_rt ~ likelihood_rating + change_type + box_percent +  
##     change_percent + eccentricity + (1 | workerId) + (1 | image) +  
##     (1 | stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: 25976.7
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.5690 -0.4305 -0.1278  0.1476  8.8366 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  image    (Intercept) 1.515e+00 1.231e+00
##  workerId (Intercept) 8.165e+00 2.857e+00
##  stim_set (Intercept) 3.895e-09 6.241e-05
##  Residual             2.095e+01 4.578e+00
## Number of obs: 4305, groups:  image, 480; workerId, 188; stim_set, 4
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)             1.155e+01  4.378e-01  7.111e+02  26.395  < 2e-16 ***
## likelihood_rating      -4.054e-01  6.879e-02  2.500e+03  -5.893  4.3e-09 ***
## change_typedisappear   -9.788e-01  2.841e-01  4.091e+02  -3.445  0.00063 ***
## change_typemovement    -1.377e+00  4.684e-01  4.449e+02  -2.940  0.00345 ** 
## change_typereplacement -1.112e+00  1.068e+00  4.400e+02  -1.041  0.29826    
## change_typesize        -1.958e+00  6.172e-01  4.210e+02  -3.173  0.00162 ** 
## box_percent            -1.154e-02  6.949e-02  3.946e+02  -0.166  0.86818    
## change_percent         -6.242e-02  1.044e-01  3.937e+02  -0.598  0.55039    
## eccentricity            2.087e-03  1.099e-03  3.792e+02   1.900  0.05818 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) lklhd_ chng_typd chng_typm chng_typr chng_typs bx_prc chng_p
## liklhd_rtng -0.497                                                             
## chng_typdsp -0.477  0.006                                                      
## chng_typmvm -0.310  0.195  0.305                                               
## chng_typrpl -0.156  0.029  0.145     0.187                                     
## chang_typsz -0.210  0.104  0.243     0.355     0.183                           
## box_percent -0.088 -0.011  0.092     0.050     0.032     0.071                 
## chang_prcnt  0.039 -0.032 -0.038    -0.188    -0.041    -0.132    -0.894       
## eccentricty -0.468  0.010 -0.038     0.072     0.084     0.004     0.064 -0.084
## convergence code: 0
## boundary (singular) fit: see ?isSingular
corr <- tbl_all %>% 
  group_by(image) %>% 
  dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating), change_type = unique(change_type))

corr %>%
  ggscatter(y = "detection_rt", x = "likelihood_rating", ylab = "Raw Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 35), conf.int = TRUE, xlim = c(1, 5), ylim = c(5, 40))

corr %>%
  ggscatter(y = "detection_rt", x = "likelihood_rating", color = "change_type", palette = c("#0d2240", "#00a8e1", "#f7a800", "#E31818", "#dfdddc"), ylab = "Raw Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(5, 40)) + stat_cor(aes(color = change_type), label.x = c(1, 1, 2.5, 2.5, 4), label.y = c(37.5, 35, 37.5, 35, 37.5), method = "pearson")

5.2 Log RT

fit_log1 <- lmer(log10(detection_rt) ~ likelihood_rating * change_type + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all)
summary(fit_log1)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: log10(detection_rt) ~ likelihood_rating * change_type + (1 |  
##     workerId) + (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: -4668.1
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7767 -0.5563 -0.1306  0.3372  5.2042 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 0.0015940 0.03992 
##  workerId (Intercept) 0.0119031 0.10910 
##  stim_set (Intercept) 0.0003578 0.01892 
##  Residual             0.0161143 0.12694 
## Number of obs: 4305, groups:  image, 480; workerId, 188; stim_set, 4
## 
## Fixed effects:
##                                            Estimate Std. Error         df
## (Intercept)                               1.014e+00  1.969e-02  6.828e+00
## likelihood_rating                        -1.673e-02  3.892e-03  3.251e+03
## change_typedisappear                     -3.645e-02  1.712e-02  1.455e+03
## change_typemovement                      -7.353e-02  2.431e-02  1.839e+03
## change_typereplacement                   -9.898e-02  6.313e-02  2.494e+03
## change_typesize                          -8.479e-02  3.297e-02  1.461e+03
## likelihood_rating:change_typedisappear    4.569e-03  4.417e-03  3.141e+03
## likelihood_rating:change_typemovement     1.119e-02  7.292e-03  4.109e+03
## likelihood_rating:change_typereplacement  2.339e-02  1.789e-02  4.043e+03
## likelihood_rating:change_typesize         8.801e-03  9.811e-03  3.249e+03
##                                          t value Pr(>|t|)    
## (Intercept)                               51.479 4.24e-10 ***
## likelihood_rating                         -4.299 1.77e-05 ***
## change_typedisappear                      -2.129  0.03340 *  
## change_typemovement                       -3.024  0.00253 ** 
## change_typereplacement                    -1.568  0.11702    
## change_typesize                           -2.571  0.01023 *  
## likelihood_rating:change_typedisappear     1.034  0.30108    
## likelihood_rating:change_typemovement      1.535  0.12487    
## likelihood_rating:change_typereplacement   1.308  0.19109    
## likelihood_rating:change_typesize          0.897  0.36974    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##                      (Intr) lklhd_ chng_typd chng_typm chng_typr chng_typs
## liklhd_rtng          -0.667                                               
## chng_typdsp          -0.639  0.727                                        
## chng_typmvm          -0.462  0.551  0.498                                 
## chng_typrpl          -0.185  0.216  0.197     0.182                       
## chang_typsz          -0.343  0.402  0.366     0.352     0.150             
## lklhd_rtng:chng_typd  0.567 -0.843 -0.860    -0.469    -0.185    -0.343   
## lklhd_rtng:chng_typm  0.335 -0.506 -0.379    -0.826    -0.121    -0.240   
## lklhd_rtng:chng_typr  0.147 -0.219 -0.164    -0.131    -0.865    -0.101   
## lklhd_rtng:chng_typs  0.256 -0.380 -0.284    -0.242    -0.093    -0.826   
##                      lklhd_rtng:chng_typd lklhd_rtng:chng_typm
## liklhd_rtng                                                   
## chng_typdsp                                                   
## chng_typmvm                                                   
## chng_typrpl                                                   
## chang_typsz                                                   
## lklhd_rtng:chng_typd                                          
## lklhd_rtng:chng_typm  0.441                                   
## lklhd_rtng:chng_typr  0.188                0.123              
## lklhd_rtng:chng_typs  0.327                0.232              
##                      lklhd_rtng:chng_typr
## liklhd_rtng                              
## chng_typdsp                              
## chng_typmvm                              
## chng_typrpl                              
## chang_typsz                              
## lklhd_rtng:chng_typd                     
## lklhd_rtng:chng_typm                     
## lklhd_rtng:chng_typr                     
## lklhd_rtng:chng_typs  0.098
fit_log2 <- lmer(log10(detection_rt) ~ likelihood_rating + change_type + box_percent + change_percent + eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all)
summary(fit_log2)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: log10(detection_rt) ~ likelihood_rating + change_type + box_percent +  
##     change_percent + eccentricity + (1 | workerId) + (1 | image) +  
##     (1 | stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: -4669.5
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7366 -0.5542 -0.1304  0.3434  5.2512 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 0.0015548 0.03943 
##  workerId (Intercept) 0.0119264 0.10921 
##  stim_set (Intercept) 0.0001138 0.01067 
##  Residual             0.0160895 0.12684 
## Number of obs: 4305, groups:  image, 480; workerId, 188; stim_set, 4
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)             9.841e-01  1.509e-02  3.378e+00  65.210 2.34e-06 ***
## likelihood_rating      -1.201e-02  1.968e-03  2.682e+03  -6.104 1.18e-09 ***
## change_typedisappear   -2.332e-02  8.673e-03  1.682e+02  -2.688 0.007901 ** 
## change_typemovement    -3.160e-02  1.397e-02  3.749e+02  -2.262 0.024258 *  
## change_typereplacement -1.659e-02  3.157e-02  4.209e+02  -0.525 0.599519    
## change_typesize        -5.347e-02  1.848e-02  3.433e+02  -2.893 0.004064 ** 
## box_percent             1.967e-04  2.051e-03  3.912e+02   0.096 0.923642    
## change_percent         -2.979e-03  3.089e-03  3.890e+02  -0.965 0.335373    
## eccentricity            1.137e-04  3.243e-05  3.846e+02   3.505 0.000511 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) lklhd_ chng_typd chng_typm chng_typr chng_typs bx_prc chng_p
## liklhd_rtng -0.416                                                             
## chng_typdsp -0.397  0.001                                                      
## chng_typmvm -0.269  0.190  0.297                                               
## chng_typrpl -0.139  0.031  0.140     0.199                                     
## chang_typsz -0.183  0.102  0.232     0.369     0.195                           
## box_percent -0.078 -0.011  0.092     0.049     0.031     0.068                 
## chang_prcnt  0.027 -0.028 -0.041    -0.186    -0.042    -0.133    -0.889       
## eccentricty -0.400  0.010 -0.038     0.071     0.084     0.003     0.065 -0.085
corr <- tbl_all %>% 
  group_by(image) %>% 
  dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating), change_type = unique(change_type))

corr$log <- log10(corr$detection_rt)

corr %>%
  ggscatter(y = "log", x = "likelihood_rating", ylab = "LogChange Detection RT (sec)", xlab = "Likelihood of Detecting Change", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 1.75), conf.int = TRUE, xlim = c(1, 5), ylim = c(0.75, 1.75))

corr %>%
  ggscatter(y = "log", x = "likelihood_rating", color = "change_type", palette = c("#0d2240", "#00a8e1", "#f7a800", "#E31818", "#dfdddc"), ylab = "Log Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(0.75, 1.75)) + stat_cor(aes(color = change_type), label.x = c(1, 1, 2.5, 2.5, 4), label.y = c(1.7, 1.6, 1.7, 1.6, 1.7), method = "pearson")