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)
library(parameters)

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

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

3 Read in data files.

Rensink_RTs_likelihood_no_NA <- read_csv("Rensink_RTs_likelihood_no_NA.csv")
Ma_RTs_likelihood_no_NA <- read_csv("Ma_RTs_likelihood_no_NA.csv")
Wolfe1_RTs_likelihood_no_NA <- read_csv("Wolfe1_RTs_likelihood_no_NA.csv")
Wolfe2_RTs_likelihood_no_NA <- read_csv("Wolfe2_RTs_likelihood_no_NA.csv")

tbl_all <- rbind(Rensink_RTs_likelihood_no_NA, Ma_RTs_likelihood_no_NA, Wolfe1_RTs_likelihood_no_NA, Wolfe2_RTs_likelihood_no_NA)

Box_and_change_info <- read_csv("Box_and_change_info.csv")
Box_and_change_info <- Box_and_change_info %>% 
  filter(!grepl('catch', image)) %>% 
  separate(image,into=c('database', 'image'), sep = "([\\_])", extra = "merge")
Box_and_change_info$image <- lapply(Box_and_change_info$image, gsub, pattern='-a', replacement='')
Box_and_change_info$image <- as.character(Box_and_change_info$image)
tbl_all <- left_join(tbl_all, Box_and_change_info, by = "image")

Get total number of subjects and counts for each stimulus set

nrow(tbl_all %>% distinct(workerId,.keep_all = FALSE))
## [1] 219
count <- tbl_all %>%
  group_by(stim_set) %>%
  dplyr::summarize(count = n_distinct(workerId)) %>%
  spread(stim_set,count)
count
## # A tibble: 1 x 4
##      ma rensink wolfe1 wolfe2
##   <int>   <int>  <int>  <int>
## 1    29      21     62    110

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.12851

5 Results.

5.1 Some plots.

tbl_all$log <- log10(tbl_all$detection_rt)

corr <- tbl_all %>% 
  group_by(image) %>% 
  dplyr::summarize(log = mean(log), raw = mean(detection_rt), likelihood_rating = mean(likelihood_rating), change_type = unique(change_type), eccentricity = mean(eccentricity), box_percent = mean(box_percent), change_percent = mean(change_percent))

corr %>% 
  gghistogram(x = "likelihood_rating", fill = "#f7a800", add = "mean", bins = 9, xlab = ("Likelihood of Detecting Change"), ylab = ("Frequency"), ylim = c(0, 100))

ggsave("fig_1_rating_histogram.jpg")

corr %>% 
  gghistogram(x = "log", fill = "#f7a800", add = "mean", bins = 36, ylim = c(0,60), xlim = c(0.7,1.5), xlab = ("Log Change Detection RT (sec)"), ylab = ("Frequency"))

ggsave("fig_2_log_histogram.jpg")

corr %>% 
  gghistogram(x = "raw", fill = "#f7a800", add = "mean", bins = 36, ylim = c(0,80), xlim = c(0,30), xlab = ("Raw Change Detection RT (sec)"), ylab = ("Frequency"))

ggsave("fig_3_raw_histogram.jpg")

corr %>% 
  ggboxplot(x = "change_type", y = "log", label = "image", font.label = c(5, "plain", "black"), ylab = ("Log Change Detection RT (sec)"), xlab = "Change Type", ylim = c(0.75,1.4))

ggsave("fig_4_log_changetype.jpg")

corr %>% 
  ggboxplot(x = "change_type", y = "raw", label = "image", font.label = c(5, "plain", "black"), ylab = ("Raw Change Detection RT (sec)"), xlab = "Change Type", ylim = c(5,30))

ggsave("fig_5_raw_changetype.jpg")

5.2 Mixed effects modeling.

5.2.1 Likelihood rating predicting change blindness duration.

fit_log1 = Does likelihood rating predict log change blindness duration? A: Yes. fit_raw1 = Does likelihood rating predict raw change blindness duration? A: Yes.

