Set up R environment.
library(tidyverse)
library(ggplot2)
library(ggpubr)
library(plyr)
library(magick)
library(png)
library(EBImage)
library(lme4)
library(lmerTest)
Set the R working drectory to the main experiment directory.
setwd("/Users/adambarnas/Box/MetaAwareness/data/")
Read in the individual subject files.
tbl_all <- list.files(path = "./Rensink_Recontact", pattern = "*.csv", full.names = T, ignore.case = F) %>%
map_df(~read.csv(., colClasses=c("gender..m.f."="character")))
tbl_all = subset(tbl_all, select = c(user_resp.keys,user_resp.rt,workerId,image_a))
col_idx <- grep("workerId", names(tbl_all))
tbl_all <- tbl_all[, c(col_idx, (1:ncol(tbl_all))[-col_idx])]
tbl_all <- data.frame(na.omit(tbl_all))
tbl_all <- tbl_all %>%
separate(image_a,into=c('database', 'image', NA), sep = "([\\_\\-])")
Compute average likelihood rating.
tbl_all_subj_avg <- tbl_all %>%
group_by(workerId,image) %>%
dplyr::summarize(average = mean(user_resp.keys)) %>%
spread(image,average) %>%
mutate(subj_avg = rowMeans(.[-1], na.rm = TRUE))
mean(tbl_all_subj_avg$subj_avg)
## [1] 3.633333
tbl_all_img_avg <- data.frame(img_avg = colMeans(tbl_all_subj_avg[,2:49], na.rm = TRUE))
tbl_all_img_avg <- tibble::rownames_to_column(tbl_all_img_avg, "image")
Add change_type to dataframe.
rensink_change_type<- read_csv("Rensink_change_type.csv")
rensink_RTs_likelihood <- left_join(rensink_RTs_likelihood, rensink_change_type, by = "image")
Compute likelihood rating for each image.
rensink_RTs_likelihood %>%
ggbarplot(x = "image", y = "likelihood_rating", ylab = "Likelihood of Detecting Change", title = "All images (30 per subject)", fill = "#f7a800", add = "mean_se", font.xtickslab = 8, sort.val = c("asc")) + rotate_x_text() + theme(legend.position = "none")

rensink_RTs_likelihood_no_NA <- rensink_RTs_likelihood %>%
drop_na()
rensink_RTs_likelihood_no_NA %>%
ggbarplot(x = "image", y = "likelihood_rating", ylab = "Likelihood of Detecting Change", title = "'Correct' images", fill = "#f7a800", add = "mean_se", font.xtickslab = 8, sort.val = c("asc")) + rotate_x_text() + theme(legend.position = "none")

