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 = "./Ma_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] 2.927538
tbl_all_img_avg <- data.frame(img_avg = colMeans(tbl_all_subj_avg[,2:70], na.rm = TRUE))
tbl_all_img_avg <- tibble::rownames_to_column(tbl_all_img_avg, "image")
Add change_type to dataframe.
ma_change_type<- read_csv("Ma_change_type.csv")
ma_change_type <- ma_change_type %>%
mutate(image = as.character(image))
ma_RTs_likelihood <- left_join(ma_RTs_likelihood, ma_change_type, by = "image")
Compute likelihood rating for each image.
ma_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")

ma_RTs_likelihood_no_NA <- ma_RTs_likelihood %>%
drop_na()
ma_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(ma_RTs_likelihood,'Ma_RTs_likelihood.csv', row.names=FALSE)
write.csv(ma_RTs_likelihood_no_NA,'Ma_RTs_likelihood_no_NA.csv', row.names=FALSE)
Count number of ratings.
ma_RTs_likelihood_count <- ma_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)
ma_RTs_likelihood_count <- data.frame(count = colSums(ma_RTs_likelihood_count[,2:70], na.rm = TRUE))
ma_RTs_likelihood_count <- tibble::rownames_to_column(ma_RTs_likelihood_count, "image")
ma_RTs_likelihood_count
## image count
## 1 10504629 9
## 2 10810329 8
## 3 1191801 10
## 4 12115280 8
## 5 12178414 8
## 6 13141692 9
## 7 1383096 9
## 8 13873251 12
## 9 16527526 5
## 10 18169626 6
## 11 18345691 9
## 12 22020472 7
## 13 23024660 10
## 14 23199105 8
## 15 24383097 8
## 16 25107991 8
## 17 27857618 10
## 18 3099758 11
## 19 31236119 9
## 20 32289063 6
## 21 38466626 8
## 22 38546029 5
## 23 42429798 3
## 24 4247084 8
## 25 44993860 7
## 26 45525109 7
## 27 46475259 8
## 28 46635293 5
## 29 48384711 6
## 30 48486405 11
## 31 51537628 7
## 32 51856108 7
## 33 55174490 9
## 34 56835136 7
## 35 57861456 7
## 36 61118260 12
## 37 62096551 10
## 38 62224663 8
## 39 67862299 9
## 40 69128765 4
## 41 70687495 8
## 42 72488522 9
## 43 73637203 10
## 44 74173745 9
## 45 75081153 6
## 46 75958241 10
## 47 77345858 9
## 48 77574131 6
## 49 77793328 9
## 50 79191795 6
## 51 79222679 7
## 52 79241011 8
## 53 79573638 8
## 54 8197559 5
## 55 81993755 1
## 56 83536470 6
## 57 83691215 6
## 58 83785171 10
## 59 85741618 6
## 60 86520382 4
## 61 87983207 3
## 62 88767165 7
## 63 89354846 8
## 64 8974554 9
## 65 90405028 10
## 66 95091295 4
## 67 97475929 3
## 68 98156944 9
## 69 98265889 5
Mixed effects model and correlation.
Raw RT
fit_raw <- lmer(detection_rt ~ likelihood_rating * change_type + (1 | workerId) + (1 | image), data=ma_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: ma_RTs_likelihood_no_NA
##
## REML criterion at convergence: 3021.7
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.6457 -0.3424 -0.1033 0.0961 9.5915
##
## Random effects:
## Groups Name Variance Std.Dev.
## image (Intercept) 0.06219 0.2494
## workerId (Intercept) 8.98934 2.9982
## Residual 18.20118 4.2663
## Number of obs: 519, groups: image, 69; workerId, 22
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 10.75554 1.56345 262.30245 6.879
## likelihood_rating -0.32550 0.36478 363.98232 -0.892
## change_typedisappear -0.90942 1.88643 354.29712 -0.482
## change_typemovement -1.67431 1.60264 317.00108 -1.045
## change_typereplacement -0.59666 2.55696 364.73941 -0.233
## change_typesize -2.19554 1.64714 267.29288 -1.333
## likelihood_rating:change_typedisappear 0.11714 0.49475 396.95732 0.237
## likelihood_rating:change_typemovement 0.14855 0.45086 378.79100 0.329
## likelihood_rating:change_typereplacement -0.05964 0.71820 417.39389 -0.083
## likelihood_rating:change_typesize 0.20576 0.45707 319.21710 0.450
## Pr(>|t|)
## (Intercept) 4.4e-11 ***
## likelihood_rating 0.373
## change_typedisappear 0.630
## change_typemovement 0.297
## change_typereplacement 0.816
## change_typesize 0.184
## likelihood_rating:change_typedisappear 0.813
## likelihood_rating:change_typemovement 0.742
## likelihood_rating:change_typereplacement 0.934
## likelihood_rating:change_typesize 0.653
## ---
## 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.869
## chng_typdsp -0.669 0.696
## chng_typmvm -0.799 0.835 0.650
## chng_typrpl -0.513 0.535 0.422 0.495
## chang_typsz -0.773 0.809 0.635 0.759 0.480
## lklhd_rtng:chng_typd 0.623 -0.712 -0.945 -0.607 -0.392 -0.591
## lklhd_rtng:chng_typm 0.690 -0.790 -0.565 -0.925 -0.428 -0.662
## lklhd_rtng:chng_typr 0.450 -0.514 -0.367 -0.435 -0.931 -0.422
## lklhd_rtng:chng_typs 0.676 -0.775 -0.557 -0.668 -0.419 -0.928
## 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.580
## lklhd_rtng:chng_typr 0.374 0.413
## lklhd_rtng:chng_typs 0.568 0.637
## 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.404
corr <- ma_RTs_likelihood_no_NA %>%
group_by(image) %>%
dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating))
corr <- left_join(corr, ma_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 = 22", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 17.5), conf.int = TRUE, xlim = c(1, 5), ylim = c(5, 17.5), label = "image", font.label = c(5, "plain", "black"))

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 = 22", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(5, 17.5), label = "image", font.label = c(5, "plain", "black")) + stat_cor(aes(color = change_type), label.x = c(1, 1, 2.5, 2.5, 4), label.y = c(17.5, 16, 17.5, 16, 17.5), method = "pearson")

Log RT
fit_log <- lmer(log10(detection_rt) ~ likelihood_rating * change_type + (1 | workerId) + (1 | image), data=ma_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: ma_RTs_likelihood_no_NA
##
## REML criterion at convergence: -661.8
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.8302 -0.4985 -0.1124 0.2949 5.4899
##
## Random effects:
## Groups Name Variance Std.Dev.
## image (Intercept) 0.0005631 0.02373
## workerId (Intercept) 0.0156865 0.12525
## Residual 0.0122298 0.11059
## Number of obs: 519, groups: image, 69; workerId, 22
##
## Fixed effects:
## Estimate Std. Error df
## (Intercept) 0.964671 0.047044 148.972062
## likelihood_rating -0.009584 0.009828 431.804173
## change_typedisappear -0.002390 0.050997 376.562909
## change_typemovement -0.043619 0.043507 351.468126
## change_typereplacement 0.001429 0.069105 375.341445
## change_typesize -0.060324 0.044983 310.458534
## likelihood_rating:change_typedisappear -0.004567 0.013281 440.283541
## likelihood_rating:change_typemovement 0.002633 0.012116 441.958341
## likelihood_rating:change_typereplacement -0.005281 0.019235 456.109715
## likelihood_rating:change_typesize 0.003524 0.012365 399.197798
## t value Pr(>|t|)
## (Intercept) 20.506 <2e-16 ***
## likelihood_rating -0.975 0.330
## change_typedisappear -0.047 0.963
## change_typemovement -1.003 0.317
## change_typereplacement 0.021 0.984
## change_typesize -1.341 0.181
## likelihood_rating:change_typedisappear -0.344 0.731
## likelihood_rating:change_typemovement 0.217 0.828
## likelihood_rating:change_typereplacement -0.275 0.784
## likelihood_rating:change_typesize 0.285 0.776
## ---
## 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.775
## chng_typdsp -0.601 0.686
## chng_typmvm -0.717 0.823 0.648
## chng_typrpl -0.462 0.531 0.424 0.495
## chang_typsz -0.689 0.791 0.630 0.750 0.477
## lklhd_rtng:chng_typd 0.554 -0.709 -0.933 -0.599 -0.390 -0.580
## lklhd_rtng:chng_typm 0.616 -0.788 -0.559 -0.912 -0.426 -0.649
## lklhd_rtng:chng_typr 0.403 -0.517 -0.366 -0.433 -0.917 -0.417
## lklhd_rtng:chng_typs 0.598 -0.768 -0.549 -0.655 -0.414 -0.915
## 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.579
## lklhd_rtng:chng_typr 0.378 0.416
## lklhd_rtng:chng_typs 0.565 0.634
## 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.404
corr <- ma_RTs_likelihood_no_NA %>%
group_by(image) %>%
dplyr::summarize(detection_rt = mean(detection_rt), likelihood_rating = mean(likelihood_rating))
corr <- left_join(corr, ma_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 = 22", add = "reg.line", cor.coef = TRUE, cor.coeff.args = list(method = "pearson", label.x = 1, label.y = 1.25), conf.int = TRUE, xlim = c(1, 5), ylim = c(0.75, 1.3), label = "image", font.label = c(5, "plain", "black"))

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 = 22", add = "reg.line", conf.int = TRUE, xlim = c(1, 5), ylim = c(0.75, 1.3), label = "image", font.label = c(5, "plain", "black")) + stat_cor(aes(color = change_type), label.x = c(1, 1, 2.5, 2.5, 4), label.y = c(1.3, 1.25, 1.3, 1.25, 1.3), method = "pearson")