fit_log1 <- lmer(log ~ likelihood_rating + (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: log ~ likelihood_rating + (1 | workerId) + (1 | image) + (1 |  
##     stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: -5814.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.8487 -0.5531 -0.1383  0.3340  5.2174 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 0.0017054 0.04130 
##  workerId (Intercept) 0.0117514 0.10840 
##  stim_set (Intercept) 0.0003399 0.01844 
##  Residual             0.0158299 0.12582 
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        9.710e-01  1.384e-02  2.665e+00  70.183 1.98e-05 ***
## likelihood_rating -9.841e-03  1.807e-03  2.683e+03  -5.445 5.64e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## liklhd_rtng -0.405
ci(fit_log1)
##           Parameter CI     CI_low      CI_high
## 1       (Intercept) 95  0.9438773  0.998110187
## 2 likelihood_rating 95 -0.0133837 -0.006299196
corr %>%
  ggscatter(y = "log", x = "likelihood_rating", 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.4))

ggsave("fig_6_likelihood_predict_log.jpg")

fit_raw1 <- lmer(detection_rt ~ likelihood_rating + (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 + (1 | workerId) + (1 | image) +  
##     (1 | stim_set)
##    Data: tbl_all
## 
## REML criterion at convergence: 31087.7
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7473 -0.4185 -0.1301  0.1484  9.1228 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.5595  1.2488  
##  workerId (Intercept)  7.9059  2.8118  
##  stim_set (Intercept)  0.3667  0.6055  
##  Residual             19.6149  4.4289  
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)         10.58004    0.42883    3.42545  24.672 5.58e-05 ***
## likelihood_rating   -0.33206    0.06131 2415.40510  -5.416 6.68e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## liklhd_rtng -0.445
ci(fit_raw1)
##           Parameter CI     CI_low    CI_high
## 1       (Intercept) 95  9.7395530 11.4205365
## 2 likelihood_rating 95 -0.4522239 -0.2119055
corr %>%
  ggscatter(y = "raw", x = "likelihood_rating", ylab = "Raw Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(5, 30))

ggsave("fig_7_likelihood_predict_raw.jpg")

Conclusion: Yes, ratings of change blindness ability predict change blindness duration.

5.2.4 Model comparisons.

Do likelihood ratings better predict change blindness duration beyond what is predicted from image-related properties (change size, eccentricity, and change type) alone?

Size of change. A: Yes.

model1a_log <- lmer(log ~  change_percent + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model1a_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ change_percent + (1 | workerId) + (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5800.9  -5761.6   2906.5  -5812.9     5204 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7724 -0.5460 -0.1409  0.3318  5.2184 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  image    (Intercept) 1.940e-03 4.405e-02
##  workerId (Intercept) 1.186e-02 1.089e-01
##  stim_set (Intercept) 3.007e-10 1.734e-05
##  Residual             1.579e-02 1.256e-01
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                  Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)      0.951402   0.008092 272.746848 117.574  < 2e-16 ***
## change_percent  -0.003811   0.001288 468.123515  -2.959  0.00324 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## chang_prcnt -0.225
model1b_log <- lmer(log ~  change_percent + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model1b_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ change_percent + likelihood_rating + (1 | workerId) + (1 |  
##     image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5827.8  -5781.9   2920.9  -5841.8     5203 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.8544 -0.5508 -0.1412  0.3345  5.2205 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  image    (Intercept) 1.667e-03 4.083e-02
##  workerId (Intercept) 1.174e-02 1.084e-01
##  stim_set (Intercept) 1.477e-10 1.215e-05
##  Residual             1.582e-02 1.258e-01
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        9.818e-01  9.753e-03  5.414e+02 100.669  < 2e-16 ***
## change_percent    -3.799e-03  1.238e-03  4.506e+02  -3.068  0.00229 ** 
## likelihood_rating -9.933e-03  1.802e-03  2.656e+03  -5.511 3.91e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_p
## chang_prcnt -0.184       
## liklhd_rtng -0.571  0.007
## convergence code: 0
## boundary (singular) fit: see ?isSingular
anova(model1a_log,model1b_log)
## Data: tbl_all
## Models:
## model1a_log: log ~ change_percent + (1 | workerId) + (1 | image) + (1 | stim_set)
## model1b_log: log ~ change_percent + likelihood_rating + (1 | workerId) + (1 | 
## model1b_log:     image) + (1 | stim_set)
##             npar     AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)    
## model1a_log    6 -5800.9 -5761.6 2906.5  -5812.9                         
## model1b_log    7 -5827.8 -5781.9 2920.9  -5841.8 28.909  1  7.586e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model2a_raw <- lmer(detection_rt ~  change_percent + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model2a_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ change_percent + (1 | workerId) + (1 | image) +  
##     (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31117.1  31156.4 -15552.5  31105.1     5204 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6665 -0.4133 -0.1274  0.1467  9.0153 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  image    (Intercept) 1.791e+00 1.3383490
##  workerId (Intercept) 8.025e+00 2.8328350
##  stim_set (Intercept) 2.431e-07 0.0004931
##  Residual             1.958e+01 4.4245791
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                 Estimate Std. Error        df t value Pr(>|t|)    
## (Intercept)      9.87817    0.22015 287.72798  44.871  < 2e-16 ***
## change_percent  -0.11328    0.04094 484.75324  -2.767  0.00587 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## chang_prcnt -0.265
model2b_raw <- lmer(detection_rt ~  change_percent + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model2b_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ change_percent + likelihood_rating + (1 | workerId) +  
##     (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31090.4  31136.3 -15538.2  31076.4     5203 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7508 -0.4178 -0.1340  0.1473  9.1099 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept)  1.529679 1.23680 
##  workerId (Intercept)  7.933779 2.81670 
##  stim_set (Intercept)  0.006188 0.07866 
##  Residual             19.607618 4.42805 
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)         10.89898    0.29197    7.42153  37.329 1.02e-09 ***
## change_percent      -0.11173    0.03960  311.00739  -2.821  0.00509 ** 
## likelihood_rating   -0.33445    0.06117 2393.77505  -5.468 5.03e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_p
## chang_prcnt -0.199       
## liklhd_rtng -0.647  0.002
anova(model2a_raw,model2b_raw)
## Data: tbl_all
## Models:
## model2a_raw: detection_rt ~ change_percent + (1 | workerId) + (1 | image) + 
## model2a_raw:     (1 | stim_set)
## model2b_raw: detection_rt ~ change_percent + likelihood_rating + (1 | workerId) + 
## model2b_raw:     (1 | image) + (1 | stim_set)
##             npar   AIC   BIC logLik deviance  Chisq Df Pr(>Chisq)    
## model2a_raw    6 31117 31156 -15552    31105                         
## model2b_raw    7 31090 31136 -15538    31076 28.707  1  8.422e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Eccentricity. A: Yes.

model3a_log <- lmer(log ~  eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model3a_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5804.6  -5765.2   2908.3  -5816.6     5204 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7216 -0.5450 -0.1436  0.3361  5.2760 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 1.888e-03 0.043457
##  workerId (Intercept) 1.200e-02 0.109557
##  stim_set (Intercept) 4.659e-05 0.006826
##  Residual             1.579e-02 0.125645
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##               Estimate Std. Error        df t value Pr(>|t|)    
## (Intercept)  9.231e-01  1.076e-02 2.595e+00  85.754  1.5e-05 ***
## eccentricity 1.124e-04  3.194e-05 4.150e+02   3.519 0.000481 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## eccentricty -0.570
model3b_log <- lmer(log ~  eccentricity + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model3b_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ eccentricity + likelihood_rating + (1 | workerId) + (1 |  
##     image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5831.9  -5786.0   2922.9  -5845.9     5203 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7989 -0.5485 -0.1394  0.3332  5.2834 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 1.617e-03 0.040209
##  workerId (Intercept) 1.185e-02 0.108844
##  stim_set (Intercept) 6.735e-05 0.008206
##  Residual             1.582e-02 0.125795
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        9.533e-01  1.219e-02  5.933e+00  78.183 3.61e-10 ***
## eccentricity       1.120e-04  3.064e-05  4.021e+02   3.656  0.00029 ***
## likelihood_rating -9.978e-03  1.798e-03  2.620e+03  -5.550 3.14e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) eccntr
## eccentricty -0.481       
## liklhd_rtng -0.454 -0.002
anova(model3a_log,model3b_log)
## Data: tbl_all
## Models:
## model3a_log: log ~ eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set)
## model3b_log: log ~ eccentricity + likelihood_rating + (1 | workerId) + (1 | 
## model3b_log:     image) + (1 | stim_set)
##             npar     AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)    
## model3a_log    6 -5804.6 -5765.2 2908.3  -5816.6                         
## model3b_log    7 -5831.9 -5786.0 2922.9  -5845.9 29.314  1  6.155e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model4a_raw <- lmer(detection_rt ~  eccentricity + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model4a_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ eccentricity + (1 | workerId) + (1 | image) +  
##     (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31120.6  31160.0 -15554.3  31108.6     5204 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6368 -0.4171 -0.1304  0.1447  9.0504 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.7929  1.3390  
##  workerId (Intercept)  8.0242  2.8327  
##  stim_set (Intercept)  0.1867  0.4321  
##  Residual             19.5786  4.4248  
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##               Estimate Std. Error        df t value Pr(>|t|)    
## (Intercept)  9.235e+00  3.753e-01 4.113e+00  24.608 1.27e-05 ***
## eccentricity 1.929e-03  1.048e-03 4.092e+02   1.841   0.0663 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr)
## eccentricty -0.533
model4b_raw <- lmer(detection_rt ~  eccentricity + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model4b_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ eccentricity + likelihood_rating + (1 | workerId) +  
##     (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31094.0  31139.9 -15540.0  31080.0     5203 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7175 -0.4196 -0.1316  0.1487  9.1475 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.5364  1.2395  
##  workerId (Intercept)  7.9432  2.8184  
##  stim_set (Intercept)  0.1577  0.3971  
##  Residual             19.6078  4.4281  
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                     Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)        1.027e+01  4.060e-01  7.574e+00  25.304 1.36e-08 ***
## eccentricity       1.923e-03  1.010e-03  4.003e+02   1.904   0.0576 .  
## likelihood_rating -3.337e-01  6.121e-02  2.403e+03  -5.452 5.49e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) eccntr
## eccentricty -0.474       
## liklhd_rtng -0.466 -0.002
anova(model4a_raw,model4b_raw)
## Data: tbl_all
## Models:
## model4a_raw: detection_rt ~ eccentricity + (1 | workerId) + (1 | image) + 
## model4a_raw:     (1 | stim_set)
## model4b_raw: detection_rt ~ eccentricity + likelihood_rating + (1 | workerId) + 
## model4b_raw:     (1 | image) + (1 | stim_set)
##             npar   AIC   BIC logLik deviance  Chisq Df Pr(>Chisq)    
## model4a_raw    6 31121 31160 -15554    31109                         
## model4b_raw    7 31094 31140 -15540    31080 28.571  1  9.032e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Type of change. A: Yes.

model5a_log <- lmer(log ~  change_type + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model5a_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ change_type + (1 | workerId) + (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5797.1  -5738.1   2907.6  -5815.1     5201 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7466 -0.5536 -0.1380  0.3334  5.1830 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept) 0.001902 0.04361 
##  workerId (Intercept) 0.011977 0.10944 
##  stim_set (Intercept) 0.000000 0.00000 
##  Residual             0.015790 0.12566 
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)              0.961522   0.010126 476.541412  94.957  < 2e-16 ***
## change_typedisappear    -0.017518   0.008438 443.002675  -2.076  0.03846 *  
## change_typemovement     -0.029171   0.012616 453.564508  -2.312  0.02121 *  
## change_typereplacement  -0.021801   0.030943 450.793276  -0.705  0.48145    
## change_typesize         -0.048274   0.017669 461.168650  -2.732  0.00653 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_typd chng_typm chng_typr
## chng_typdsp -0.614                              
## chng_typmvm -0.306  0.354                       
## chng_typrpl -0.128  0.144     0.168             
## chang_typsz -0.220  0.246     0.289     0.161   
## convergence code: 0
## boundary (singular) fit: see ?isSingular
model5b_log <- lmer(log ~  change_type + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model5b_log)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: log ~ change_type + likelihood_rating + (1 | workerId) + (1 |  
##     image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  -5831.2  -5765.6   2925.6  -5851.2     5200 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.8352 -0.5519 -0.1338  0.3269  5.1783 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept) 0.001558 0.03947 
##  workerId (Intercept) 0.011768 0.10848 
##  stim_set (Intercept) 0.000000 0.00000 
##  Residual             0.015844 0.12587 
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)             9.983e-01  1.152e-02  7.389e+02  86.693  < 2e-16 ***
## change_typedisappear   -1.878e-02  8.013e-03  4.188e+02  -2.344 0.019566 *  
## change_typemovement    -4.254e-02  1.219e-02  4.585e+02  -3.490 0.000530 ***
## change_typereplacement -2.835e-02  2.943e-02  4.381e+02  -0.963 0.335978    
## change_typesize        -5.853e-02  1.689e-02  4.505e+02  -3.467 0.000577 ***
## likelihood_rating      -1.134e-02  1.827e-03  2.858e+03  -6.207 6.19e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_typd chng_typm chng_typr chng_typs
## chng_typdsp -0.525                                        
## chng_typmvm -0.344  0.350                                 
## chng_typrpl -0.126  0.144     0.174                       
## chang_typsz -0.234  0.245     0.304     0.167             
## liklhd_rtng -0.519  0.025     0.181     0.037     0.100   
## convergence code: 0
## boundary (singular) fit: see ?isSingular
anova(model5a_log,model5b_log)
## Data: tbl_all
## Models:
## model5a_log: log ~ change_type + (1 | workerId) + (1 | image) + (1 | stim_set)
## model5b_log: log ~ change_type + likelihood_rating + (1 | workerId) + (1 | 
## model5b_log:     image) + (1 | stim_set)
##             npar     AIC     BIC logLik deviance Chisq Df Pr(>Chisq)    
## model5a_log    9 -5797.1 -5738.1 2907.6  -5815.1                        
## model5b_log   10 -5831.2 -5765.6 2925.6  -5851.2 36.07  1  1.904e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model6a_raw <- lmer(detection_rt ~  change_type + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model6a_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ change_type + (1 | workerId) + (1 | image) + (1 |  
##     stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31116.3  31175.4 -15549.2  31098.3     5201 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6339 -0.4143 -0.1248  0.1494  9.0205 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev. 
##  image    (Intercept) 1.716e+00 1.310e+00
##  workerId (Intercept) 8.109e+00 2.848e+00
##  stim_set (Intercept) 3.678e-18 1.918e-09
##  Residual             1.958e+01 4.425e+00
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                        Estimate Std. Error       df t value Pr(>|t|)    
## (Intercept)             10.3528     0.2927 509.4464  35.370  < 2e-16 ***
## change_typedisappear    -0.7436     0.2677 448.5829  -2.777  0.00571 ** 
## change_typemovement     -1.0766     0.4064 452.5058  -2.649  0.00835 ** 
## change_typereplacement  -1.1019     1.0027 452.8482  -1.099  0.27238    
## change_typesize         -1.6335     0.5698 459.0375  -2.867  0.00433 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_typd chng_typm chng_typr
## chng_typdsp -0.675                              
## chng_typmvm -0.343  0.361                       
## chng_typrpl -0.143  0.147     0.165             
## chang_typsz -0.247  0.252     0.285     0.157   
## convergence code: 0
## boundary (singular) fit: see ?isSingular
model6b_raw <- lmer(detection_rt ~  change_type + likelihood_rating + (1 | workerId) + (1 | image) + (1 | stim_set), data=tbl_all, REML=FALSE)
summary(model6b_raw)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
##   method [lmerModLmerTest]
## Formula: detection_rt ~ change_type + likelihood_rating + (1 | workerId) +  
##     (1 | image) + (1 | stim_set)
##    Data: tbl_all
## 
##      AIC      BIC   logLik deviance df.resid 
##  31081.3  31146.9 -15530.6  31061.3     5200 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7248 -0.4202 -0.1323  0.1525  9.1105 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.378   1.174   
##  workerId (Intercept)  7.947   2.819   
##  stim_set (Intercept)  0.000   0.000   
##  Residual             19.631   4.431   
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                          Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)              11.61454    0.34890  852.54452  33.289  < 2e-16 ***
## change_typedisappear     -0.78907    0.25516  428.77478  -3.092 0.002115 ** 
## change_typemovement      -1.52552    0.39424  464.67523  -3.869 0.000125 ***
## change_typereplacement   -1.31618    0.95681  445.96898  -1.376 0.169638    
## change_typesize          -1.97785    0.54626  454.72491  -3.621 0.000327 ***
## likelihood_rating        -0.38749    0.06189 2562.56277  -6.261 4.48e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) chng_typd chng_typm chng_typr chng_typs
## chng_typdsp -0.556                                        
## chng_typmvm -0.376  0.358                                 
## chng_typrpl -0.136  0.147     0.171                       
## chang_typsz -0.255  0.251     0.301     0.163             
## liklhd_rtng -0.583  0.029     0.186     0.038     0.103   
## convergence code: 0
## boundary (singular) fit: see ?isSingular
anova(model6a_raw,model6b_raw)
## Data: tbl_all
## Models:
## model6a_raw: detection_rt ~ change_type + (1 | workerId) + (1 | image) + (1 | 
## model6a_raw:     stim_set)
## model6b_raw: detection_rt ~ change_type + likelihood_rating + (1 | workerId) + 
## model6b_raw:     (1 | image) + (1 | stim_set)
##             npar   AIC   BIC logLik deviance  Chisq Df Pr(>Chisq)    
## model6a_raw    9 31116 31175 -15549    31098                         
## model6b_raw   10 31081 31147 -15531    31061 37.036  1   1.16e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusion: Change blindness duration is better predicted by the size of the change, the eccentricity of the change, and the type of the change when accounting for likelihood ratings.

5.3 Predicting self vs. other.

5.3.1 Read in data files.

tbl_all_mod <- tbl_all[, -c(8,9,10,11,12,13,14,16,17,19,20,21,22,23,24)]
names(tbl_all_mod)[4] <- "raw_CB_duration"
names(tbl_all_mod)[11] <- "log_CB_duration"
tbl_all_mod$group = "return"

rensink_new <- list.files(path = "./Rensink_New", pattern = "*.csv", full.names = T, ignore.case = F) %>%
  map_df(~read.csv(., colClasses=c("gender..m.f."="character", "a"="character", "tp_a"="character")))
nrow(rensink_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 36
rensink_new <- rensink_new %>% 
  group_by(workerId) %>% 
  filter(any(Airplane_resp.keys >= 4) & any(Boat_resp.keys >= 4) & any(Cow_resp.keys >= 4) & any(Garden_resp.keys <= 3))
nrow(rensink_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 20
rensink_new = subset(rensink_new, select = c(user_resp.keys,user_resp.rt,workerId,image_a))
col_idx <- grep("workerId", names(rensink_new))
rensink_new <- rensink_new[, c(col_idx, (1:ncol(rensink_new))[-col_idx])]
rensink_new <- data.frame(na.omit(rensink_new))
rensink_new <- rensink_new %>%
separate(image_a,into=c('database', 'image'), sep = "([\\_])", extra = "merge")
rensink_new$image <- lapply(rensink_new$image, gsub, pattern='-a_w_outline.jpg', replacement='')
rensink_new <- rensink_new %>%  
    mutate(image = as.character(image))

ma_new <- list.files(path = "./Ma_New", pattern = "*.csv", full.names = T, ignore.case = F) %>%
  map_df(~read.csv(., colClasses=c("gender..m.f."="character", "a"="character", "tp_a"="character")))
nrow(ma_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 45
ma_new <- ma_new %>% 
  group_by(workerId) %>% 
  filter(any(Airplane_resp.keys >= 4) & any(Boat_resp.keys >= 4) & any(Cow_resp.keys >= 4) & any(Garden_resp.keys <= 3))
nrow(ma_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 37
ma_new = subset(ma_new, select = c(user_resp.keys,user_resp.rt,workerId,image_a))
col_idx <- grep("workerId", names(ma_new))
ma_new <- ma_new[, c(col_idx, (1:ncol(ma_new))[-col_idx])]
ma_new <- data.frame(na.omit(ma_new))
ma_new <- ma_new %>%
separate(image_a,into=c('database', 'image'), sep = "([\\_])", extra = "merge")
ma_new$image <- lapply(ma_new$image, gsub, pattern='-a_w_outline.jpg', replacement='')
ma_new <- ma_new %>%  
    mutate(image = as.character(image))

wolfe1_new <- list.files(path = "./Wolfe1_New", pattern = "*.csv", full.names = T, ignore.case = F) %>%
  map_df(~read.csv(., colClasses=c("gender..m.f."="character", "a"="character", "tp_a"="character")))
nrow(wolfe1_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 88
wolfe1_new <- wolfe1_new %>% 
  group_by(workerId) %>% 
  filter(any(Airplane_resp.keys >= 4) & any(Boat_resp.keys >= 4) & any(Cow_resp.keys >= 4) & any(Garden_resp.keys <= 3))
nrow(wolfe1_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 64
wolfe1_new = subset(wolfe1_new, select = c(user_resp.keys,user_resp.rt,workerId,image_a))
col_idx <- grep("workerId", names(wolfe1_new))
wolfe1_new <- wolfe1_new[, c(col_idx, (1:ncol(wolfe1_new))[-col_idx])]
wolfe1_new <- data.frame(na.omit(wolfe1_new))
wolfe1_new <- wolfe1_new %>%
separate(image_a,into=c('database', 'image'), sep = "([\\_])")
wolfe1_new$image <- lapply(wolfe1_new$image, gsub, pattern='-a', replacement='')
wolfe1_new <- wolfe1_new %>%  
    mutate(image = as.character(image))
wolfe1_new$database = "wolfe1"

wolfe2_new <- list.files(path = "./Wolfe2_New", pattern = "*.csv", full.names = T, ignore.case = F) %>%
  map_df(~read.csv(., colClasses=c("gender..m.f."="character", "a"="character", "tp_a"="character")))
nrow(wolfe2_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 165
wolfe2_new <- wolfe2_new %>% 
  group_by(workerId) %>% 
  filter(any(Airplane_resp.keys >= 4) & any(Boat_resp.keys >= 4) & any(Cow_resp.keys >= 4) & any(Garden_resp.keys <= 3))
nrow(wolfe2_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 103
wolfe2_new = subset(wolfe2_new, select = c(user_resp.keys,user_resp.rt,workerId,image_a))
col_idx <- grep("workerId", names(wolfe2_new))
wolfe2_new <- wolfe2_new[, c(col_idx, (1:ncol(wolfe2_new))[-col_idx])]
wolfe2_new <- data.frame(na.omit(wolfe2_new))
wolfe2_new <- wolfe2_new %>%
separate(image_a,into=c('database', 'image'), sep = "([\\_])", extra = "merge")
wolfe2_new$image <- lapply(wolfe2_new$image, gsub, pattern='-a_w_outline.jpg', replacement='')
wolfe2_new <- wolfe2_new %>%  
    mutate(image = as.character(image))
wolfe2_new$database = "wolfe2"

new_ratings <- rbind(rensink_new, ma_new, wolfe1_new, wolfe2_new)
names(new_ratings)[2] <- "likelihood_rating"
names(new_ratings)[3] <- "likelihood_rt"
names(new_ratings)[4] <- "stim_set"

new_subj_avg <- new_ratings %>%
  group_by(workerId,image) %>%
  dplyr::summarize(average = mean(likelihood_rating)) %>%
  spread(image,average) %>% 
  mutate(subj_avg = rowMeans(.[-1], na.rm = TRUE))
mean(new_subj_avg$subj_avg)
## [1] 3.032961
new_img_avg <- data.frame(new_img_avg = colMeans(new_subj_avg[,2:483], na.rm = TRUE))
new_img_avg <- tibble::rownames_to_column(new_img_avg, "image")

new_ratings_mod <- left_join(new_ratings, Box_and_change_info, by = "image")
new_ratings_mod <- new_ratings_mod[, -c(6,7,8,9,10,11,12,14,15,17,18,19,20,21,22)]

all_change_type<- read_csv("All_change_type.csv", col_types = cols())
new_ratings_mod <- left_join(new_ratings_mod, all_change_type, by = "image")
new_ratings_mod$group = "new"

return_new <- rbind.fill(tbl_all_mod, new_ratings_mod)
write.csv(return_new, "return_new_data.csv", row.names=FALSE)

nrow(return_new %>% distinct(workerId,.keep_all = FALSE))
## [1] 443

5.3.2 Analyze and plot.

new_avg <- return_new %>%
  filter(group == "new") %>%
  group_by(image) %>%
  summarise_at(vars(likelihood_rating), funs(mean(., na.rm=TRUE)))
names(new_avg)[2] <- "new_avg_likelihood_rating"

return_new <- return_new %>% 
  filter (group == "return")
return_new <- left_join(return_new, new_avg, by = "image")

fit_return_new_log <- lmer(log_CB_duration ~ likelihood_rating + new_avg_likelihood_rating + (1|workerId) + (1|image) + (1|stim_set), data=return_new)
summary(fit_return_new_log)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: log_CB_duration ~ likelihood_rating + new_avg_likelihood_rating +  
##     (1 | workerId) + (1 | image) + (1 | stim_set)
##    Data: return_new
## 
## REML criterion at convergence: -5838.4
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.7768 -0.5502 -0.1432  0.3393  5.2624 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  image    (Intercept) 0.0015754 0.03969 
##  workerId (Intercept) 0.0118641 0.10892 
##  stim_set (Intercept) 0.0001133 0.01064 
##  Residual             0.0157855 0.12564 
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                             Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)                1.023e+00  1.416e-02  3.773e+00  72.280 4.56e-07 ***
## likelihood_rating         -3.695e-03  2.098e-03  4.786e+03  -1.761   0.0783 .  
## new_avg_likelihood_rating -2.230e-02  3.848e-03  7.300e+02  -5.795 1.02e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) lklhd_
## liklhd_rtng -0.022       
## nw_vg_lklh_ -0.601 -0.520
ci(fit_return_new_log)
##                   Parameter CI       CI_low       CI_high
## 1               (Intercept) 95  0.995553677  1.0510498059
## 2         likelihood_rating 95 -0.007806063  0.0004167731
## 3 new_avg_likelihood_rating 95 -0.029836948 -0.0147545697
fit_return_new_raw <- lmer(raw_CB_duration ~ likelihood_rating + new_avg_likelihood_rating + (1|workerId) + (1|image) + (1|stim_set), data=return_new)
summary(fit_return_new_raw)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: raw_CB_duration ~ likelihood_rating + new_avg_likelihood_rating +  
##     (1 | workerId) + (1 | image) + (1 | stim_set)
##    Data: return_new
## 
## REML criterion at convergence: 31065.5
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6800 -0.4243 -0.1330  0.1556  9.1231 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  image    (Intercept)  1.4661  1.2108  
##  workerId (Intercept)  7.9467  2.8190  
##  stim_set (Intercept)  0.2186  0.4676  
##  Residual             19.5709  4.4239  
## Number of obs: 5210, groups:  image, 480; workerId, 219; stim_set, 4
## 
## Fixed effects:
##                             Estimate Std. Error         df t value Pr(>|t|)    
## (Intercept)                 12.00054    0.46978    6.64059  25.545 7.02e-08 ***
## likelihood_rating           -0.14268    0.07222 4909.86913  -1.976   0.0483 *  
## new_avg_likelihood_rating   -0.63762    0.12821  759.21568  -4.973 8.14e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##             (Intr) lklhd_
## liklhd_rtng -0.023       
## nw_vg_lklh_ -0.589 -0.537
ci(fit_return_new_raw)
##                   Parameter CI     CI_low      CI_high
## 1               (Intercept) 95 11.0797891 12.921298316
## 2         likelihood_rating 95 -0.2842312 -0.001123464
## 3 new_avg_likelihood_rating 95 -0.8888971 -0.386340313
return_new_corr <- return_new %>% 
  group_by(image) %>% 
  dplyr::summarize(likelihood_rating = mean(likelihood_rating), new_avg_likelihood_rating = mean(new_avg_likelihood_rating))

return_new_corr %>%
  ggscatter(y = "likelihood_rating", x = "new_avg_likelihood_rating", ylab = "Return subject rating", xlab = "New subject rating", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(1, 5))

ggsave("fig_18_return_new.jpg")