set.seed(12345) # for reproducibility
if (!require("Rmisc", quietly = TRUE)) install.packages("Rmisc") # Never load it directly.
::p_load(tidyverse, psych)
pacman::p_load(knitr, ggridges)
pacman::p_load(rstatix, TOSTER, pwr)
pacman::p_load(cowplot)
pacman::p_load_gh("thomasp85/patchwork")
pacman::p_load_gh("RLesur/klippy", "mitchelloharawild/icons")
pacman
options(knitr.kable.NA = '')
options(dplyr.summarise.inform=FALSE) # suppress warning in regards to regrouping
<- 2
xcut
::klippy() klippy
# Exp1: distractor = O's
<- read.csv("data/data_vstmAS1.csv", header = T)
E1 headTail(E1)
## SN Trial vstmLoad Targ Flnk Congruency Resp RT vstmCond vstmResp vstmRT
## 1 1 1 1 1 1 1 1 1.15 2 2 1.13
## 2 1 2 2 1 2 0 1 1.36 1 2 1.22
## 3 1 3 1 2 1 0 2 0.84 1 1 0.7
## 4 1 4 1 1 2 0 1 1.21 2 2 0.68
## ... ... ... ... ... ... ... ... ... ... ... ...
## 3837 20 189 1 2 1 0 2 0.94 2 2 0.54
## 3838 20 190 1 2 1 0 2 0.75 1 1 0.48
## 3839 20 191 1 2 2 1 2 0.76 1 1 0.55
## 3840 20 192 1 2 1 0 2 0.75 2 2 0.61
length(unique(E1$SN))
## [1] 20
table(E1$vstmLoad, E1$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 2 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E1$Congruency, E1$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 0 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E1$Resp, E1$SN) # 7 = no resp
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 96 96 97 98 94 96 97 97 96 96 97 94 95 90 96 93 95 96 95
## 2 89 94 93 89 98 93 94 95 96 96 95 98 95 102 92 97 96 96 95
## 7 7 2 2 5 0 3 1 0 0 0 0 0 2 0 4 2 1 0 2
##
## 20
## 1 94
## 2 97
## 7 1
table(E1$vstmResp, E1$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 113 84 99 114 89 111 109 111 102 87 88 106 97 99 96 106 97 99 108
## 2 78 103 93 77 103 79 83 81 89 104 103 86 95 92 95 86 93 92 82
## 7 1 5 0 1 0 2 0 0 1 1 1 0 0 1 1 0 2 1 2
##
## 20
## 1 100
## 2 90
## 7 2
$SN <- factor(E1$SN)
E1$vstmLoad <- factor(E1$vstmLoad, levels=c(1,2), labels=c("Low","High"))
E1$Congruency <- factor(E1$Congruency, levels=c(0,1), labels=c("Incongruent","Congruent"))
E1$Corr <- ifelse(E1$Targ==E1$Resp,1,0)
E1$vstmCorr <- ifelse(E1$vstmCond==E1$vstmResp,1,0)
E1glimpse(E1, width=70)
## Rows: 3,840
## Columns: 13
## $ SN <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Trial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15…
## $ vstmLoad <fct> Low, High, Low, Low, Low, High, Low, Low, Low, Lo…
## $ Targ <int> 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 2…
## $ Flnk <int> 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1…
## $ Congruency <fct> Congruent, Incongruent, Incongruent, Incongruent,…
## $ Resp <int> 1, 1, 2, 1, 1, 7, 1, 1, 1, 1, 7, 1, 2, 2, 2, 2, 2…
## $ RT <dbl> 1.1466, 1.3619, 0.8450, 1.2057, 1.0779, 7.0000, 0…
## $ vstmCond <int> 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1…
## $ vstmResp <int> 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1…
## $ vstmRT <dbl> 1.1304, 1.2176, 0.7007, 0.6774, 0.6777, 1.2781, 0…
## $ Corr <dbl> 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1…
## $ vstmCorr <dbl> 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1…
table(E1$Corr, E1$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 15 14 5 7 2 7 7 5 0 6 5 6 8 10 8 8 4 0 6
## 1 177 178 187 185 190 185 185 187 192 186 187 186 184 182 184 184 188 192 186
##
## 20
## 0 4
## 1 188
table(E1$vstmCorr, E1$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 31 59 27 41 7 33 29 37 11 32 17 18 25 25 13 36 26 18 40
## 1 161 133 165 151 185 159 163 155 181 160 175 174 167 167 179 156 166 174 152
##
## 20
## 0 10
## 1 182
# Exp2: distractor = ., blocked, 1 vs. 4
<- read.csv("data/data_vstmAS2.csv", header = T)
E2 headTail(E2)
## SN Trial Block vstmLoad Targ Flnk TargPos FlnkPos Congruency Resp RT
## 1 1 1 1 1 2 1 3 2 0 2 0.64
## 2 1 2 1 1 1 2 6 2 0 1 0.7
## 3 1 3 1 1 1 1 5 1 1 1 0.55
## 4 1 4 1 1 2 1 2 2 0 2 0.62
## ... ... ... ... ... ... ... ... ... ... ... ...
## 3837 20 189 4 2 1 2 6 2 0 7 7
## 3838 20 190 4 2 1 2 6 1 0 1 0.75
## 3839 20 191 4 2 2 1 3 1 0 2 0.74
## 3840 20 192 4 2 2 2 6 1 1 2 0.65
## vstmCond vstmResp vstmRT
## 1 1 1 0.62
## 2 2 2 0.62
## 3 1 1 0.6
## 4 2 2 0.8
## ... ... ... ...
## 3837 1 1 1.65
## 3838 2 2 0.73
## 3839 2 2 0.73
## 3840 1 2 0.95
length(unique(E2$SN))
## [1] 20
table(E2$Block, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 2 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 3 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 4 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
table(E2$vstmLoad, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 2 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E2$Congruency, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 0 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E2$Resp, E2$SN) # 7 = no resp
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 97 112 98 92 92 95 98 97 99 98 99 97 84 96 92 97 95 98 99
## 2 93 75 94 100 99 97 92 95 93 94 91 93 93 96 100 89 97 94 93
## 7 2 5 0 0 1 0 2 0 0 0 2 2 15 0 0 6 0 0 0
##
## 20
## 1 85
## 2 101
## 7 6
table(E2$vstmResp, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 109 84 104 101 103 95 105 108 101 109 102 103 95 109 98 90 87 89 101
## 2 79 105 88 89 88 96 86 83 91 83 90 87 91 82 93 102 102 103 91
## 7 4 3 0 2 1 1 1 1 0 0 0 2 6 1 1 0 3 0 0
##
## 20
## 1 95
## 2 94
## 7 3
$SN <- factor(E2$SN)
E2$vstmLoad <- factor(E2$vstmLoad, levels=c(1,2), labels=c("Low","High"))
E2$Congruency <- factor(E2$Congruency, levels=c(0,1), labels=c("Incongruent","Congruent"))
E2$Corr <- ifelse(E2$Targ==E2$Resp,1,0)
E2$vstmCorr <- ifelse(E2$vstmCond==E2$vstmResp,1,0)
E2glimpse(E2, width=70)
## Rows: 3,840
## Columns: 16
## $ SN <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Trial <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15…
## $ Block <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ vstmLoad <fct> Low, Low, Low, Low, Low, Low, Low, Low, Low, Low,…
## $ Targ <int> 2, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2…
## $ Flnk <int> 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 2, 2…
## $ TargPos <int> 3, 6, 5, 2, 1, 5, 6, 6, 5, 1, 2, 2, 6, 6, 2, 4, 1…
## $ FlnkPos <int> 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2…
## $ Congruency <fct> Incongruent, Incongruent, Congruent, Incongruent,…
## $ Resp <int> 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 7, 1, 2…
## $ RT <dbl> 0.6373, 0.6963, 0.5516, 0.6224, 0.7491, 0.7324, 0…
## $ vstmCond <int> 1, 2, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2…
## $ vstmResp <int> 1, 2, 1, 2, 2, 7, 2, 2, 1, 1, 2, 2, 1, 1, 7, 1, 2…
## $ vstmRT <dbl> 0.6211, 0.6161, 0.5994, 0.7982, 0.6049, 7.0000, 0…
## $ Corr <dbl> 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1…
## $ vstmCorr <dbl> 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1…
table(E2$Corr, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 6 30 2 6 14 3 10 7 5 4 7 7 28 4 4 12 1 6 5
## 1 186 162 190 186 178 189 182 185 187 188 185 185 164 188 188 180 191 186 187
##
## 20
## 0 19
## 1 173
table(E2$vstmCorr, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 34 70 28 35 19 15 31 22 21 29 24 42 47 31 34 14 26 23 15
## 1 158 122 164 157 173 177 161 170 171 163 168 150 145 161 158 178 166 169 177
##
## 20
## 0 33
## 1 159
table(E2$TargPos, E2$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 2 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 3 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 4 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 5 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 6 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
# Exp3: distractor = ., blocked, 0 vs. 3
<- read.csv("data/data_vstmAS3.csv", header = T)
E3 headTail(E3)
## SN Trial Block vstmLoad Targ Flnk TargPos FlnkPos Congruency Resp RT
## 1 1 1 1 1 2 2 4 1 1 7 7
## 2 1 2 1 1 2 1 2 2 0 2 1.08
## 3 1 3 1 1 2 1 5 1 0 2 1.03
## 4 1 4 1 1 1 1 5 2 1 1 0.83
## ... ... ... ... ... ... ... ... ... ... ... ...
## 3837 20 189 4 2 1 2 4 1 0 1 1.01
## 3838 20 190 4 2 1 1 1 2 1 1 0.57
## 3839 20 191 4 2 1 2 3 1 0 1 0.82
## 3840 20 192 4 2 1 1 5 2 1 1 0.57
## vstmCond vstmResp vstmRT
## 1 1 7 7
## 2 1 7 7
## 3 1 7 7
## 4 1 7 7
## ... ... ... ...
## 3837 1 1 0.55
## 3838 2 2 0.62
## 3839 2 2 0.62
## 3840 1 1 0.74
length(unique(E3$SN))
## [1] 20
table(E3$Block, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 2 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 3 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 4 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
table(E3$vstmLoad, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 2 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E3$Congruency, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 0 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
## 1 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96
table(E3$Resp, E3$SN) # 7 = no resp
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 97 98 99 90 101 99 98 99 90 95 100 94 96 92 98 91 91 110 96
## 2 94 93 93 99 91 88 93 90 102 96 92 98 96 97 94 101 100 82 96
## 7 1 1 0 3 0 5 1 3 0 1 0 0 0 3 0 0 1 0 0
##
## 20
## 1 97
## 2 95
## 7 0
table(E3$vstmResp[E3$vstmLoad==2], E3$SN[E3$vstmLoad==2])
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 51 49 55 57 57 41 50 45 47 55 49 52 53 44 49 35 55 57 46 46
## 2 45 47 41 39 39 51 46 50 48 38 47 44 43 52 46 60 41 39 50 50
## 7 0 0 0 0 0 4 0 1 1 3 0 0 0 0 1 1 0 0 0 0
$SN <- factor(E3$SN)
E3$vstmLoad <- factor(E3$vstmLoad, levels=c(1,2), labels=c("Low","High"))
E3$Congruency <- factor(E3$Congruency, levels=c(0,1), labels=c("Incongruent","Congruent"))
E3$Corr <- ifelse(E3$Targ==E3$Resp,1,0)
E3$vstmCorr <- ifelse(E3$vstmLoad=="Low",1,ifelse(E3$vstmCond==E3$vstmResp,1,0))
E3
table(E3$Corr, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 10 22 3 18 5 18 4 7 6 7 18 8 10 13 6 9 25 30 4
## 1 182 170 189 174 187 174 188 185 186 185 174 184 182 179 186 183 167 162 188
##
## 20
## 0 1
## 1 191
table(E3$vstmCorr, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 13 19 13 23 15 24 18 22 17 18 15 16 11 18 14 34 11 31 8
## 1 179 173 179 169 177 168 174 170 175 174 177 176 181 174 178 158 181 161 184
##
## 20
## 0 4
## 1 188
table(E3$TargPos, E3$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 2 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 3 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 4 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 5 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
## 6 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
# Exp4: perceptual load
<- read.csv("data/data_vstmAS4.csv", header = T)
E4 headTail(E4)
## SN Trial Block PercLoad Targ Flnk TargPos FlnkPos Congruency Resp RT
## 1 1 1 1 1 2 2 2 2 1 7 7
## 2 1 2 1 1 2 2 4 2 1 2 0.64
## 3 1 3 1 1 2 1 6 1 0 1 0.47
## 4 1 4 1 1 2 1 3 2 0 2 0.78
## ... ... ... ... ... ... ... ... ... ... ... ...
## 8061 21 381 8 2 1 1 2 1 1 1 0.84
## 8062 21 382 8 2 2 2 2 2 1 2 0.79
## 8063 21 383 8 2 2 1 4 1 0 2 0.82
## 8064 21 384 8 2 1 2 6 1 0 1 0.79
length(unique(E4$SN))
## [1] 21
table(E4$Block, E4$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
## 1 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 2 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 3 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 4 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 5 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 6 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 7 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 8 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
table(E4$PercLoad, E4$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 2 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20 21
## 1 192 192
## 2 192 192
table(E4$Congruency, E4$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20 21
## 0 192 192
## 1 192 192
table(E4$Resp, E4$SN) # 7 = no resp
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 183 198 196 191 191 198 193 192 192 194 202 197 191 198 176 190 194 192 197
## 2 190 186 188 193 191 185 190 191 190 189 182 186 193 186 208 191 189 192 187
## 7 11 0 0 0 2 1 1 1 2 1 0 1 0 0 0 3 1 0 0
##
## 20 21
## 1 199 196
## 2 185 188
## 7 0 0
$SN <- factor(E4$SN)
E4$PercLoad <- factor(E4$PercLoad, levels=c(1,2), labels=c("Low","High"))
E4$Congruency <- factor(E4$Congruency, levels=c(0,1), labels=c("Incongruent","Congruent"))
E4$Corr <- ifelse(E4$Targ==E4$Resp,1,0)
E4
table(E4$Corr, E4$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 76 18 8 55 31 31 40 25 27 26 18 14 5 44 58 60 21 18 15
## 1 308 366 376 329 353 353 344 359 357 358 366 370 379 340 326 324 363 366 369
##
## 20 21
## 0 21 14
## 1 363 370
# Exp5: overlap
<- read.csv("data/data_vstmAS5.csv", header = T)
E5 headTail(E5)
## SN Trial Block vstmLoad Overlap Targ Flnk TargPos FlnkPos Congruency Resp
## 1 1 1 1 1 0 2 2 2 2 1 2
## 2 1 2 1 1 0 2 2 4 2 1 2
## 3 1 3 1 1 1 2 1 6 1 0 2
## 4 1 4 1 1 0 2 1 3 2 0 1
## ... ... ... ... ... ... ... ... ... ... ... ...
## 7677 20 381 8 1 1 1 1 2 1 1 1
## 7678 20 382 8 1 1 2 1 5 2 0 2
## 7679 20 383 8 1 0 1 2 3 2 0 1
## 7680 20 384 8 1 0 1 1 4 2 1 1
## RT vstmPos vstmCond vstmResp vstmRT
## 1 0.52 1 2 2 0.44
## 2 0.51 1 2 2 0.69
## 3 0.5 1 1 1 0.74
## 4 0.56 1 1 2 1.04
## ... ... ... ... ... ...
## 7677 0.82 1 1 1 0.49
## 7678 0.75 2 2 2 0.48
## 7679 0.62 1 1 1 0.61
## 7680 0.63 1 1 1 0.49
table(E5$Block, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 1 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 2 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 3 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 4 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 5 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 6 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 7 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
## 8 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
table(E5$vstmLoad, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 2 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20
## 1 192
## 2 192
table(E5$Overlap, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20
## 0 192
## 1 192
table(E5$Congruency, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20
## 0 192
## 1 192
table(E5$vstmPos, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
## 2 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192 192
##
## 20
## 1 192
## 2 192
table(E5$Resp, E5$SN) # 7 = no resp
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 1 188 196 189 191 199 194 185 189 189 192 197 189 193 189 188 196 190 183 178
## 2 195 186 193 193 185 189 197 195 193 192 183 195 188 193 193 181 191 200 206
## 7 1 2 2 0 0 1 2 0 2 0 4 0 3 2 3 7 3 1 0
##
## 20
## 1 195
## 2 189
## 7 0
$SN <- factor(E5$SN)
E5$vstmLoad <- factor(E5$vstmLoad, levels=c(1,2), labels=c("Low","High"))
E5$Congruency <- factor(E5$Congruency, levels=c(0,1), labels=c("Incongruent","Congruent"))
E5$Overlap <- factor(E5$Overlap, levels=c(0,1), labels=c("NonOverlap","Overlap"))
E5$Corr <- ifelse(E5$Targ==E5$Resp,1,0)
E5$vstmCorr <- ifelse(E5$vstmCond==E5$vstmResp,1,0)
E5
table(E5$Corr, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 19 9 5 3 21 7 14 3 9 4 10 3 10 8 12 22 20 48 22
## 1 365 375 379 381 363 377 370 381 375 380 374 381 374 376 372 362 364 336 362
##
## 20
## 0 9
## 1 375
table(E5$vstmCorr, E5$SN)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## 0 70 64 57 62 41 93 60 58 46 52 78 90 90 63 82 69 73 62 57
## 1 314 320 327 322 343 291 324 326 338 332 306 294 294 321 302 315 311 322 327
##
## 20
## 0 52
## 1 332
VSTM low load
와 high load
조건의 기억항목은
각각 한 개와 네 개. 두 조건은 무작위 순서(interleaved).
ggdraw() + draw_image("fig_proc/procExp1.png")
%>% group_by(SN, vstmLoad) %>%
E1 summarise(acc = mean(vstmCorr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = "SN", names_from = "vstmLoad", values_from = "acc") %>%
mutate(Diff = Low - High) %>%
pivot_longer(cols = Low:Diff, names_to = "Load", values_to = "Accuracy") %>%
mutate(Load = factor(.$Load, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Load) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-2) %>%
kable(digits = 2, caption = "VSTM: Descriptive Stats")
Load | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|
Low | 20 | 92.71 | 5.22 | 94.27 | 6.51 | 2.44 |
High | 20 | 79.43 | 9.62 | 81.25 | 13.28 | 4.50 |
Diff | 20 | 13.28 | 8.05 | 12.50 | 11.72 | 3.77 |
<- E1 %>% group_by(SN, vstmLoad) %>% summarise(acc = mean(vstmCorr)*100) %>% ungroup()
v1 <- v1 %>% Rmisc::summarySEwithin(measurevar = 'acc', withinvars = 'vstmLoad', idvar = 'SN')
v1g
%>% ggplot(aes(x=vstmLoad, y=acc)) +
v1 geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_line(aes(group = SN), color="gray80") +
geom_errorbar(data=v1g, aes(x = vstmLoad, ymin = acc-ci, ymax = acc+ci),
position = position_dodge(0.8), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=v1g, aes(x = vstmLoad, y = acc),
position=position_dodge(0.8), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Change Detection Accuracy (%)") +
coord_cartesian(ylim = c(50, 100), clip = "on") +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% pairwise_t_test(acc ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
v1 kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
Low | High | 20 | 20 | 7.38 | 19 | 0 | 0 | **** |
%>% cohens_d(acc ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
v1 kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
Low | High | 1.65 | 20 | 20 | large |
Cowan’s K(Rouder et al., 2011, PBR).
<- E1 %>%
k1 group_by(SN, vstmLoad, vstmCond) %>% # vstmCond: change = 1 or not = 2
summarise(acc = mean(vstmCorr)) %>%
ungroup() %>%
mutate(vstmCond = ifelse(vstmCond==1, "different", "same")) %>%
pivot_wider(id_cols = c(SN, vstmLoad), names_from = vstmCond, values_from = acc) %>%
mutate(SS = ifelse(vstmLoad=="Low", 1, 4),
K = SS * (same - (1 - different))) %>%
select(SN, vstmLoad, K)
%>% pivot_wider(id_cols = SN, names_from = vstmLoad, values_from = K) %>%
k1 mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "K") %>%
mutate(vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"))) %>%
group_by(vstmLoad) %>%
get_summary_stats(K, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-2) %>%
kable(digits = 2, caption = "K: Descriptive Stats")
vstmLoad | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|
Low | 20 | 0.85 | 0.10 | 0.88 | 0.13 | 0.05 |
High | 20 | 2.35 | 0.77 | 2.50 | 1.06 | 0.36 |
Diff | 20 | 1.50 | 0.72 | 1.71 | 0.88 | 0.34 |
%>% mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
k1 pairwise_t_test(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
High | Low | 20 | 20 | 9.35 | 19 | 0 | 0 | **** |
%>% mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
k1 cohens_d(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
High | Low | 2.09 | 20 | 20 | large |
%>% group_by(SN, vstmLoad, Congruency) %>%
E1 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "err") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker % Error: Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 3.02 | 2.48 | 2.08 | 2.60 | 1.16 |
Low | Incongruent | 20 | 3.65 | 3.09 | 2.08 | 2.60 | 1.45 |
Low | Diff | 20 | 0.62 | 4.39 | 0.00 | 4.69 | 2.05 |
High | Congruent | 20 | 3.75 | 3.42 | 4.17 | 3.12 | 1.60 |
High | Incongruent | 20 | 2.81 | 2.81 | 2.08 | 4.17 | 1.31 |
High | Diff | 20 | -0.94 | 3.13 | -1.04 | 2.08 | 1.47 |
%>% group_by(SN, Congruency, vstmLoad) %>%
E1 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "err") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low Error 20 3.02 2.48 2.08 2.60 1.16
## 2 Congruent High Error 20 3.75 3.42 4.17 3.12 1.60
## 3 Congruent Diff Error 20 0.729 3.84 0 6.25 1.80
## 4 Incongruent Low Error 20 3.65 3.09 2.08 2.60 1.44
## 5 Incongruent High Error 20 2.81 2.81 2.08 4.17 1.32
## 6 Incongruent Diff Error 20 -0.833 2.74 0 2.08 1.28
<- E1 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(err = 100 - mean(Corr)*100) %>% ungroup()
e1 <- e1 %>% Rmisc::summarySEwithin(measurevar = "err", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
e1g
%>% ggplot(aes(x=vstmLoad, y=err, fill=Congruency)) +
e1 geom_violin(width = 0.7, trim=TRUE) +
::geom_quasirandom(dodge.width = 0.7, color = "gray80", size = 3, alpha = 0.4, show.legend = FALSE) +
ggbeeswarmgeom_errorbar(data=e1g, aes(x = vstmLoad, ymin = err-ci, ymax = err+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=e1g, aes(x = vstmLoad, y = err),
position=position_dodge(0.7), size=5, color = "darkred", show.legend = FALSE) +
coord_cartesian(ylim = c(0, 50), clip = "on") +
labs(x = "VSTM Load", y = "% Error", fill="Congruency") +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = err, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
e1 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 0.01 | 0.92 | 0.0 | |
Congruency | 1 | 19 | 0.06 | 0.81 | 0.0 | |
vstmLoad:Congruency | 1 | 19 | 2.06 | 0.17 | 0.1 |
# arcsine transformation
%>% group_by(SN, vstmLoad, Congruency) %>%
E1 summarise(acc = asin(sqrt(mean(Corr)))) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "acc") %>%
mutate(Diff = Congruent - Incongruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Accuracy") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## vstmLoad Congruency variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Low Congruent Accuracy 20 1.42 0.097 1.43 0.097 0.046
## 2 Low Incongruent Accuracy 20 1.40 0.096 1.43 0.073 0.045
## 3 Low Diff Accuracy 20 0.022 0.134 0 0.206 0.063
## 4 High Congruent Accuracy 20 1.41 0.111 1.36 0.109 0.052
## 5 High Incongruent Accuracy 20 1.44 0.103 1.43 0.206 0.048
## 6 High Diff Accuracy 20 -0.027 0.109 -0.024 0.078 0.051
<- E1 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(acc = asin(sqrt(mean(Corr)))) %>% ungroup()
s1 %>% anova_test(dv = acc, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes")
s1 ## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 vstmLoad 1 19 0.263 0.614 0.014000
## 2 Congruency 1 19 0.015 0.903 0.000808
## 3 vstmLoad:Congruency 1 19 1.919 0.182 0.092000
# filtering out incorrect trials
<- E1 %>% filter(Corr==1 & vstmCorr==1) %>% mutate(RT = RT*1000)
cE1
# trimming
<- cE1 %>% filter(RT > 200) %>%
tE1 group_by(SN) %>%
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-xcut*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+xcut*sd(.$RT))) %>%
unnest(c(lbound, ubound)) %>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>%
filter(Outlier == FALSE) %>%
%>%
ungroup select(SN, vstmLoad, Congruency, RT)
# percentage trimmed.
100*(nrow(cE1)-nrow(tE1))/nrow(E1)
## [1] 3.723958
%>% group_by(SN, vstmLoad, Congruency) %>%
tE1 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"),
labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 733.07 | 88.19 | 714.63 | 106.37 | 41.27 |
Low | Incongruent | 20 | 757.09 | 99.16 | 723.51 | 101.70 | 46.41 |
Low | Diff | 20 | 24.02 | 31.57 | 18.11 | 27.14 | 14.77 |
High | Congruent | 20 | 734.43 | 83.90 | 732.76 | 85.90 | 39.27 |
High | Incongruent | 20 | 753.01 | 91.11 | 738.34 | 85.08 | 42.64 |
High | Diff | 20 | 18.58 | 30.38 | 14.64 | 40.39 | 14.22 |
%>% group_by(SN, Congruency, vstmLoad) %>%
tE1 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "rt") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low RT 20 733. 88.2 715. 106. 41.3
## 2 Congruent High RT 20 734. 83.9 733. 85.9 39.3
## 3 Congruent Diff RT 20 1.36 26.3 2.13 25.8 12.3
## 4 Incongruent Low RT 20 757. 99.2 724. 102. 46.4
## 5 Incongruent High RT 20 753. 91.1 738. 85.1 42.6
## 6 Incongruent Diff RT 20 -4.08 30.3 -7.48 45.3 14.2
<- tE1 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(RT = mean(RT)) %>% ungroup()
r1 <- r1 %>% unite("temp", c("vstmLoad", "Congruency")) %>%
r1w pivot_wider(id_cols = SN, names_from = temp, values_from = RT)
<- r1 %>% Rmisc::summarySEwithin(measurevar = "RT", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
r1g
<- ggplot() +
F1 geom_bar(data=r1g, aes(x=vstmLoad, y=RT, fill=Congruency),
stat="identity", width=0.7, color="black", position=position_dodge(.8)) +
geom_linerange(data=r1g, aes(x=vstmLoad, ymin=RT-ci, ymax=RT+ci, group=Congruency),
linewidth=1, position=position_dodge(0.8)) +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
geom_point(data=r1, aes(x=vstmLoad, y=RT, group=Congruency),
position=position_dodge(0.6), color="gray80", size=1.8) +
geom_segment(data=r1w, aes(x=1-.15, y=Low_Incongruent, xend=1+.15, yend=Low_Congruent), color="gray80") +
geom_segment(data=r1w, aes(x=2-.15, y=High_Incongruent, xend=2+.15, yend=High_Congruent), color="gray80") +
labs(x = "VSTM Load", y = "Response Time (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(500, 1000), clip = "on") +
theme_bw(base_size = 18) +
theme(legend.position="top",
legend.spacing.x = unit(0.5, 'lines'),
legend.margin = margin(0, 0, 0, 0),
legend.title = element_blank(),
legend.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
<- tE1 %>% group_by(SN, vstmLoad, Congruency) %>%
r1ce summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, vstmLoad, Diff)
<- r1ce %>% pivot_wider(id_cols = SN, names_from = vstmLoad, values_from = Diff)
r1cew <- r1ce %>% Rmisc::summarySEwithin(measurevar = "Diff", withinvars = "vstmLoad", idvar = "SN")
r1ceg
<- ggplot(r1ce, aes(x=vstmLoad, y=Diff)) +
G1 geom_hline(yintercept = 0) +
geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_segment(data=r1cew, color="gray80", aes(x=1, y=Low, xend=2, yend=High)) +
geom_errorbar(data=r1ceg, aes(x = vstmLoad, ymin = Diff-ci, ymax = Diff+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=r1ceg, aes(x = vstmLoad, y = Diff),
position=position_dodge(0.7), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Congruency Effect (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(-60, 120), clip = "on") +
scale_y_continuous(breaks=seq(-60, 120, by = 30)) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
+ G1 + plot_layout(nrow = 1, widths = c(2, 1.2)) F1
%>% anova_test(dv = RT, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
r1 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 0.07 | 0.80 | 0.00 | |
Congruency | 1 | 19 | 13.03 | 0.00 | * | 0.41 |
vstmLoad:Congruency | 1 | 19 | 0.56 | 0.46 | 0.03 |
VSTM low load
와 high load
조건의 기억항목은
각각 한 개와 네 개. 두 조건은 구획으로 분리(blocked).
ggdraw() + draw_image("fig_proc/procExp2.png")
%>% group_by(SN, vstmLoad) %>%
E2 summarise(acc = mean(vstmCorr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = "SN", names_from = "vstmLoad", values_from = "acc") %>%
mutate(Diff = Low - High) %>%
pivot_longer(cols = Low:Diff, names_to = "Load", values_to = "Accuracy") %>%
mutate(Load = factor(.$Load, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Load) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-2) %>%
kable(digits = 2, caption = "VSTM: Descriptive Stats")
Load | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|
Low | 20 | 93.33 | 7.78 | 95.31 | 4.43 | 3.64 |
High | 20 | 75.78 | 8.32 | 75.52 | 7.81 | 3.89 |
Diff | 20 | 17.55 | 8.84 | 17.19 | 9.63 | 4.14 |
<- E2 %>% group_by(SN, vstmLoad) %>% summarise(acc = mean(vstmCorr)*100) %>% ungroup()
v2 <- v2 %>% Rmisc::summarySEwithin(measurevar = 'acc', withinvars = 'vstmLoad', idvar = 'SN')
v2g
%>% ggplot(aes(x=vstmLoad, y=acc)) +
v2 geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_line(aes(group = SN), color="gray80") +
geom_errorbar(data=v2g, aes(x = vstmLoad, ymin = acc-ci, ymax = acc+ci),
position = position_dodge(0.8), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=v2g, aes(x = vstmLoad, y = acc),
position=position_dodge(0.8), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Change Detection Accuracy (%)") +
coord_cartesian(ylim = c(50, 100), clip = "on") +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% pairwise_t_test(acc ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
v2 kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
Low | High | 20 | 20 | 8.88 | 19 | 0 | 0 | **** |
%>% cohens_d(acc ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
v2 kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
Low | High | 1.99 | 20 | 20 | large |
<- E2 %>%
k2 group_by(SN, vstmLoad, vstmCond) %>% # vstmCond: change = 1 or not = 2
summarise(acc = mean(vstmCorr)) %>%
ungroup() %>%
mutate(vstmCond = ifelse(vstmCond==1, "different", "same")) %>%
pivot_wider(id_cols = c(SN, vstmLoad), names_from = vstmCond, values_from = acc) %>%
mutate(SS = ifelse(vstmLoad=="Low", 1, 4),
K = SS * (same - (1 - different))) %>%
select(SN, vstmLoad, K)
%>% pivot_wider(id_cols = SN, names_from = vstmLoad, values_from = K) %>%
k2 mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "K") %>%
mutate(vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"))) %>%
group_by(vstmLoad) %>%
get_summary_stats(K, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-2) %>%
kable(digits = 2, caption = "K: Descriptive Stats")
vstmLoad | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|
Low | 20 | 0.87 | 0.16 | 0.91 | 0.09 | 0.07 |
High | 20 | 2.06 | 0.67 | 2.04 | 0.62 | 0.31 |
Diff | 20 | 1.20 | 0.62 | 1.26 | 0.60 | 0.29 |
%>% mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
k2 pairwise_t_test(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
High | Low | 20 | 20 | 8.62 | 19 | 0 | 0 | **** |
%>% mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
k2 cohens_d(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
High | Low | 1.93 | 20 | 20 | large |
%>% group_by(SN, vstmLoad, Congruency) %>%
E2 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "err") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker % Error: Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 3.75 | 3.35 | 4.17 | 2.08 | 1.57 |
Low | Incongruent | 20 | 6.04 | 8.36 | 2.08 | 5.21 | 3.91 |
Low | Diff | 20 | 2.29 | 6.30 | 0.00 | 2.60 | 2.95 |
High | Congruent | 20 | 3.33 | 2.65 | 2.08 | 2.08 | 1.24 |
High | Incongruent | 20 | 5.62 | 5.82 | 5.21 | 4.69 | 2.72 |
High | Diff | 20 | 2.29 | 5.65 | 1.04 | 2.60 | 2.64 |
%>% group_by(SN, Congruency, vstmLoad) %>%
E2 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "err") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low Error 20 3.75 3.35 4.17 2.08 1.57
## 2 Congruent High Error 20 3.33 2.65 2.08 2.08 1.24
## 3 Congruent Diff Error 20 -0.417 2.75 0 2.60 1.29
## 4 Incongruent Low Error 20 6.04 8.36 2.08 5.21 3.91
## 5 Incongruent High Error 20 5.62 5.82 5.21 4.69 2.72
## 6 Incongruent Diff Error 20 -0.417 6.22 1.04 4.69 2.91
<- E2 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(err = 100 - mean(Corr)*100) %>% ungroup()
e2 <- e2 %>% Rmisc::summarySEwithin(measurevar = "err", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
e2g
%>% ggplot(aes(x=vstmLoad, y=err, fill=Congruency)) +
e2 geom_violin(width = 0.7, trim=TRUE) +
::geom_quasirandom(dodge.width = 0.7, color = "gray80", size = 3, alpha = 0.4, show.legend = FALSE) +
ggbeeswarmgeom_errorbar(data=e2g, aes(x = vstmLoad, ymin = err-ci, ymax = err+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=e2g, aes(x = vstmLoad, y = err),
position=position_dodge(0.7), size=5, color = "darkred", show.legend = FALSE) +
coord_cartesian(ylim = c(0, 50), clip = "on") +
labs(x = "VSTM Load", y = "% Error", fill="Congruency") +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = err, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
e2 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 0.22 | 0.64 | 0.01 | |
Congruency | 1 | 19 | 3.68 | 0.07 | 0.16 | |
vstmLoad:Congruency | 1 | 19 | 0.00 | 1.00 | 0.00 |
# arcsine transformation
%>% group_by(SN, vstmLoad, Congruency) %>%
E2 summarise(acc = asin(sqrt(mean(Corr)))) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "acc") %>%
mutate(Diff = Congruent - Incongruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Accuracy") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## vstmLoad Congruency variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Low Congruent Accuracy 20 1.40 0.103 1.36 0.061 0.048
## 2 Low Incongruent Accuracy 20 1.38 0.17 1.43 0.154 0.079
## 3 Low Diff Accuracy 20 0.024 0.13 0 0.14 0.061
## 4 High Congruent Accuracy 20 1.41 0.088 1.43 0.061 0.041
## 5 High Incongruent Accuracy 20 1.36 0.126 1.34 0.118 0.059
## 6 High Diff Accuracy 20 0.046 0.136 0.02 0.117 0.064
<- E2 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(acc = asin(sqrt(mean(Corr)))) %>% ungroup()
s2 %>% anova_test(dv = acc, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes")
s2 ## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 vstmLoad 1 19 0.067 0.798 0.004
## 2 Congruency 1 19 1.849 0.190 0.089
## 3 vstmLoad:Congruency 1 19 0.497 0.489 0.025
# filtering out incorrect trials
<- E2 %>% filter(Corr==1 & vstmCorr==1) %>% mutate(RT = RT*1000)
cE2
# trimming
<- cE2 %>% filter(RT > 200) %>%
tE2 group_by(SN) %>%
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-xcut*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+xcut*sd(.$RT))) %>%
unnest(c(lbound, ubound)) %>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>%
filter(Outlier == FALSE) %>%
%>%
ungroup select(SN, vstmLoad, Congruency, RT)
# percentage trimmed.
100*(nrow(cE2)-nrow(tE2))/nrow(E2)
## [1] 4.0625
%>% group_by(SN, vstmLoad, Congruency) %>%
tE2 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"),
labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 739.74 | 100.10 | 747.25 | 145.65 | 46.85 |
Low | Incongruent | 20 | 783.89 | 98.74 | 797.79 | 137.32 | 46.21 |
Low | Diff | 20 | 44.15 | 29.08 | 39.71 | 39.24 | 13.61 |
High | Congruent | 20 | 717.22 | 68.59 | 725.75 | 80.51 | 32.10 |
High | Incongruent | 20 | 769.28 | 76.11 | 767.23 | 108.04 | 35.62 |
High | Diff | 20 | 52.05 | 34.35 | 49.17 | 37.14 | 16.08 |
%>% group_by(SN, Congruency, vstmLoad) %>%
tE2 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "rt") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low RT 20 740. 100. 747. 146. 46.8
## 2 Congruent High RT 20 717. 68.6 726. 80.5 32.1
## 3 Congruent Diff RT 20 -22.5 70.9 -19.5 57.8 33.2
## 4 Incongruent Low RT 20 784. 98.7 798. 137. 46.2
## 5 Incongruent High RT 20 769. 76.1 767. 108. 35.6
## 6 Incongruent Diff RT 20 -14.6 59.9 -5.54 92.2 28.0
<- tE2 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(RT = mean(RT)) %>% ungroup()
r2 <- r2 %>% unite("temp", c("vstmLoad", "Congruency")) %>%
r2w pivot_wider(id_cols = SN, names_from = temp, values_from = RT)
<- r2 %>% Rmisc::summarySEwithin(measurevar = "RT", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
r2g
<- ggplot() +
F2 geom_bar(data=r2g, aes(x=vstmLoad, y=RT, fill=Congruency),
stat="identity", width=0.7, color="black", position=position_dodge(.8)) +
geom_linerange(data=r2g, aes(x=vstmLoad, ymin=RT-ci, ymax=RT+ci, group=Congruency),
linewidth=1, position=position_dodge(0.8)) +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
geom_point(data=r2, aes(x=vstmLoad, y=RT, group=Congruency),
position=position_dodge(0.6), color="gray80", size=1.8) +
geom_segment(data=r2w, aes(x=1-.15, y=Low_Incongruent, xend=1+.15, yend=Low_Congruent), color="gray80") +
geom_segment(data=r2w, aes(x=2-.15, y=High_Incongruent, xend=2+.15, yend=High_Congruent), color="gray80") +
labs(x = "VSTM Load", y = "Response Time (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(500, 1000), clip = "on") +
theme_bw(base_size = 18) +
theme(legend.position="top",
legend.spacing.x = unit(0.5, 'lines'),
legend.margin = margin(0, 0, 0, 0),
legend.title = element_blank(),
legend.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
<- tE2 %>% group_by(SN, vstmLoad, Congruency) %>%
r2ce summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, vstmLoad, Diff)
<- r2ce %>% pivot_wider(id_cols = SN, names_from = vstmLoad, values_from = Diff)
r2cew <- r2ce %>% Rmisc::summarySEwithin(measurevar = "Diff", withinvars = "vstmLoad", idvar = "SN")
r2ceg
<- ggplot(r2ce, aes(x=vstmLoad, y=Diff)) +
G2 geom_hline(yintercept = 0) +
geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_segment(data=r2cew, color="gray80", aes(x=1, y=Low, xend=2, yend=High)) +
geom_errorbar(data=r2ceg, aes(x = vstmLoad, ymin = Diff-ci, ymax = Diff+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=r2ceg, aes(x = vstmLoad, y = Diff),
position=position_dodge(0.7), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Congruency Effect (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(-20, 160), clip = "on") +
scale_y_continuous(breaks=c(-20, 0, 40, 80, 120, 160)) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
+ G2 + plot_layout(nrow = 1, widths = c(2, 1.2)) F2
%>% anova_test(dv = RT, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
r2 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 1.81 | 0.20 | 0.09 | |
Congruency | 1 | 19 | 88.58 | 0.00 | * | 0.82 |
vstmLoad:Congruency | 1 | 19 | 0.64 | 0.44 | 0.03 |
VSTM low load
조건은 기억항목 없이 플랭커 과제만 제시,
high load
조건은 기억항목 세 개. 두 조건은 구획으로
분리됨(blocked).
ggdraw() + draw_image("fig_proc/procExp3.png")
%>% filter(vstmLoad == "High") %>%
E3 group_by(SN) %>%
summarise(acc = mean(vstmCorr)*100) %>%
ungroup() %>%
get_summary_stats(acc, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-1) %>%
kable(digits = 2, caption = "VSTM: Descriptive Stats")
n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|
20 | 82.08 | 7.46 | 82.81 | 7.03 | 3.49 |
<- E3 %>% filter(vstmLoad == "High") %>% group_by(SN) %>% summarise(acc = mean(vstmCorr)*100) %>% ungroup()
v3
ggplot(data=v3, aes(x=1, y=acc)) +
geom_violin(width = 1, trim = TRUE) +
::geom_quasirandom(dodge.width = 0.7, color = "blue", size = 3, alpha = 0.2, show.legend = FALSE) +
ggbeeswarmstat_summary(fun.data = "mean_cl_normal", color = "darkred", size = 1) +
coord_flip(ylim = c(50, 100), clip = "on") +
labs(y = "Change Detection Accuracy (%)") +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.title.y = element_blank(),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
aspect.ratio = .3)
<- E3 %>%
k3 filter(vstmLoad == "High") %>%
group_by(SN, vstmLoad, vstmCond) %>% # vstmCond: change = 1 or not = 2
summarise(acc = mean(vstmCorr)) %>%
ungroup() %>%
mutate(vstmCond = ifelse(vstmCond==1, "different", "same")) %>%
pivot_wider(id_cols = c(SN, vstmLoad), names_from = vstmCond, values_from = acc) %>%
mutate(SS = 3,
K = SS * (same - (1 - different))) %>%
select(SN, vstmLoad, K)
%>% group_by(vstmLoad) %>%
k3 get_summary_stats(K, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-2) %>%
kable(digits = 2, caption = "K: Descriptive Stats")
vstmLoad | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|
High | 20 | 1.93 | 0.45 | 1.97 | 0.42 | 0.21 |
%>% group_by(SN, vstmLoad, Congruency) %>%
E3 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "err") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker % Error: Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 3.96 | 4.05 | 3.12 | 4.69 | 1.90 |
Low | Incongruent | 20 | 4.90 | 5.71 | 2.08 | 4.17 | 2.67 |
Low | Diff | 20 | 0.94 | 4.25 | 1.04 | 4.69 | 1.99 |
High | Congruent | 20 | 6.04 | 5.10 | 5.21 | 6.25 | 2.39 |
High | Incongruent | 20 | 8.44 | 6.18 | 6.25 | 8.85 | 2.89 |
High | Diff | 20 | 2.40 | 5.03 | 2.08 | 7.29 | 2.35 |
%>% group_by(SN, Congruency, vstmLoad) %>%
E3 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "err") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low Error 20 3.96 4.05 3.12 4.69 1.90
## 2 Congruent High Error 20 6.04 5.10 5.21 6.25 2.39
## 3 Congruent Diff Error 20 2.08 5.36 1.04 3.12 2.51
## 4 Incongruent Low Error 20 4.90 5.71 2.08 4.17 2.67
## 5 Incongruent High Error 20 8.44 6.18 6.25 8.85 2.89
## 6 Incongruent Diff Error 20 3.54 5.45 2.08 6.77 2.55
<- E3 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(err = 100 - mean(Corr)*100) %>% ungroup()
e3 <- e3 %>% Rmisc::summarySEwithin(measurevar = "err", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
e3g
%>% ggplot(aes(x=vstmLoad, y=err, fill=Congruency)) +
e3 geom_violin(width = 0.7, trim=TRUE) +
::geom_quasirandom(dodge.width = 0.7, color = "gray80", size = 3, alpha = 0.4, show.legend = FALSE) +
ggbeeswarmgeom_errorbar(data=e3g, aes(x = vstmLoad, ymin = err-ci, ymax = err+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=e3g, aes(x = vstmLoad, y = err),
position=position_dodge(0.7), size=5, color = "darkred", show.legend = FALSE) +
coord_cartesian(ylim = c(0, 50), clip = "on") +
labs(x = "VSTM Load", y = "% Error", fill="Congruency") +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = err, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
e3 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 7.32 | 0.01 | * | 0.28 |
Congruency | 1 | 19 | 3.97 | 0.06 | 0.17 | |
vstmLoad:Congruency | 1 | 19 | 1.39 | 0.25 | 0.07 |
# arcsine transformation
%>% group_by(SN, vstmLoad, Congruency) %>%
E3 summarise(acc = asin(sqrt(mean(Corr)))) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "acc") %>%
mutate(Diff = Congruent - Incongruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Accuracy") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## vstmLoad Congruency variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Low Congruent Accuracy 20 1.41 0.126 1.40 0.217 0.059
## 2 Low Incongruent Accuracy 20 1.38 0.127 1.43 0.108 0.06
## 3 Low Diff Accuracy 20 0.028 0.132 0.016 0.2 0.062
## 4 High Congruent Accuracy 20 1.35 0.118 1.34 0.148 0.055
## 5 High Incongruent Accuracy 20 1.30 0.122 1.32 0.163 0.057
## 6 High Diff Accuracy 20 0.05 0.108 0.047 0.185 0.051
<- E3 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(acc = asin(sqrt(mean(Corr)))) %>% ungroup()
s3 %>% anova_test(dv = acc, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes")
s3 ## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 vstmLoad 1 19 10.314 0.005 * 0.352
## 2 Congruency 1 19 3.037 0.098 0.138
## 3 vstmLoad:Congruency 1 19 0.513 0.483 0.026
# filtering out incorrect trials
<- E3 %>% filter(Corr==1 & vstmCorr==1) %>% mutate(RT = RT*1000)
cE3
# trimming
<- cE3 %>% filter(RT > 200) %>%
tE3 group_by(SN) %>%
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-xcut*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+xcut*sd(.$RT))) %>%
unnest(c(lbound, ubound)) %>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>%
filter(Outlier == FALSE) %>%
%>%
ungroup select(SN, vstmLoad, Congruency, RT)
# percentage trimmed.
100*(nrow(cE3)-nrow(tE3))/nrow(E3)
## [1] 3.411458
%>% group_by(SN, vstmLoad, Congruency) %>%
tE3 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"),
labels = c("Low", "High"))) %>%
group_by(vstmLoad, Congruency) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 20 | 624.95 | 103.48 | 586.46 | 103.30 | 48.43 |
Low | Incongruent | 20 | 675.96 | 129.76 | 649.62 | 132.80 | 60.73 |
Low | Diff | 20 | 51.01 | 50.44 | 34.89 | 58.66 | 23.60 |
High | Congruent | 20 | 751.84 | 137.88 | 742.20 | 121.83 | 64.53 |
High | Incongruent | 20 | 808.49 | 170.92 | 766.11 | 208.23 | 80.00 |
High | Diff | 20 | 56.65 | 60.89 | 41.49 | 58.02 | 28.50 |
%>% group_by(SN, Congruency, vstmLoad) %>%
tE3 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "vstmLoad", values_from = "rt") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, vstmLoad) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low RT 20 625. 103. 586. 103. 48.4
## 2 Congruent High RT 20 752. 138. 742. 122. 64.5
## 3 Congruent Diff RT 20 127. 83.0 121. 100. 38.8
## 4 Incongruent Low RT 20 676. 130. 650. 133. 60.7
## 5 Incongruent High RT 20 808. 171. 766. 208. 80.0
## 6 Incongruent Diff RT 20 133. 75.3 139. 108. 35.2
<- tE3 %>% group_by(SN, vstmLoad, Congruency) %>% summarise(RT = mean(RT)) %>% ungroup()
r3 <- r3 %>% unite("temp", c("vstmLoad", "Congruency")) %>%
r3w pivot_wider(id_cols = SN, names_from = temp, values_from = RT)
<- r3 %>% Rmisc::summarySEwithin(measurevar = "RT", withinvars = c("vstmLoad", "Congruency"), idvar = "SN")
r3g
<- ggplot() +
F3 geom_bar(data=r3g, aes(x=vstmLoad, y=RT, fill=Congruency),
stat="identity", width=0.7, color="black", position=position_dodge(.8)) +
geom_linerange(data=r3g, aes(x=vstmLoad, ymin=RT-ci, ymax=RT+ci, group=Congruency),
linewidth=1, position=position_dodge(0.8)) +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
geom_point(data=r3, aes(x=vstmLoad, y=RT, group=Congruency),
position=position_dodge(0.6), color="gray80", size=1.8) +
geom_segment(data=r3w, aes(x=1-.15, y=Low_Incongruent, xend=1+.15, yend=Low_Congruent), color="gray80") +
geom_segment(data=r3w, aes(x=2-.15, y=High_Incongruent, xend=2+.15, yend=High_Congruent), color="gray80") +
labs(x = "VSTM Load", y = "Response Time (ms)") +
scale_x_discrete(labels=c("Low" = "Low (0)", "High" = "High (3)")) +
coord_cartesian(ylim = c(500, 1300), clip = "on") +
scale_y_continuous(breaks=c(500,700,900,1100,1300)) +
theme_bw(base_size = 18) +
theme(legend.position="top",
legend.spacing.x = unit(0.5, 'lines'),
legend.margin = margin(0, 0, 0, 0),
legend.title = element_blank(),
legend.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
<- tE3 %>% group_by(SN, vstmLoad, Congruency) %>%
r3ce summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, vstmLoad, Diff)
<- r3ce %>% pivot_wider(id_cols = SN, names_from = vstmLoad, values_from = Diff)
r3cew <- r3ce %>% Rmisc::summarySEwithin(measurevar = "Diff", withinvars = "vstmLoad", idvar = "SN")
r3ceg
<- ggplot(r3ce, aes(x=vstmLoad, y=Diff)) +
G3 geom_hline(yintercept = 0) +
geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_segment(data=r3cew, color="gray80", aes(x=1, y=Low, xend=2, yend=High)) +
geom_errorbar(data=r3ceg, aes(x = vstmLoad, ymin = Diff-ci, ymax = Diff+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=r3ceg, aes(x = vstmLoad, y = Diff),
position=position_dodge(0.7), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Congruency Effect (ms)") +
scale_x_discrete(labels=c("Low" = "Low (0)", "High" = "High (3)")) +
coord_cartesian(ylim = c(-30, 270), clip = "on") +
scale_y_continuous(breaks=c(-30, 0, 30, 90, 150, 210, 270)) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
+ G3 + plot_layout(nrow = 1, widths = c(2, 1.2)) F3
%>% anova_test(dv = RT, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes") %>%
r3 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
vstmLoad | 1 | 19 | 56.70 | 0.0 | * | 0.75 |
Congruency | 1 | 19 | 20.82 | 0.0 | * | 0.52 |
vstmLoad:Congruency | 1 | 19 | 0.47 | 0.5 | 0.02 |
참가자는 플랭커 과제만 수행. 지각부담 효과를
검증하기 위해 시각탐색 배열 크기(set size)가 고부담
조건은
6, 저부담
조건은 1.
ggdraw() + draw_image("fig_proc/procExp4.png")
%>% group_by(SN, PercLoad, Congruency) %>%
E4 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "PercLoad"), names_from = "Congruency", values_from = "err") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
PercLoad = factor(.$PercLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(PercLoad, Congruency) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker % Error: Descriptive Stats")
PercLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 21 | 2.03 | 2.32 | 1.04 | 3.12 | 1.05 |
Low | Incongruent | 21 | 5.06 | 5.42 | 3.12 | 5.21 | 2.46 |
Low | Diff | 21 | 3.03 | 4.10 | 2.08 | 5.21 | 1.87 |
High | Congruent | 21 | 9.67 | 6.46 | 8.33 | 6.25 | 2.94 |
High | Incongruent | 21 | 14.24 | 8.90 | 11.46 | 11.46 | 4.05 |
High | Diff | 21 | 4.56 | 5.83 | 4.17 | 5.21 | 2.65 |
%>% group_by(SN, Congruency, PercLoad) %>%
E4 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "PercLoad", values_from = "err") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "PercLoad", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
PercLoad = factor(.$PercLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, PercLoad) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency PercLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low Error 21 2.03 2.32 1.04 3.12 1.06
## 2 Congruent High Error 21 9.67 6.46 8.33 6.25 2.94
## 3 Congruent Diff Error 21 7.64 4.93 6.25 3.12 2.25
## 4 Incongruent Low Error 21 5.06 5.42 3.12 5.21 2.46
## 5 Incongruent High Error 21 14.2 8.90 11.5 11.5 4.05
## 6 Incongruent Diff Error 21 9.18 8.69 8.33 9.38 3.96
<- E4 %>% group_by(SN, PercLoad, Congruency) %>% summarise(err = 100 - mean(Corr)*100) %>% ungroup()
e4 <- e4 %>% Rmisc::summarySEwithin(measurevar = "err", withinvars = c("PercLoad", "Congruency"), idvar = "SN")
e4g
%>% ggplot(aes(x=PercLoad, y=err, fill=Congruency)) +
e4 geom_violin(width = 0.7, trim=TRUE) +
::geom_quasirandom(dodge.width = 0.7, color = "gray80", size = 3, alpha = 0.4, show.legend = FALSE) +
ggbeeswarmgeom_errorbar(data=e4g, aes(x = PercLoad, ymin = err-ci, ymax = err+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=e4g, aes(x = PercLoad, y = err),
position=position_dodge(0.7), size=5, color = "darkred", show.legend = FALSE) +
coord_cartesian(ylim = c(0, 50), clip = "on") +
labs(x = "Perceptual Load", y = "% Error", fill="Congruency") +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = err, wid = SN, within = c(PercLoad, Congruency), effect.size = "pes") %>%
e4 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
PercLoad | 1 | 20 | 45.67 | 0.00 | * | 0.70 |
Congruency | 1 | 20 | 37.77 | 0.00 | * | 0.65 |
PercLoad:Congruency | 1 | 20 | 0.71 | 0.41 | 0.03 |
# arcsine transformation
%>% group_by(SN, PercLoad, Congruency) %>%
E4 summarise(acc = asin(sqrt(mean(Corr)))) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "PercLoad"), names_from = "Congruency", values_from = "acc") %>%
mutate(Diff = Congruent - Incongruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Accuracy") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
PercLoad = factor(.$PercLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(PercLoad, Congruency) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## PercLoad Congruency variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Low Congruent Accuracy 21 1.46 0.092 1.47 0.178 0.042
## 2 Low Incongruent Accuracy 21 1.38 0.122 1.39 0.15 0.055
## 3 Low Diff Accuracy 21 0.083 0.097 0.096 0.15 0.044
## 4 High Congruent Accuracy 21 1.27 0.11 1.28 0.109 0.05
## 5 High Incongruent Accuracy 21 1.20 0.13 1.23 0.168 0.059
## 6 High Diff Accuracy 21 0.07 0.078 0.063 0.083 0.036
<- E4 %>% group_by(SN, PercLoad, Congruency) %>% summarise(acc = asin(sqrt(mean(Corr)))) %>% ungroup()
s4 %>% anova_test(dv = acc, wid = SN, within = c(PercLoad, Congruency), effect.size = "pes")
s4 ## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 PercLoad 1 20 76.179 2.96e-08 * 0.792
## 2 Congruency 1 20 44.265 1.77e-06 * 0.689
## 3 PercLoad:Congruency 1 20 0.192 6.66e-01 0.010
# filtering out incorrect trials
<- E4 %>% filter(Corr==1) %>% mutate(RT = RT*1000)
cE4
# trimming
<- cE4 %>% filter(RT > 200) %>%
tE4 group_by(SN) %>%
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-xcut*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+xcut*sd(.$RT))) %>%
unnest(c(lbound, ubound)) %>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>%
filter(Outlier == FALSE) %>%
%>%
ungroup select(SN, PercLoad, Congruency, RT)
# percentage trimmed.
100*(nrow(cE4)-nrow(tE4))/nrow(E4)
## [1] 4.873512
%>% group_by(SN, PercLoad, Congruency) %>%
tE4 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "PercLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
PercLoad = factor(.$PercLoad, levels = c("Low", "High"),
labels = c("Low", "High"))) %>%
group_by(PercLoad, Congruency) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
PercLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
Low | Congruent | 21 | 576.56 | 54.10 | 566.07 | 45.72 | 24.63 |
Low | Incongruent | 21 | 624.13 | 56.35 | 606.52 | 61.74 | 25.65 |
Low | Diff | 21 | 47.57 | 16.66 | 49.13 | 21.82 | 7.59 |
High | Congruent | 21 | 726.07 | 75.05 | 728.64 | 70.18 | 34.16 |
High | Incongruent | 21 | 737.24 | 72.06 | 758.42 | 82.84 | 32.80 |
High | Diff | 21 | 11.18 | 24.86 | 13.54 | 27.92 | 11.32 |
%>% group_by(SN, Congruency, PercLoad) %>%
tE4 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Congruency"), names_from = "PercLoad", values_from = "rt") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "PercLoad", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
PercLoad = factor(.$PercLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Congruency, PercLoad) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 6 × 9
## Congruency PercLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Congruent Low RT 21 577. 54.1 566. 45.7 24.6
## 2 Congruent High RT 21 726. 75.1 729. 70.2 34.2
## 3 Congruent Diff RT 21 150. 65.2 147. 49.9 29.7
## 4 Incongruent Low RT 21 624. 56.3 607. 61.7 25.6
## 5 Incongruent High RT 21 737. 72.1 758. 82.8 32.8
## 6 Incongruent Diff RT 21 113. 59.7 115. 71.8 27.2
<- tE4 %>% group_by(SN, PercLoad, Congruency) %>% summarise(RT = mean(RT)) %>% ungroup()
r4 <- r4 %>% unite("temp", c("PercLoad", "Congruency")) %>%
r4w pivot_wider(id_cols = SN, names_from = temp, values_from = RT)
<- r4 %>% Rmisc::summarySEwithin(measurevar = "RT", withinvars = c("PercLoad", "Congruency"), idvar = "SN")
r4g
<- ggplot() +
F4 geom_bar(data=r4g, aes(x=PercLoad, y=RT, fill=Congruency),
stat="identity", width=0.7, color="black", position=position_dodge(.8)) +
geom_linerange(data=r4g, aes(x=PercLoad, ymin=RT-ci, ymax=RT+ci, group=Congruency),
linewidth=1, position=position_dodge(0.8)) +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
geom_point(data=r4, aes(x=PercLoad, y=RT, group=Congruency),
position=position_dodge(0.6), color="gray80", size=1.8) +
geom_segment(data=r4w, aes(x=1-.15, y=Low_Incongruent, xend=1+.15, yend=Low_Congruent), color="gray80") +
geom_segment(data=r4w, aes(x=2-.15, y=High_Incongruent, xend=2+.15, yend=High_Congruent), color="gray80") +
labs(x = "Perceptual Load", y = "Response Time (ms)") +
coord_cartesian(ylim = c(400, 1000), clip = "on") +
scale_y_continuous(breaks=seq(400,1000,by=100)) +
theme_bw(base_size = 18) +
theme(legend.position="top",
legend.spacing.x = unit(0.5, 'lines'),
legend.margin = margin(0, 0, 0, 0),
legend.title = element_blank(),
legend.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
<- tE4 %>% group_by(SN, PercLoad, Congruency) %>%
r4ce summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "PercLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, PercLoad, Diff)
<- r4ce %>% pivot_wider(id_cols = SN, names_from = PercLoad, values_from = Diff)
r4cew <- r4ce %>% Rmisc::summarySEwithin(measurevar = "Diff", withinvars = "PercLoad", idvar = "SN")
r4ceg
<- ggplot(r4ce, aes(x=PercLoad, y=Diff)) +
G4 geom_hline(yintercept = 0) +
geom_violin(width = 0.5, trim=TRUE) +
geom_point(color="gray80", size=1.8) +
geom_segment(data=r4cew, color="gray80", aes(x=1, y=Low, xend=2, yend=High)) +
geom_errorbar(data=r4ceg, aes(x = PercLoad, ymin = Diff-ci, ymax = Diff+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=r4ceg, aes(x = PercLoad, y = Diff),
position=position_dodge(0.7), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Congruency Effect (ms)") +
scale_x_discrete(labels=c("Low" = "Low (0)", "High" = "High (3)")) +
coord_cartesian(ylim = c(-40, 100), clip = "on") +
scale_y_continuous(breaks=seq(-40, 100, by=20)) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
+ G4 + plot_layout(nrow = 1, widths = c(2, 1.2)) F4
%>% anova_test(dv = RT, wid = SN, within = c(PercLoad, Congruency), effect.size = "pes") %>%
r4 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
PercLoad | 1 | 20 | 98.57 | 0 | * | 0.83 |
Congruency | 1 | 20 | 84.92 | 0 | * | 0.81 |
PercLoad:Congruency | 1 | 20 | 29.64 | 0 | * | 0.60 |
<- r4 %>% filter(PercLoad == "Low") %>%
m4lo anova_test(dv = RT, wid = SN, within = Congruency, effect.size = "pes")
%>% kable(digits = 2, format = "simple", caption = "ANOVA") m4lo
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Congruency | 1 | 20 | 171.1 | 0 | * | 0.9 |
<- r4 %>% filter(PercLoad == "High") %>%
m4hi anova_test(dv = RT, wid = SN, within = Congruency, effect.size = "pes")
%>% kable(digits = 2, format = "simple", caption = "ANOVA") m4hi
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Congruency | 1 | 20 | 4.24 | 0.05 | 0.17 |
<- p.adjust(c(m4lo$p, m4hi$p), "bonferroni")
pbon tibble(Load = c("Low", "High"),
lowLoad = c(pbon[1], pbon[2])) %>%
kable(align = 'c', digits = 2, caption = "Bonferroni-corrected p")
Load | lowLoad |
---|---|
Low | 0.00 |
High | 0.11 |
bind_rows(r3 %>% rename("Load" = vstmLoad) %>% mutate(Exp = 'Exp3', SN = paste('e3s', .$SN, sep = "")),
%>% rename("Load" = PercLoad) %>% mutate(Exp = 'Exp4', SN = paste('e4s', .$SN, sep = ""))) %>%
r4 anova_test(dv = RT, wid = SN, within = c(Load, Congruency), between = Exp, effect.size = "pes") %>%
kable(digits = 2, format = "simple", caption = "ANOVA: Expt 3 vs. 4")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Exp | 1 | 39 | 2.55 | 0.12 | 0.06 | |
Load | 1 | 39 | 146.16 | 0.00 | * | 0.79 |
Congruency | 1 | 39 | 48.38 | 0.00 | * | 0.55 |
Exp:Load | 1 | 39 | 0.00 | 0.94 | 0.00 | |
Exp:Congruency | 1 | 39 | 4.18 | 0.05 | * | 0.10 |
Load:Congruency | 1 | 39 | 8.44 | 0.01 | * | 0.18 |
Exp:Load:Congruency | 1 | 39 | 15.77 | 0.00 | * | 0.29 |
Overlap
요인 추가.
ggdraw() + draw_image("fig_proc/procExp5.png")
%>% group_by(SN, Overlap, vstmLoad) %>%
E5 summarise(acc = mean(vstmCorr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap"), names_from = "vstmLoad", values_from = "acc") %>%
mutate(Diff = Low - High) %>%
pivot_longer(cols = Low:Diff, names_to = "Load", values_to = "Accuracy") %>%
mutate(Load = factor(.$Load, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Overlap, Load) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "VSTM: Descriptive Stats")
Overlap | Load | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
NonOverlap | Low | 20 | 93.96 | 2.80 | 93.23 | 3.65 | 1.31 |
NonOverlap | High | 20 | 73.12 | 6.04 | 72.92 | 3.91 | 2.83 |
NonOverlap | Diff | 20 | 20.83 | 6.26 | 19.79 | 7.81 | 2.93 |
Overlap | Low | 20 | 93.28 | 4.94 | 94.79 | 5.99 | 2.31 |
Overlap | High | 20 | 70.94 | 7.60 | 69.27 | 11.46 | 3.56 |
Overlap | Diff | 20 | 22.34 | 8.26 | 22.40 | 10.94 | 3.87 |
<- E5 %>% group_by(SN, Overlap, vstmLoad) %>% summarise(acc = mean(vstmCorr)*100) %>% ungroup()
v5 <- v5 %>% Rmisc::summarySEwithin(measurevar = 'acc', withinvars = c('Overlap', 'vstmLoad'), idvar = 'SN')
v5g
<- c("Non-overlap", "Overlap")
over.labs names(over.labs) <- c("NonOverlap", "Overlap")
%>% ggplot(aes(x=vstmLoad, y=acc)) +
v5 geom_violin(width = 0.5, trim=TRUE) +
facet_grid(. ~ Overlap, labeller = labeller(Overlap = over.labs)) +
geom_point(color="gray80", size=1.8) +
geom_line(aes(group = SN), color="gray80") +
geom_errorbar(data=v5g, aes(x = vstmLoad, ymin = acc-ci, ymax = acc+ci),
position = position_dodge(0.8), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=v5g, aes(x = vstmLoad, y = acc),
position=position_dodge(0.8), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Change Detection Accuracy (%)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(50, 100), clip = "on") +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = acc, wid = SN, within = c(Overlap, vstmLoad), effect.size = "pes") %>%
v5 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Overlap | 1 | 19 | 2.82 | 0.11 | 0.13 | |
vstmLoad | 1 | 19 | 290.82 | 0.00 | * | 0.94 |
Overlap:vstmLoad | 1 | 19 | 0.53 | 0.48 | 0.03 |
%>% filter(Overlap == "NonOverlap") %>% pairwise_t_test(acc ~ vstmLoad, paired = TRUE)
v5 ## # A tibble: 1 × 10
## .y. group1 group2 n1 n2 statistic df p p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 acc Low High 20 20 14.9 19 6.3e-12 6.3e-12 ****
%>% filter(Overlap == "NonOverlap") %>% cohens_d(acc ~ vstmLoad, paired = TRUE)
v5 ## # A tibble: 1 × 7
## .y. group1 group2 effsize n1 n2 magnitude
## * <chr> <chr> <chr> <dbl> <int> <int> <ord>
## 1 acc Low High 3.33 20 20 large
%>% filter(Overlap == "Overlap") %>% pairwise_t_test(acc ~ vstmLoad, paired = TRUE)
v5 ## # A tibble: 1 × 10
## .y. group1 group2 n1 n2 statistic df p p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 acc Low High 20 20 12.1 19 2.26e-10 2.26e-10 ****
%>% filter(Overlap == "Overlap") %>% cohens_d(acc ~ vstmLoad, paired = TRUE)
v5 ## # A tibble: 1 × 7
## .y. group1 group2 effsize n1 n2 magnitude
## * <chr> <chr> <chr> <dbl> <int> <int> <ord>
## 1 acc Low High 2.70 20 20 large
<- E5 %>%
k5 group_by(SN, Overlap, vstmLoad, vstmCond) %>% # vstmCond: change = 1 or not = 2
summarise(acc = mean(vstmCorr)) %>%
ungroup() %>%
mutate(vstmCond = ifelse(vstmCond==1, "different", "same")) %>%
pivot_wider(id_cols = c(SN, Overlap, vstmLoad), names_from = vstmCond, values_from = acc) %>%
mutate(SS = ifelse(vstmLoad=="Low", 1, 4),
K = SS * (same - (1 - different))) %>%
select(SN, Overlap, vstmLoad, K)
%>% pivot_wider(id_cols = c(SN, Overlap), names_from = vstmLoad, values_from = K) %>%
k5 mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "K") %>%
mutate(vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"))) %>%
group_by(Overlap, vstmLoad) %>%
get_summary_stats(K, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-3) %>%
kable(digits = 2, caption = "K: Descriptive Stats")
Overlap | vstmLoad | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
NonOverlap | Low | 20 | 0.88 | 0.06 | 0.86 | 0.08 | 0.03 |
NonOverlap | High | 20 | 1.85 | 0.48 | 1.82 | 0.29 | 0.22 |
NonOverlap | Diff | 20 | 0.97 | 0.48 | 0.98 | 0.32 | 0.22 |
Overlap | Low | 20 | 0.87 | 0.10 | 0.90 | 0.11 | 0.05 |
Overlap | High | 20 | 1.67 | 0.61 | 1.57 | 1.02 | 0.29 |
Overlap | Diff | 20 | 0.80 | 0.60 | 0.73 | 0.94 | 0.28 |
%>% anova_test(dv = K, wid = SN, within = c(Overlap, vstmLoad), effect.size = "pes") %>%
k5 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Overlap | 1 | 19 | 2.15 | 0.16 | 0.10 | |
vstmLoad | 1 | 19 | 80.99 | 0.00 | * | 0.81 |
Overlap:vstmLoad | 1 | 19 | 1.44 | 0.24 | 0.07 |
%>% filter(Overlap == "NonOverlap") %>%
k5 mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
pairwise_t_test(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
High | Low | 20 | 20 | 9.15 | 19 | 0 | 0 | **** |
%>% filter(Overlap == "NonOverlap") %>%
k5 mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
cohens_d(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
High | Low | 2.05 | 20 | 20 | large |
%>% filter(Overlap == "Overlap") %>%
k5 mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
pairwise_t_test(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
High | Low | 20 | 20 | 6.01 | 19 | 0 | 0 | **** |
%>% filter(Overlap == "Overlap") %>%
k5 mutate(vstmLoad = factor(.$vstmLoad, levels = c("High", "Low"))) %>%
cohens_d(K ~ vstmLoad, paired = TRUE) %>% select(-1) %>%
kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
High | Low | 1.34 | 20 | 20 | large |
%>% group_by(SN, Overlap, vstmLoad, Congruency) %>%
E5 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "vstmLoad"), names_from = "Congruency", values_from = "err") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(Overlap, vstmLoad, Congruency) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-4) %>%
kable(digits = 2, caption = "Flanker % Error: Descriptive Stats")
Overlap | vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|---|
NonOverlap | Low | Congruent | 20 | 3.54 | 5.11 | 2.08 | 6.25 | 2.39 |
NonOverlap | Low | Incongruent | 20 | 4.38 | 5.53 | 2.08 | 6.25 | 2.59 |
NonOverlap | Low | Diff | 20 | 0.83 | 4.40 | 0.00 | 4.17 | 2.06 |
NonOverlap | High | Congruent | 20 | 2.08 | 2.34 | 2.08 | 2.60 | 1.10 |
NonOverlap | High | Incongruent | 20 | 3.65 | 3.57 | 2.08 | 3.12 | 1.67 |
NonOverlap | High | Diff | 20 | 1.56 | 4.16 | 0.00 | 4.69 | 1.95 |
Overlap | Low | Congruent | 20 | 3.33 | 3.47 | 2.08 | 2.60 | 1.62 |
Overlap | Low | Incongruent | 20 | 3.54 | 3.58 | 2.08 | 3.12 | 1.68 |
Overlap | Low | Diff | 20 | 0.21 | 2.86 | 1.04 | 4.17 | 1.34 |
Overlap | High | Congruent | 20 | 2.92 | 2.98 | 2.08 | 4.17 | 1.39 |
Overlap | High | Incongruent | 20 | 3.44 | 3.26 | 2.08 | 6.25 | 1.53 |
Overlap | High | Diff | 20 | 0.52 | 4.21 | 1.04 | 5.21 | 1.97 |
%>% group_by(SN, Overlap, Congruency, vstmLoad) %>%
E5 summarise(err = 100 - mean(Corr)*100) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "Congruency"), names_from = "vstmLoad", values_from = "err") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "Error") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Overlap, Congruency, vstmLoad) %>%
get_summary_stats(Error, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 12 × 10
## Overlap Congruency vstmLoad varia…¹ n mean sd median iqr ci
## <fct> <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NonOverlap Congruent Low Error 20 3.54 5.11 2.08 6.25 2.39
## 2 NonOverlap Congruent High Error 20 2.08 2.34 2.08 2.60 1.10
## 3 NonOverlap Congruent Diff Error 20 -1.46 5.15 0 6.25 2.41
## 4 NonOverlap Incongruent Low Error 20 4.38 5.53 2.08 6.25 2.59
## 5 NonOverlap Incongruent High Error 20 3.65 3.57 2.08 3.12 1.67
## 6 NonOverlap Incongruent Diff Error 20 -0.729 4.45 0 4.69 2.08
## 7 Overlap Congruent Low Error 20 3.33 3.47 2.08 2.60 1.62
## 8 Overlap Congruent High Error 20 2.92 2.98 2.08 4.17 1.39
## 9 Overlap Congruent Diff Error 20 -0.417 3.35 0 6.25 1.57
## 10 Overlap Incongruent Low Error 20 3.54 3.58 2.08 3.12 1.68
## 11 Overlap Incongruent High Error 20 3.44 3.26 2.08 6.25 1.53
## 12 Overlap Incongruent Diff Error 20 -0.104 3.48 0 4.17 1.63
## # … with abbreviated variable name ¹variable
<- E5 %>% group_by(SN, Overlap, vstmLoad, Congruency) %>% summarise(err = 100 - mean(Corr)*100) %>% ungroup()
e5 <- e5 %>% Rmisc::summarySEwithin(measurevar = "err", withinvars = c("Overlap", "vstmLoad", "Congruency"), idvar = "SN")
e5g
%>% ggplot(aes(x=vstmLoad, y=err, fill=Congruency)) +
e5 geom_violin(width = 0.7, trim=TRUE) +
facet_grid(. ~ Overlap, labeller = labeller(Overlap = over.labs)) +
::geom_quasirandom(dodge.width = 0.7, color = "gray80", size = 3, alpha = 0.4, show.legend = FALSE) +
ggbeeswarmgeom_errorbar(data=e5g, aes(x = vstmLoad, ymin = err-ci, ymax = err+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=e5g, aes(x = vstmLoad, y = err),
position=position_dodge(0.7), size=5, color = "darkred", show.legend = FALSE) +
coord_cartesian(ylim = c(0, 50), clip = "on") +
labs(x = "VSTM Load", y = "% Error", fill="Congruency") +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
%>% anova_test(dv = err, wid = SN, within = c(Overlap, vstmLoad, Congruency), effect.size = "pes") %>%
e5 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Overlap | 1 | 19 | 0.05 | 0.82 | 0.00 | |
vstmLoad | 1 | 19 | 1.46 | 0.24 | 0.07 | |
Congruency | 1 | 19 | 2.84 | 0.11 | 0.13 | |
Overlap:vstmLoad | 1 | 19 | 0.98 | 0.34 | 0.05 | |
Overlap:Congruency | 1 | 19 | 0.92 | 0.35 | 0.05 | |
vstmLoad:Congruency | 1 | 19 | 0.56 | 0.46 | 0.03 | |
Overlap:vstmLoad:Congruency | 1 | 19 | 0.04 | 0.84 | 0.00 |
# arcsine transformation
%>% group_by(SN, Overlap, vstmLoad, Congruency) %>%
E5 summarise(acc = asin(sqrt(mean(Corr)))) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "vstmLoad"), names_from = "Congruency", values_from = "acc") %>%
mutate(Diff = Congruent - Incongruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "Accuracy") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"), labels = c("Low", "High"))) %>%
group_by(Overlap, vstmLoad, Congruency) %>%
get_summary_stats(Accuracy, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 12 × 10
## Overlap vstmLoad Congruency variable n mean sd median iqr ci
## <fct> <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NonOverlap Low Congruent Accuracy 20 1.44 0.142 1.43 0.253 0.066
## 2 NonOverlap Low Incongruent Accuracy 20 1.41 0.14 1.43 0.253 0.066
## 3 NonOverlap Low Diff Accuracy 20 0.031 0.152 0 0.217 0.071
## 4 NonOverlap High Congruent Accuracy 20 1.46 0.099 1.43 0.16 0.046
## 5 NonOverlap High Incongruent Accuracy 20 1.41 0.113 1.43 0.109 0.053
## 6 NonOverlap High Diff Accuracy 20 0.05 0.134 0 0.161 0.063
## 7 Overlap Low Congruent Accuracy 20 1.42 0.108 1.43 0.097 0.05
## 8 Overlap Low Incongruent Accuracy 20 1.42 0.112 1.43 0.109 0.053
## 9 Overlap Low Diff Accuracy 20 0.004 0.12 0.024 0.201 0.056
## 10 Overlap High Congruent Accuracy 20 1.44 0.111 1.43 0.206 0.052
## 11 Overlap High Incongruent Accuracy 20 1.42 0.114 1.43 0.253 0.054
## 12 Overlap High Diff Accuracy 20 0.016 0.173 0.024 0.29 0.081
<- E5 %>% group_by(SN, Overlap, vstmLoad, Congruency) %>% summarise(acc = asin(sqrt(mean(Corr)))) %>% ungroup()
s5 %>% anova_test(dv = acc, wid = SN, within = c(Overlap, vstmLoad, Congruency), effect.size = "pes")
s5 ## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 Overlap 1 19 0.226 0.640 0.012000
## 2 vstmLoad 1 19 0.814 0.378 0.041000
## 3 Congruency 1 19 2.404 0.138 0.112000
## 4 Overlap:vstmLoad 1 19 0.016 0.901 0.000839
## 5 Overlap:Congruency 1 19 0.811 0.379 0.041000
## 6 vstmLoad:Congruency 1 19 0.291 0.596 0.015000
## 7 Overlap:vstmLoad:Congruency 1 19 0.011 0.919 0.000555
# filtering out incorrect trials
<- E5 %>% filter(Corr==1 & vstmCorr==1) %>% mutate(RT = RT*1000)
cE5
# trimming
<- cE5 %>% filter(RT > 200) %>%
tE5 group_by(SN) %>%
nest() %>%
mutate(lbound = map(data, ~mean(.$RT)-xcut*sd(.$RT)),
ubound = map(data, ~mean(.$RT)+xcut*sd(.$RT))) %>%
unnest(c(lbound, ubound)) %>%
unnest(data) %>%
mutate(Outlier = (RT < lbound)|(RT > ubound)) %>%
filter(Outlier == FALSE) %>%
%>%
ungroup select(SN, Overlap, vstmLoad, Congruency, RT)
# percentage trimmed.
100*(nrow(cE5)-nrow(tE5))/nrow(E5)
## [1] 3.385417
%>% group_by(SN, Overlap, vstmLoad, Congruency) %>%
tE5 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
pivot_longer(cols = Incongruent:Diff, names_to = "Congruency", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High"),
labels = c("Low", "High"))) %>%
group_by(Overlap, vstmLoad, Congruency) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci")) %>%
select(-4) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
Overlap | vstmLoad | Congruency | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|---|
NonOverlap | Low | Congruent | 20 | 743.86 | 115.09 | 693.42 | 192.44 | 53.86 |
NonOverlap | Low | Incongruent | 20 | 796.45 | 128.29 | 733.70 | 196.89 | 60.04 |
NonOverlap | Low | Diff | 20 | 52.59 | 55.58 | 32.46 | 73.23 | 26.01 |
NonOverlap | High | Congruent | 20 | 731.10 | 117.85 | 691.16 | 184.10 | 55.16 |
NonOverlap | High | Incongruent | 20 | 807.32 | 127.57 | 753.77 | 174.40 | 59.70 |
NonOverlap | High | Diff | 20 | 76.22 | 43.43 | 68.85 | 56.18 | 20.32 |
Overlap | Low | Congruent | 20 | 750.15 | 114.03 | 717.14 | 175.36 | 53.37 |
Overlap | Low | Incongruent | 20 | 806.30 | 125.12 | 750.49 | 179.79 | 58.56 |
Overlap | Low | Diff | 20 | 56.15 | 59.35 | 43.28 | 59.57 | 27.78 |
Overlap | High | Congruent | 20 | 738.48 | 118.42 | 704.04 | 189.18 | 55.42 |
Overlap | High | Incongruent | 20 | 794.36 | 126.86 | 759.46 | 198.59 | 59.37 |
Overlap | High | Diff | 20 | 55.88 | 50.48 | 59.45 | 61.01 | 23.62 |
%>% group_by(SN, Overlap, Congruency, vstmLoad) %>%
tE5 summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "Congruency"), names_from = "vstmLoad", values_from = "rt") %>%
mutate(Diff = High - Low) %>%
pivot_longer(cols = Low:Diff, names_to = "vstmLoad", values_to = "RT") %>%
mutate(Congruency = factor(.$Congruency, levels = c("Congruent", "Incongruent", "Diff"),
labels = c("Congruent", "Incongruent", "Diff")),
vstmLoad = factor(.$vstmLoad, levels = c("Low", "High", "Diff"),
labels = c("Low", "High", "Diff"))) %>%
group_by(Overlap, Congruency, vstmLoad) %>%
get_summary_stats(RT, show = c("mean", "sd", "median", "iqr", "ci"))
## # A tibble: 12 × 10
## Overlap Congruency vstmLoad variable n mean sd median iqr ci
## <fct> <fct> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NonOverlap Congruent Low RT 20 744. 115. 693. 192. 53.9
## 2 NonOverlap Congruent High RT 20 731. 118. 691. 184. 55.2
## 3 NonOverlap Congruent Diff RT 20 -12.8 32.0 -17.6 35.5 15.0
## 4 NonOverlap Incongruent Low RT 20 796. 128. 734. 197. 60.0
## 5 NonOverlap Incongruent High RT 20 807. 128. 754. 174. 59.7
## 6 NonOverlap Incongruent Diff RT 20 10.9 37.7 15.6 38.4 17.7
## 7 Overlap Congruent Low RT 20 750. 114. 717. 175. 53.4
## 8 Overlap Congruent High RT 20 738. 118. 704. 189. 55.4
## 9 Overlap Congruent Diff RT 20 -11.7 45.0 -10.6 60.6 21.0
## 10 Overlap Incongruent Low RT 20 806. 125. 750. 180. 58.6
## 11 Overlap Incongruent High RT 20 794. 127. 759. 199. 59.4
## 12 Overlap Incongruent Diff RT 20 -11.9 37.3 -11.2 46.7 17.5
<- tE5 %>% group_by(SN, Overlap, vstmLoad, Congruency) %>% summarise(RT = mean(RT)) %>% ungroup()
r5 <- r5 %>% unite("temp", c("vstmLoad", "Congruency")) %>%
r5w pivot_wider(id_cols = c(SN, Overlap), names_from = temp, values_from = RT)
<- r5 %>% Rmisc::summarySEwithin(measurevar = "RT", withinvars = c("Overlap", "vstmLoad", "Congruency"), idvar = "SN")
r5g
<- ggplot() +
F5 geom_bar(data=r5g, aes(x=vstmLoad, y=RT, fill=Congruency),
stat="identity", width=0.7, color="black", position=position_dodge(.8)) +
facet_grid(. ~ Overlap, labeller = labeller(Overlap = over.labs)) +
geom_linerange(data=r5g, aes(x=vstmLoad, ymin=RT-ci, ymax=RT+ci, group=Congruency),
linewidth=1, position=position_dodge(0.8)) +
scale_fill_manual(values=c('#0073C2FF','#EFC000FF'),
labels=c("Incongruent", "Congruent")) +
geom_point(data=r5, aes(x=vstmLoad, y=RT, group=Congruency),
position=position_dodge(0.6), color="gray80", size=1.8) +
geom_segment(data=r5w, aes(x=1-.15, y=Low_Incongruent, xend=1+.15, yend=Low_Congruent), color="gray80") +
geom_segment(data=r5w, aes(x=2-.15, y=High_Incongruent, xend=2+.15, yend=High_Congruent), color="gray80") +
labs(x = "VSTM Load", y = "Response Time (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(500, 1200), clip = "on") +
scale_y_continuous(breaks=seq(500, 1200, by=100)) +
theme_bw(base_size = 18) +
theme(legend.position="top",
legend.spacing.x = unit(0.5, 'lines'),
legend.margin = margin(0, 0, 0, 0),
legend.title = element_blank(),
legend.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
<- tE5 %>% group_by(SN, Overlap, vstmLoad, Congruency) %>%
r5ce summarise(rt = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c("SN", "Overlap", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, Overlap, vstmLoad, Diff)
<- r5ce %>% pivot_wider(id_cols = c(SN, Overlap), names_from = vstmLoad, values_from = Diff)
r5cew <- r5ce %>% Rmisc::summarySEwithin(measurevar = "Diff", withinvars = c("Overlap", "vstmLoad"), idvar = "SN")
r5ceg
<- ggplot(r5ce, aes(x=vstmLoad, y=Diff)) +
G5 geom_hline(yintercept = 0) +
geom_violin(width = 0.5, trim=TRUE) +
facet_grid(. ~ Overlap, labeller = labeller(Overlap = over.labs)) +
geom_point(color="gray80", size=1.8) +
geom_segment(data=r5cew, color="gray80", aes(x=1, y=Low, xend=2, yend=High)) +
geom_errorbar(data=r5ceg, aes(x = vstmLoad, ymin = Diff-ci, ymax = Diff+ci),
position = position_dodge(0.7), width = 0.1, linewidth = 1, color = "darkred") +
geom_point(data=r5ceg, aes(x = vstmLoad, y = Diff),
position=position_dodge(0.7), size=4, color = "darkred", show.legend = FALSE) +
labs(x = "VSTM Load", y = "Congruency Effect (ms)") +
scale_x_discrete(labels=c("Low" = "Low (1)", "High" = "High (4)")) +
coord_cartesian(ylim = c(-50, 250), clip = "on") +
scale_y_continuous(breaks=seq(-50, 250, by = 50)) +
theme_bw(base_size = 18) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
+ G5 + plot_layout(nrow = 1, widths = c(2, 1.2)) F5
%>% anova_test(dv = RT, wid = SN, within = c(Overlap, vstmLoad, Congruency), effect.size = "pes") %>%
r5 kable(digits = 2, format = "simple", caption = "ANOVA")
Effect | DFn | DFd | F | p | p<.05 | pes |
---|---|---|---|---|---|---|
Overlap | 1 | 19 | 1.42 | 0.25 | 0.07 | |
vstmLoad | 1 | 19 | 0.82 | 0.38 | 0.04 | |
Congruency | 1 | 19 | 32.15 | 0.00 | * | 0.63 |
Overlap:vstmLoad | 1 | 19 | 3.31 | 0.09 | 0.15 | |
Overlap:Congruency | 1 | 19 | 1.71 | 0.21 | 0.08 | |
vstmLoad:Congruency | 1 | 19 | 3.15 | 0.09 | 0.14 | |
Overlap:vstmLoad:Congruency | 1 | 19 | 8.47 | 0.01 | * | 0.31 |
%>% filter(Overlap == "Overlap") %>%
r5 anova_test(dv = RT, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes")
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 vstmLoad 1 19 2.022 0.17100 9.60e-02
## 2 Congruency 1 19 23.194 0.00012 * 5.50e-01
## 3 vstmLoad:Congruency 1 19 0.001 0.97400 5.77e-05
%>% filter(Overlap == "NonOverlap") %>%
r5 anova_test(dv = RT, wid = SN, within = c(vstmLoad, Congruency), effect.size = "pes")
## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 pes
## 1 vstmLoad 1 19 0.019 0.893000 0.00098
## 2 Congruency 1 19 37.429 0.000007 * 0.66300
## 3 vstmLoad:Congruency 1 19 10.291 0.005000 * 0.35100
VSTM 부담에 의한 K 변화량과 일치효과(플랭커 간섭) 변화량의 상관.
<- bind_rows(k1 %>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'K') %>%
Kdiff mutate(Kdiff = High - Low) %>% select(SN, Kdiff) %>%
mutate(Exp = 'Exp1', SN = paste('e1s', .$SN, sep = "")),
%>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'K') %>%
k2 mutate(Kdiff = High - Low) %>% select(SN, Kdiff) %>%
mutate(Exp = 'Exp2', SN = paste('e2s', .$SN, sep = "")),
%>% group_by(SN, vstmLoad, vstmCond) %>% # vstmCond: change = 1 or not = 2
E5 summarise(acc = mean(vstmCorr)) %>% ungroup() %>%
mutate(vstmCond = ifelse(vstmCond==1, "different", "same")) %>%
pivot_wider(id_cols = c(SN, vstmLoad), names_from = vstmCond, values_from = acc) %>%
mutate(SS = ifelse(vstmLoad=="Low", 1, 4), K = SS * (same - (1 - different))) %>%
select(SN, vstmLoad, K) %>%
pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'K') %>%
mutate(Kdiff = High - Low) %>% select(SN, Kdiff) %>%
mutate(Exp = 'Exp5', SN = paste('e5s', .$SN, sep = ""))) %>% select(SN, Kdiff)
<- bind_rows(r1ce %>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
Cdiff mutate(Cdiff = High - Low) %>% select(SN, Cdiff) %>%
mutate(Exp = 'Exp1', SN = paste('e1s', .$SN, sep = "")),
%>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
r2ce mutate(Cdiff = High - Low) %>% select(SN, Cdiff) %>%
mutate(Exp = 'Exp2', SN = paste('e2s', .$SN, sep = "")),
%>% group_by(SN, vstmLoad, Congruency) %>%
tE5 summarise(rt = mean(RT)) %>% ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, vstmLoad, Diff) %>%
pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
mutate(Cdiff = High - Low) %>% select(SN, Cdiff) %>%
mutate(Exp = 'Exp5', SN = paste('e5s', .$SN, sep = ""))) %>% select(SN, Cdiff)
tibble(K_lo2hi = Kdiff$Kdiff, CE_lo2hi = Cdiff$Cdiff) %>% summarise(N = n())
## # A tibble: 1 × 1
## N
## <int>
## 1 60
tibble(K_lo2hi = Kdiff$Kdiff, CE_lo2hi = Cdiff$Cdiff) %>% cor_test()
## # A tibble: 1 × 8
## var1 var2 cor statistic p conf.low conf.high method
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 K_lo2hi CE_lo2hi -0.1 -0.766 0.447 -0.345 0.158 Pearson
tibble(K_lo2hi = Kdiff$Kdiff, CE_lo2hi = Cdiff$Cdiff) %>%
pairs.panels(smooth = TRUE, scale = FALSE, density = TRUE,
ellipses = FALSE, method = "pearson", pch = 21, lm = TRUE,
cor = TRUE, jiggle = FALSE, factor = 2, hist.col = 4,
stars = TRUE, ci = TRUE)
tibble(K_lo2hi = Kdiff$Kdiff, CE_lo2hi = Cdiff$Cdiff) %>%
::tab_corr(p.numeric = TRUE, corr.method = "pearson", triangle = "lower") sjPlot
K_lo2hi | CE_lo2hi | |
---|---|---|
K_lo2hi | ||
CE_lo2hi |
-0.100 (.447) |
|
Computed correlation used pearson-method with listwise-deletion. |
# murge experiments
<- bind_rows(tE1 %>% mutate(Exp = 'Exp1', SN = paste('e1s', .$SN, sep = "")),
d %>% mutate(Exp = 'Exp2', SN = paste('e2s', .$SN, sep = "")),
tE2 %>% mutate(Exp = 'Exp3', SN = paste('e3s', .$SN, sep = "")),
tE3 %>% mutate(Exp = 'Exp5', SN = paste('e5s', .$SN, sep = ""))) %>%
tE5 select(Exp, SN, vstmLoad, Congruency, RT) %>%
mutate(Exp = factor(.$Exp),
SN = factor(.$SN))
headTail(d)
## Exp SN vstmLoad Congruency RT
## 1 Exp1 e1s1 Low Incongruent 845
## 2 Exp1 e1s1 Low Incongruent 922.5
## 3 Exp1 e1s1 Low Incongruent 944.8
## 4 Exp1 e1s1 Low Congruent 823.5
## 5 <NA> <NA> <NA> <NA> ...
## 6 Exp5 e5s20 Low Congruent 822.1
## 7 Exp5 e5s20 Low Incongruent 754.5
## 8 Exp5 e5s20 Low Incongruent 623
## 9 Exp5 e5s20 Low Congruent 629.7
slice_sample(d, n = 10)
## # A tibble: 10 × 5
## Exp SN vstmLoad Congruency RT
## <fct> <fct> <fct> <fct> <dbl>
## 1 Exp5 e5s18 Low Congruent 836.
## 2 Exp3 e3s14 High Congruent 894.
## 3 Exp1 e1s5 High Congruent 581.
## 4 Exp3 e3s19 High Incongruent 628.
## 5 Exp5 e5s15 Low Congruent 887.
## 6 Exp5 e5s6 Low Incongruent 876.
## 7 Exp2 e2s13 High Congruent 645.
## 8 Exp1 e1s5 High Congruent 751.
## 9 Exp5 e5s20 Low Congruent 753.
## 10 Exp1 e1s15 Low Congruent 812.
<- d %>%
dd group_by(Exp, SN, vstmLoad, Congruency) %>%
summarise(M = mean(RT)) %>%
ungroup() %>%
pivot_wider(id_cols = c(Exp, SN, vstmLoad), names_from = Congruency, values_from = M) %>%
mutate(Congruency = Incongruent - Congruent) %>%
select(Exp, SN, vstmLoad, Congruency) %>%
pivot_wider(id_cols = c(Exp, SN), names_from = vstmLoad, values_from = Congruency) %>%
mutate(Difference = High - Low)
# select(Exp, SN, Difference)
mean(dd$Difference)
## [1] 4.945433
# dd %>% ggplot(aes(x=1, y=Difference)) +
# geom_violin(width = 0.6, trim=TRUE) +
# ggbeeswarm::geom_quasirandom(aes(colour = Exp), size = 3, alpha = 0.9, width = 0.3) +
# geom_hline(aes(yintercept=0), lty=1) +
# stat_summary(fun.data="mean_cl_normal", shape=19, colour="darkred", size = 1,
# position=position_dodge(0.9)) +
# coord_flip() +
# labs(y = "Congruency Difference \n (High Load - Low Load)") +
# theme_classic(base_size = 18) +
# theme(axis.line.y = element_blank(),
# axis.text.y = element_blank(),
# axis.ticks.y = element_blank(),
# axis.title.y = element_blank(),
# legend.title = element_blank(),
# legend.position = c(0.85, 0.8),
# aspect.ratio = .5)
# beanplot::beanplot(Difference ~ Exp, data = dd)
# https://www.r-bloggers.com/2021/12/comparing-distributions/
<- c(`Exp1` = "Expt 1", `Exp2` = "Expt 2", `Exp3` = "Expt 3", `Exp5` = "Expt 5")
grp_names <- dd %>% ggplot() +
F6 geom_vline(xintercept = 0) +
geom_density_ridges(mapping = aes(x = Difference, y = Exp, fill = Exp),
color = "white", alpha = .7, scale = 2) +
scale_fill_manual(values = wesanderson::wes_palette(n=4, name="Cavalcanti1")) +
scale_y_discrete(labels = as_labeller(grp_names)) +
scale_x_continuous(breaks=seq(-150, 150, by = 50)) +
coord_cartesian(xlim = c(-150, 150), clip = "on") +
guides(color = "none", fill = "none") +
labs(x = "Difference in Congruency Effects\n(High Load - Low Load)", y = NULL) +
labs(x = NULL, y = NULL) +
theme_classic(base_size = 18) +
theme(axis.line.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
legend.title = element_blank(),
legend.position = c(0.85, 0.8),
aspect.ratio = .5)
# Simonsohn의 제안(링크 필요)에 따라, 원래 실험에서 검증력이 33%인 효과 크기를 계산한다.
# Konstantinou, Beal, King, Lavie(2014, APP) 실험에서 실험 1b의 참가자 수는 N=22. 따라서,
= pwr::pwr.t.test(n=22, power = .33, sig.level = .05, type="paired")
E33 $d
E33## [1] 0.3393938
# 효과크기 d=0.3394보다 작은 효과는 효과가 없다고 할 수 있다.
# 재현에 필요한 표본의 크기는 효과크기 d=0.3394에서 검증력이 80% 이상인 참가자 수이다.
<- TOSTER::powerTOSTpaired(alpha = .05, statistical_power = .8,
required_N low_eqbound_dz = -E33$d, high_eqbound_dz = E33$d)
## Note: this function is defunct. Please use power_t_TOST instead
## The required sample size to achieve 80 % power with equivalence bounds of -0.3393938 and 0.3393938 is 75 pairs
##
<- power_t_TOST(alpha = .05, power = .8, low_eqbound = -E33$d, high_eqbound = E33$d, type = "paired.sample")
pp $n
pp## [1] 75.72011
# 최소 76명이 필요하다.
<- TOSTpaired(n = 80,
tm m1 = mean(dd$High), m2 = mean(dd$Low),
sd1 = sd(dd$High), sd2 = sd(dd$Low),
r12 = cor(dd$High, dd$Low),
low_eqbound_dz = -E33$d,
high_eqbound_dz = E33$d,
alpha = 0.05, plot = FALSE)
## Note: this function is defunct. Please use tsum_TOST instead
## TOST results:
## t-value lower bound: 4.26 p-value lower bound: 0.00003
## t-value upper bound: -1.81 p-value upper bound: 0.037
## degrees of freedom : 79
##
## Equivalence bounds (Cohen's dz):
## low eqbound: -0.3394
## high eqbound: 0.3394
##
## Equivalence bounds (raw scores):
## low eqbound: -12.2705
## high eqbound: 12.2705
##
## TOST confidence interval:
## lower bound 90% CI: -1.782
## upper bound 90% CI: 11.673
##
## NHST confidence interval:
## lower bound 95% CI: -3.1
## upper bound 95% CI: 12.991
##
## Equivalence Test Result:
## The equivalence test was significant, t(79) = -1.812, p = 0.0369, given equivalence bounds of -12.271 and 12.271 (on a raw scale) and an alpha of 0.05.
##
##
## Null Hypothesis Test Result:
## The null hypothesis test was non-significant, t(79) = 1.223, p = 0.225, given an alpha of 0.05.
##
## NHST: don't reject null significance hypothesis that the effect is equal to 0
## TOST: reject null equivalence hypothesis
<- as.data.frame(tm) %>%
G6 ggplot(aes(x=1, y=diff, ymin=LL_CI_TOST, ymax=UL_CI_TOST)) +
geom_hline(yintercept = 0) +
geom_errorbar(color = "darkred", width = 0.2, linewidth = 1) +
geom_point(color = "darkred", size = 4) +
coord_flip(ylim = c(tm$low_eqbound, tm$high_eqbound)) +
geom_hline(yintercept = c(tm$high_eqbound, tm$low_eqbound),
linetype = "dashed") +
labs(y = "Difference in Congruency Effects\n(High Load - Low Load)") +
theme_classic(base_size = 18) +
theme(axis.line.y = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
aspect.ratio = .2)
/G6 + plot_layout(nrow = 2, heights = c(2, 1.5))
F6## Picking joint bandwidth of 13.4
저부담 조건과 고부담 조건의 Cowan’s K 차이가 상위 30%로 큰 참가자들의 플랭커 간섭을 비교하였다.
<- Kdiff %>% mutate(q70 = quantile(Kdiff, prob = .70), hUpper = Kdiff > q70)
Kdiff2 <- bind_rows(r1ce %>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
Cdiff2 mutate(Exp = 'Exp1', SN = paste('e1s', .$SN, sep = "")),
%>% pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
r2ce mutate(Exp = 'Exp2', SN = paste('e2s', .$SN, sep = "")),
%>% group_by(SN, vstmLoad, Congruency) %>%
tE5 summarise(rt = mean(RT)) %>% ungroup() %>%
pivot_wider(id_cols = c("SN", "vstmLoad"), names_from = "Congruency", values_from = "rt") %>%
mutate(Diff = Incongruent - Congruent) %>%
select(SN, vstmLoad, Diff) %>%
pivot_wider(id_cols = 'SN', names_from = 'vstmLoad', values_from = 'Diff') %>%
mutate(Exp = 'Exp5', SN = paste('e5s', .$SN, sep = ""))) %>% select(SN, Low, High)
full_join(Kdiff2, Cdiff2, by = "SN") %>%
filter(hUpper == TRUE)
## # A tibble: 18 × 6
## SN Kdiff q70 hUpper Low High
## <chr> <dbl> <dbl> <lgl> <dbl> <dbl>
## 1 e1s5 2.62 1.57 TRUE 35.9 -3.52
## 2 e1s7 1.83 1.57 TRUE 92.3 91.5
## 3 e1s9 2.29 1.57 TRUE 35.8 23.3
## 4 e1s10 1.79 1.57 TRUE -13.6 14.4
## 5 e1s11 2.10 1.57 TRUE 5.76 11.0
## 6 e1s12 1.81 1.57 TRUE 102. 72.4
## 7 e1s14 1.65 1.57 TRUE 37.1 -21.4
## 8 e1s15 2.23 1.57 TRUE 42.4 40.9
## 9 e1s17 1.77 1.57 TRUE -26.9 47.3
## 10 e1s18 1.81 1.57 TRUE 26.0 4.21
## 11 e1s20 2.48 1.57 TRUE 17.4 -16.9
## 12 e2s5 2.15 1.57 TRUE 39.6 76.2
## 13 e2s6 1.96 1.57 TRUE 38.0 48.8
## 14 e2s11 1.62 1.57 TRUE 64.9 30.8
## 15 e2s16 2.25 1.57 TRUE 56.9 135.
## 16 e2s19 1.85 1.57 TRUE 13.5 6.69
## 17 e5s5 1.66 1.57 TRUE 57.5 84.3
## 18 e5s9 1.92 1.57 TRUE 77.6 76.5
<- full_join(Kdiff2, Cdiff2, by = "SN") %>%
h filter(hUpper == TRUE) %>%
select(SN, Low, High) %>%
pivot_longer(cols = c(Low, High), names_to = 'Load', values_to = 'Flanker')
%>% group_by(Load) %>%
h get_summary_stats(Flanker, show = c("mean", "sd", "median", "iqr", "ci")) %>%
kable(digits = 2, caption = "Flanker RT (ms): Descriptive Stats")
Load | variable | n | mean | sd | median | iqr | ci |
---|---|---|---|---|---|---|---|
High | Flanker | 18 | 40.06 | 42.37 | 35.81 | 67.47 | 21.07 |
Low | Flanker | 18 | 38.99 | 33.55 | 37.57 | 37.78 | 16.68 |
%>% pairwise_t_test(Flanker ~ Load, paired = TRUE) %>% select(-1) %>%
h kable(digits = 2, format = "simple", caption = "Pairwise t test")
group1 | group2 | n1 | n2 | statistic | df | p | p.adj | p.adj.signif |
---|---|---|---|---|---|---|---|---|
High | Low | 18 | 18 | 0.12 | 17 | 0.9 | 0.9 | ns |
%>% cohens_d(Flanker ~ Load, paired = TRUE) %>% select(-1) %>%
h kable(digits = 2, format = "simple", caption = "Effect Size")
group1 | group2 | effsize | n1 | n2 | magnitude |
---|---|---|---|---|---|
High | Low | 0.03 | 18 | 18 | negligible |
sessionInfo()
## R version 4.2.2 (2022-10-31)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Ventura 13.2
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] icons_0.2.0 klippy_0.0.0.9500 patchwork_1.1.2.9000
## [4] cowplot_1.1.1 pwr_1.3-0 TOSTER_0.6.0
## [7] rstatix_0.7.1 ggridges_0.5.4 knitr_1.42
## [10] psych_2.2.9 forcats_0.5.2 stringr_1.5.0
## [13] dplyr_1.0.10 purrr_1.0.1 readr_2.1.3
## [16] tidyr_1.3.0 tibble_3.1.8 ggplot2_3.4.0
## [19] tidyverse_1.3.2 Rmisc_1.5.1 plyr_1.8.8
## [22] lattice_0.20-45
##
## loaded via a namespace (and not attached):
## [1] readxl_1.4.1 backports_1.4.1 Hmisc_4.7-2
## [4] splines_4.2.2 TH.data_1.1-1 digest_0.6.31
## [7] htmltools_0.5.4 wesanderson_0.3.6 magick_2.7.3
## [10] fansi_1.0.4 magrittr_2.0.3 checkmate_2.1.0
## [13] googlesheets4_1.0.1 cluster_2.1.4 tzdb_0.3.0
## [16] modelr_0.1.10 sandwich_3.0-2 timechange_0.2.0
## [19] jpeg_0.1-10 colorspace_2.1-0 rvest_1.0.3
## [22] rappdirs_0.3.3 ggdist_3.2.1 haven_2.5.1
## [25] xfun_0.36 crayon_1.5.2 jsonlite_1.8.4
## [28] lme4_1.1-31 survival_3.5-0 zoo_1.8-11
## [31] glue_1.6.2 gtable_0.3.1 gargle_1.2.1
## [34] emmeans_1.8.4-1 sjstats_0.18.2 sjmisc_2.8.9
## [37] distributional_0.3.1 car_3.1-1 abind_1.4-5
## [40] scales_1.2.1 mvtnorm_1.1-3 DBI_1.1.3
## [43] ggeffects_1.1.5 Rcpp_1.0.10 xtable_1.8-4
## [46] performance_0.10.2 htmlTable_2.4.1 foreign_0.8-84
## [49] Formula_1.2-4 datawizard_0.6.5 htmlwidgets_1.6.1
## [52] httr_1.4.4 RColorBrewer_1.1-3 ellipsis_0.3.2
## [55] pkgconfig_2.0.3 farver_2.1.1 nnet_7.3-18
## [58] sass_0.4.5 dbplyr_2.3.0 deldir_1.0-6
## [61] utf8_1.2.2 tidyselect_1.2.0 labeling_0.4.2
## [64] rlang_1.0.6 munsell_0.5.0 cellranger_1.1.0
## [67] tools_4.2.2 cachem_1.0.6 cli_3.6.0
## [70] generics_0.1.3 pacman_0.5.1 sjlabelled_1.2.0
## [73] broom_1.0.3 evaluate_0.20 fastmap_1.1.0
## [76] yaml_2.3.7 fs_1.6.0 nlme_3.1-161
## [79] xml2_1.3.3 compiler_4.2.2 rstudioapi_0.14
## [82] beeswarm_0.4.0 png_0.1-8 reprex_2.0.2
## [85] bslib_0.4.2 stringi_1.7.12 highr_0.10
## [88] Matrix_1.5-3 nloptr_2.0.3 vctrs_0.5.2
## [91] pillar_1.8.1 lifecycle_1.0.3 jquerylib_0.1.4
## [94] estimability_1.4.1 data.table_1.14.6 insight_0.18.8
## [97] R6_2.5.1 latticeExtra_0.6-30 gridExtra_2.3
## [100] vipor_0.4.5 codetools_0.2-18 boot_1.3-28.1
## [103] MASS_7.3-58.2 assertthat_0.2.1 withr_2.5.0
## [106] mnormt_2.1.1 multcomp_1.4-20 bayestestR_0.13.0
## [109] parallel_4.2.2 hms_1.1.2 grid_4.2.2
## [112] rpart_4.1.19 sjPlot_2.8.12 minqa_1.2.5
## [115] coda_0.19-4 rmarkdown_2.20 carData_3.0-5
## [118] googledrive_2.0.0 lubridate_1.9.1 base64enc_0.1-3
## [121] ggbeeswarm_0.7.1 interp_1.1-3