write.csv(rensink_RTs_likelihood,'Rensink_RTs_likelihood.csv', row.names=FALSE)
write.csv(rensink_RTs_likelihood_no_NA,'Rensink_RTs_likelihood_no_NA.csv', row.names=FALSE)
Count number of ratings.
rensink_RTs_likelihood_count <- rensink_RTs_likelihood_no_NA %>%
group_by(workerId,image) %>%
dplyr::summarize(counts = n()) %>%
spread(image,counts) %>%
mutate(sum = rowSums(.[-1], na.rm = TRUE))
#head(tbl_all_counts,10)
rensink_RTs_likelihood_count <- data.frame(count = colSums(rensink_RTs_likelihood_count[,2:49], na.rm = TRUE))
rensink_RTs_likelihood_count <- tibble::rownames_to_column(rensink_RTs_likelihood_count, "image")
rensink_RTs_likelihood_count
## image count
## 1 Amish 9
## 2 Army 8
## 3 Barns 8
## 4 BarnTrack 8
## 5 Barrels 7
## 6 Beach 11
## 7 Birds 9
## 8 Boat 8
## 9 Bus 9
## 10 Cactus 9
## 11 Camel 10
## 12 CanalBridge 8
## 13 Castle 5
## 14 Chopper 9
## 15 Cockpit 8
## 16 Description 6
## 17 Dinner 8
## 18 Diver 11
## 19 Eating 8
## 20 Egypt 8
## 21 FarmByPond 5
## 22 Farmer 9
## 23 Fishing 9
## 24 Floatplane 8
## 25 Fountain 10
## 26 Harbor 9
## 27 Horizon 8
## 28 Ice 7
## 29 Kayak 10
## 30 Kayaker 8
## 31 Kids 8
## 32 Lake 11
## 33 Market 6
## 34 Marling 8
## 35 Mosque 10
## 36 NotreDame 12
## 37 Nurses 8
## 38 Obelisk 9
## 39 OtherDiver 6
## 40 Pilots 9
## 41 Seal 11
## 42 Soldiers 9
## 43 Station 9
## 44 SummerLake 9
## 45 Turtle 6
## 46 Water 9
## 47 Window 8
## 48 Wine 9
Mixed effects model and correlation.
Raw RT
fit_raw <- lmer(detection_rt ~ likelihood_rating * change_type + (1 | workerId) + (1 | image), data=rensink_RTs_likelihood_no_NA)
summary(fit_raw)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: detection_rt ~ likelihood_rating * change_type + (1 | workerId) +
## (1 | image)
## Data: rensink_RTs_likelihood_no_NA
##
## REML criterion at convergence: 1839.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.1883 -0.3942 -0.1053 0.2443 4.5535
##
## Random effects:
## Groups Name Variance Std.Dev.
## image (Intercept) 0.5792 0.7611
## workerId (Intercept) 4.3891 2.0950
## Residual 4.3602 2.0881
## Number of obs: 407, groups: image, 48; workerId, 16
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 9.3240 1.0030 135.0411 9.296
## likelihood_rating -0.2875 0.1944 376.1016 -1.479
## change_typedisappear -0.6089 1.0190 303.8336 -0.598
## change_typemovement -1.1686 0.9500 304.0959 -1.230
## likelihood_rating:change_typedisappear 0.1462 0.2354 375.7850 0.621
## likelihood_rating:change_typemovement 0.2104 0.2424 393.2581 0.868
## Pr(>|t|)
## (Intercept) 3.4e-16 ***
## likelihood_rating 0.140
## change_typedisappear 0.551
## change_typemovement 0.220
## likelihood_rating:change_typedisappear 0.535
## likelihood_rating:change_typemovement 0.386
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) lklhd_ chng_typd chng_typm lklhd_rtng:chng_typd
## liklhd_rtng -0.809
## chng_typdsp -0.645 0.716
## chng_typmvm -0.714 0.802 0.678
## lklhd_rtng:chng_typd 0.592 -0.736 -0.932 -0.627
## lklhd_rtng:chng_typm 0.577 -0.730 -0.573 -0.888 0.596
corr <- rensink_RTs_likelihood_no_NA %>%
group_by(image) %>%
dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating))
corr <- left_join(corr, rensink_change_type, by = "image")
corr %>%
ggscatter(y = "detection_rt", x = "likelihood_rating", ylab = "Raw Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", title = "N = 16", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 12.5), conf.int = TRUE, xlim = c(1, 5), ylim = c(6, 14))

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", title = "N = 16", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(6, 14)) + stat_cor(aes(color = change_type), label.x = 1, label.y = c(12, 13, 14), method = "pearson")

Log RT
fit_log <- lmer(log10(detection_rt) ~ likelihood_rating * change_type + (1 | workerId) + (1 | image), data=rensink_RTs_likelihood_no_NA)
summary(fit_log)
## 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)
## Data: rensink_RTs_likelihood_no_NA
##
## REML criterion at convergence: -744
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.2850 -0.5113 -0.1195 0.3589 3.5149
##
## Random effects:
## Groups Name Variance Std.Dev.
## image (Intercept) 0.001022 0.03197
## workerId (Intercept) 0.011534 0.10740
## Residual 0.006751 0.08217
## Number of obs: 407, groups: image, 48; workerId, 16
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 0.917541 0.043340 84.718181 21.171
## likelihood_rating -0.008547 0.007712 378.328114 -1.108
## change_typedisappear -0.012055 0.040488 305.486360 -0.298
## change_typemovement -0.033312 0.037776 302.506448 -0.882
## likelihood_rating:change_typedisappear 0.003753 0.009317 379.047876 0.403
## likelihood_rating:change_typemovement 0.006700 0.009596 390.485418 0.698
## Pr(>|t|)
## (Intercept) <2e-16 ***
## likelihood_rating 0.268
## change_typedisappear 0.766
## change_typemovement 0.379
## likelihood_rating:change_typedisappear 0.687
## likelihood_rating:change_typemovement 0.485
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) lklhd_ chng_typd chng_typm lklhd_rtng:chng_typd
## liklhd_rtng -0.743
## chng_typdsp -0.592 0.712
## chng_typmvm -0.656 0.797 0.676
## lklhd_rtng:chng_typd 0.542 -0.734 -0.929 -0.624
## lklhd_rtng:chng_typm 0.528 -0.729 -0.571 -0.883 0.596
corr <- rensink_RTs_likelihood_no_NA %>%
group_by(image) %>%
dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating))
corr <- left_join(corr, rensink_change_type, by = "image")
corr$log <- log10(corr$detection_rt)
corr %>%
ggscatter(y = "log", x = "likelihood_rating", ylab = "Log Change Detection RT (sec)", xlab = "Likelihood of Detecting Change", title = "N = 16", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 1.2), conf.int = TRUE, xlim = c(1, 5), ylim = c(0.8, 1.2))

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", title = "N = 16", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(.8, 1.2)) + stat_cor(aes(color = change_type), label.x = 1, label.y = c(1.1, 1.15, 1.2), method = "pearson")
