Introduction

This notebook contains statistical analyses reported in Stauch, Peter, Ehrlich, Nolte, & Fries (2021), Gammaband responses to equiluminant colors in early human visual cortex.

To run it, the dataset color_dataset.csv (available from Zenodo) needs to be stored in the same folder as the notebook.

First, we’ll load in required libraries as well as the dataset, remove invalid trials and prepare data formats.

library(magrittr)
library(lme4)
library(lmerTest)
library(afex)
library(dplyr)
library(data.table)
library(tidyverse)
library(Hmisc)
library(emmeans)
library(MuMIn)
library(BayesFactor)
data <- fread('color_dataset.csv', stringsAsFactors=TRUE)
data$ID <- factor(data$ID)
data$stimulusVerbal <- relevel(data$stimulusVerbal, ref = "grating")
data %<>% filter(answer !='prepress' & answer !='pause')

peaks <- fread('color_peaks.csv', stringsAsFactors=TRUE)
peaks$ID <- factor(peaks$ID)
ERFparam <- fread('color_ERFs.csv', stringsAsFactors=TRUE)
ERFparam$ID <- factor(ERFparam$ID)

Results

We’ll now go through the subsections of our Results and provide code for statistical analyses.

Behavior

Get average per-subject accuracy and reaction times.

data %>% 
    filter(correctReport==1|correctReport==0) %>%
    filter(wasCatch==0 & wasFixated==1) -> behavData
behavData %>% 
    group_by(ID, stimType) %>%
    dplyr::summarize(meanAcc = mean(correctReport, na.rm=TRUE),
                     meanRT = mean(rt, na.rm=TRUE)) -> meanBehav
behavData %>% 
    group_by(ID, stimulusVerbal) %>%
    dplyr::summarize(meanAcc = mean(correctReport, na.rm=TRUE),
                     meanRT = mean(rt, na.rm=TRUE)) -> meanBehavAllStims
behavData %>% 
    group_by(ID, stimulusVerbal) %>%
    filter(repNr > 50) %>% # repetitions during which staircases were stable
    dplyr::summarize(meanContrast = mean(tContrast, na.rm=TRUE)) ->
                       meanBehavAllStimsStable

Get average RT.

meanBehav %>%
    group_by(stimType) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanRT*1000))))

Get average accuracy.

meanBehav %>%
    group_by(stimType) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanAcc))))

Compare reaction times over stimuli.

meanBehavAllStims %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanRT*1000))))
meanBehavAllStims %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m0 <- aov_ez(id = "ID", dv = "meanRT", within = "stimulusVerbal",
              data = dat)
summary(m0)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                Sum Sq num Df Error SS den Df   F value    Pr(>F)    
## (Intercept)    71.783      1  1.19798     29 1737.6899 < 2.2e-16 ***
## stimulusVerbal  0.062      7  0.19488    203    9.2562 6.237e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic p-value
## stimulusVerbal        0.58141 0.97814
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.87151   6.47e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                  HF eps   Pr(>F[HF])
## stimulusVerbal 1.129272 6.236841e-10
emmeans(m0, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean     SE df lower.CL upper.CL
##  blue            0.560 0.0136 29    0.532    0.588
##  green           0.558 0.0141 29    0.529    0.587
##  greenblue       0.550 0.0142 29    0.521    0.579
##  greenyellow     0.562 0.0137 29    0.534    0.590
##  red             0.509 0.0146 29    0.480    0.539
##  redblue         0.548 0.0155 29    0.517    0.580
##  redyellow       0.552 0.0139 29    0.524    0.581
##  yellow          0.536 0.0136 29    0.508    0.563
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate      SE df t.ratio p.value
##  blue - green             0.00245 0.00831 29   0.294  1.0000
##  blue - greenblue         0.01006 0.00810 29   1.242  1.0000
##  blue - greenyellow      -0.00136 0.00683 29  -0.199  1.0000
##  blue - red               0.05073 0.00786 29   6.451  <.0001
##  blue - redblue           0.01189 0.00852 29   1.394  1.0000
##  blue - redyellow         0.00804 0.00878 29   0.915  1.0000
##  blue - yellow            0.02439 0.00769 29   3.174  0.0674
##  green - greenblue        0.00761 0.00825 29   0.922  1.0000
##  green - greenyellow     -0.00380 0.00744 29  -0.511  1.0000
##  green - red              0.04828 0.00810 29   5.957  <.0001
##  green - redblue          0.00944 0.00846 29   1.115  1.0000
##  green - redyellow        0.00559 0.00896 29   0.624  1.0000
##  green - yellow           0.02195 0.00656 29   3.346  0.0466
##  greenblue - greenyellow -0.01142 0.00698 29  -1.636  1.0000
##  greenblue - red          0.04066 0.00735 29   5.531  0.0001
##  greenblue - redblue      0.00183 0.00841 29   0.217  1.0000
##  greenblue - redyellow   -0.00202 0.00792 29  -0.255  1.0000
##  greenblue - yellow       0.01433 0.00721 29   1.988  1.0000
##  greenyellow - red        0.05208 0.00760 29   6.851  <.0001
##  greenyellow - redblue    0.01324 0.00798 29   1.661  1.0000
##  greenyellow - redyellow  0.00940 0.00864 29   1.087  1.0000
##  greenyellow - yellow     0.02575 0.00659 29   3.907  0.0113
##  red - redblue           -0.03884 0.00731 29  -5.316  0.0003
##  red - redyellow         -0.04269 0.00811 29  -5.263  0.0003
##  red - yellow            -0.02633 0.00784 29  -3.356  0.0466
##  redblue - redyellow     -0.00385 0.00970 29  -0.397  1.0000
##  redblue - yellow         0.01251 0.00926 29   1.351  1.0000
##  redyellow - yellow       0.01636 0.00821 29   1.993  1.0000
## 
## P value adjustment: holm method for 28 tests

Compare staircased target contrast over stimuli.

meanBehavAllStimsStable %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanContrast*100))))
meanBehavAllStimsStable %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m1 <- aov_ez(id = "ID", dv = "meanContrast", within = "stimulusVerbal",
              data = dat)
summary(m1)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                 Sum Sq num Df Error SS den Df F value    Pr(>F)    
## (Intercept)    24.7034      1  0.78261     29 915.392 < 2.2e-16 ***
## stimulusVerbal  5.8773      7  2.07414    203  82.175 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic   p-value
## stimulusVerbal       0.088246 8.148e-05
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.58532  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## stimulusVerbal 0.6936535 1.873504e-39
m1
## Anova Table (Type 3 tests)
## 
## Response: meanContrast
##           Effect           df  MSE         F  ges p.value
## 1 stimulusVerbal 4.10, 118.82 0.02 82.17 *** .673   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(m1, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean     SE df lower.CL upper.CL
##  blue            0.709 0.0242 29    0.660    0.758
##  green           0.302 0.0141 29    0.273    0.331
##  greenblue       0.293 0.0139 29    0.265    0.322
##  greenyellow     0.204 0.0226 29    0.158    0.251
##  red             0.219 0.0148 29    0.189    0.250
##  redblue         0.372 0.0325 29    0.305    0.438
##  redyellow       0.199 0.0152 29    0.168    0.230
##  yellow          0.268 0.0170 29    0.234    0.303
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate     SE df t.ratio p.value
##  blue - green             0.40691 0.0255 29  15.951  <.0001
##  blue - greenblue         0.41573 0.0234 29  17.778  <.0001
##  blue - greenyellow       0.50470 0.0324 29  15.554  <.0001
##  blue - red               0.48963 0.0275 29  17.829  <.0001
##  blue - redblue           0.33735 0.0386 29   8.737  <.0001
##  blue - redyellow         0.51030 0.0285 29  17.902  <.0001
##  blue - yellow            0.44062 0.0282 29  15.652  <.0001
##  green - greenblue        0.00882 0.0164 29   0.538  1.0000
##  green - greenyellow      0.09779 0.0229 29   4.268  0.0027
##  green - red              0.08272 0.0176 29   4.693  0.0010
##  green - redblue         -0.06957 0.0332 29  -2.093  0.3042
##  green - redyellow        0.10339 0.0180 29   5.742  0.0001
##  green - yellow           0.03371 0.0160 29   2.112  0.3042
##  greenblue - greenyellow  0.08897 0.0265 29   3.353  0.0268
##  greenblue - red          0.07390 0.0177 29   4.167  0.0033
##  greenblue - redblue     -0.07838 0.0306 29  -2.563  0.1425
##  greenblue - redyellow    0.09457 0.0190 29   4.969  0.0005
##  greenblue - yellow       0.02490 0.0211 29   1.180  1.0000
##  greenyellow - red       -0.01507 0.0259 29  -0.581  1.0000
##  greenyellow - redblue   -0.16735 0.0315 29  -5.312  0.0002
##  greenyellow - redyellow  0.00560 0.0235 29   0.239  1.0000
##  greenyellow - yellow    -0.06408 0.0211 29  -3.033  0.0556
##  red - redblue           -0.15228 0.0318 29  -4.787  0.0008
##  red - redyellow          0.02067 0.0197 29   1.051  1.0000
##  red - yellow            -0.04900 0.0215 29  -2.284  0.2388
##  redblue - redyellow      0.17295 0.0356 29   4.863  0.0007
##  redblue - yellow         0.10328 0.0374 29   2.762  0.0986
##  redyellow - yellow      -0.06968 0.0154 29  -4.514  0.0015
## 
## P value adjustment: holm method for 28 tests

Test blue target contrast against all other colors.

meanBehavAllStimsStable %>%
  filter(stimulusVerbal != 'grating') %>%
  mutate(isBlue = factor(stimulusVerbal=='blue')) %>%
  group_by(isBlue, ID) %>%
  dplyr::summarize(meanContBN = mean(meanContrast)) %>%
  group_split(isBlue) -> s1

t.test(s1[[1]]$meanContBN, s1[[2]]$meanContBN, paired = TRUE)
## 
##  Paired t-test
## 
## data:  s1[[1]]$meanContBN and s1[[2]]$meanContBN
## t = -18.009, df = 29, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.4939853 -0.3932275
## sample estimates:
## mean of the differences 
##              -0.4436064

ERFs

Get averages over stimulus types

data %>% 
    filter(wasFixated==1) -> erfData
erfData %>% 
    group_by(ID, stimType) %>%
    dplyr::summarize(meanC1 = mean(C1, na.rm=TRUE)) %>%
    ungroup() -> meanERFType
erfData %>% 
    group_by(ID, stimulusVerbal) %>%
    dplyr::summarize(meanC1 = mean(C1, na.rm=TRUE)) %>%
    ungroup() -> meanERFStim

Compare between stimuli

meanERFStim %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanC1))))
meanERFStim %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m2 <- aov_ez(id = "ID", dv = "meanC1", within = "stimulusVerbal",
              data = dat)
summary(m2)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                 Sum Sq num Df Error SS den Df F value    Pr(>F)    
## (Intercept)    105.105      1  12.4569     29 244.686 1.133e-15 ***
## stimulusVerbal   6.489      7   6.2057    203  30.324 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic    p-value
## stimulusVerbal       0.025745 1.1315e-09
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.49773  2.474e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps  Pr(>F[HF])
## stimulusVerbal 0.5740092 2.45615e-17
m2
## Anova Table (Type 3 tests)
## 
## Response: meanC1
##           Effect           df  MSE         F  ges p.value
## 1 stimulusVerbal 3.48, 101.04 0.06 30.32 *** .258   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(m2, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean     SE df lower.CL upper.CL
##  blue           -0.330 0.0243 29   -0.379   -0.280
##  green          -0.627 0.0443 29   -0.718   -0.536
##  greenblue      -0.507 0.0331 29   -0.575   -0.439
##  greenyellow    -0.822 0.0621 29   -0.949   -0.695
##  red            -0.831 0.0664 29   -0.967   -0.695
##  redblue        -0.739 0.0577 29   -0.857   -0.622
##  redyellow      -0.635 0.0443 29   -0.726   -0.544
##  yellow         -0.803 0.0652 29   -0.936   -0.670
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate     SE df t.ratio p.value
##  blue - green             0.29716 0.0399 29   7.449  <.0001
##  blue - greenblue         0.17740 0.0312 29   5.684  0.0001
##  blue - greenyellow       0.49182 0.0513 29   9.580  <.0001
##  blue - red               0.50134 0.0616 29   8.141  <.0001
##  blue - redblue           0.40971 0.0527 29   7.773  <.0001
##  blue - redyellow         0.30512 0.0431 29   7.071  <.0001
##  blue - yellow            0.47337 0.0519 29   9.117  <.0001
##  green - greenblue       -0.11976 0.0254 29  -4.715  0.0008
##  green - greenyellow      0.19465 0.0298 29   6.536  <.0001
##  green - red              0.20418 0.0403 29   5.069  0.0003
##  green - redblue          0.11254 0.0361 29   3.115  0.0371
##  green - redyellow        0.00796 0.0338 29   0.235  1.0000
##  green - yellow           0.17621 0.0475 29   3.709  0.0096
##  greenblue - greenyellow  0.31442 0.0445 29   7.063  <.0001
##  greenblue - red          0.32394 0.0486 29   6.662  <.0001
##  greenblue - redblue      0.23231 0.0412 29   5.637  0.0001
##  greenblue - redyellow    0.12772 0.0302 29   4.223  0.0028
##  greenblue - yellow       0.29597 0.0515 29   5.749  0.0001
##  greenyellow - red        0.00953 0.0490 29   0.194  1.0000
##  greenyellow - redblue   -0.08211 0.0449 29  -1.829  0.4662
##  greenyellow - redyellow -0.18670 0.0472 29  -3.956  0.0054
##  greenyellow - yellow    -0.01845 0.0360 29  -0.512  1.0000
##  red - redblue           -0.09164 0.0268 29  -3.423  0.0187
##  red - redyellow         -0.19622 0.0418 29  -4.690  0.0008
##  red - yellow            -0.02798 0.0661 29  -0.423  1.0000
##  redblue - redyellow     -0.10458 0.0381 29  -2.746  0.0717
##  redblue - yellow         0.06366 0.0600 29   1.062  1.0000
##  redyellow - yellow       0.16825 0.0586 29   2.872  0.0603
## 
## P value adjustment: holm method for 28 tests

Check if ERF slope differs between hues

ERFparam %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

mS <- aov_ez(id = "ID", dv = "erfSlopeZ", within = "stimulusVerbal",
              data = dat)
summary(mS)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                Sum Sq num Df Error SS den Df  F value    Pr(>F)    
## (Intercept)    288305      1    81168     29 103.0067 4.711e-11 ***
## stimulusVerbal  23619      7    90951    203   7.5311 4.601e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic  p-value
## stimulusVerbal        0.16175 0.007808
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.69794   3.27e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## stimulusVerbal 0.8564391 3.471194e-07
mS
## Anova Table (Type 3 tests)
## 
## Response: erfSlopeZ
##           Effect           df    MSE        F  ges p.value
## 1 stimulusVerbal 4.89, 141.68 641.94 7.53 *** .121   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(mS, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean   SE df lower.CL upper.CL
##  blue            -13.6 1.48 29    -16.7    -10.6
##  green           -28.2 5.17 29    -38.8    -17.7
##  greenblue       -28.1 3.90 29    -36.0    -20.1
##  greenyellow     -37.2 4.92 29    -47.3    -27.1
##  red             -41.6 6.31 29    -54.5    -28.7
##  redblue         -44.4 6.37 29    -57.4    -31.4
##  redyellow       -41.1 5.44 29    -52.3    -30.0
##  yellow          -43.0 4.42 29    -52.0    -33.9
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate   SE df t.ratio p.value
##  blue - green              14.595 5.70 29   2.561  0.2836
##  blue - greenblue          14.418 4.32 29   3.339  0.0511
##  blue - greenyellow        23.551 4.71 29   4.997  0.0007
##  blue - red                27.950 5.85 29   4.778  0.0011
##  blue - redblue            30.760 6.18 29   4.974  0.0007
##  blue - redyellow          27.496 5.47 29   5.024  0.0006
##  blue - yellow             29.348 4.16 29   7.049  <.0001
##  green - greenblue         -0.176 3.95 29  -0.045  1.0000
##  green - greenyellow        8.956 5.06 29   1.771  1.0000
##  green - red               13.356 5.47 29   2.441  0.3357
##  green - redblue           16.166 6.07 29   2.661  0.2386
##  green - redyellow         12.901 5.41 29   2.384  0.3580
##  green - yellow            14.754 6.61 29   2.232  0.4686
##  greenblue - greenyellow    9.132 5.11 29   1.789  1.0000
##  greenblue - red           13.532 5.28 29   2.565  0.2836
##  greenblue - redblue       16.342 4.82 29   3.390  0.0467
##  greenblue - redyellow     13.077 3.94 29   3.318  0.0515
##  greenblue - yellow        14.930 5.51 29   2.708  0.2246
##  greenyellow - red          4.400 5.54 29   0.795  1.0000
##  greenyellow - redblue      7.210 6.46 29   1.117  1.0000
##  greenyellow - redyellow    3.945 6.18 29   0.639  1.0000
##  greenyellow - yellow       5.798 4.96 29   1.168  1.0000
##  red - redblue              2.810 4.53 29   0.620  1.0000
##  red - redyellow           -0.455 5.13 29  -0.089  1.0000
##  red - yellow               1.398 5.84 29   0.239  1.0000
##  redblue - redyellow       -3.265 5.88 29  -0.555  1.0000
##  redblue - yellow          -1.412 6.61 29  -0.213  1.0000
##  redyellow - yellow         1.852 6.68 29   0.277  1.0000
## 
## P value adjustment: holm method for 28 tests

Check if ERF peak time differs between hues

ERFparam %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$erfPeakTime*1000))))
ERFparam %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

mS <- aov_ez(id = "ID", dv = "erfPeakTime", within = "stimulusVerbal",
              data = dat)
summary(mS)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                 Sum Sq num Df  Error SS den Df   F value    Pr(>F)    
## (Intercept)    1.59455      1 0.0123737     29 3737.0975 < 2.2e-16 ***
## stimulusVerbal 0.00264      7 0.0078385    203    9.7811 1.728e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic    p-value
## stimulusVerbal       0.062364 4.2686e-06
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.55036   1.13e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## stimulusVerbal 0.6452016 1.751468e-07
mS
## Anova Table (Type 3 tests)
## 
## Response: erfPeakTime
##           Effect           df  MSE        F  ges p.value
## 1 stimulusVerbal 3.85, 111.72 0.00 9.78 *** .116   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(mS, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean      SE df lower.CL upper.CL
##  blue           0.0886 0.00194 29   0.0846   0.0925
##  green          0.0809 0.00169 29   0.0775   0.0844
##  greenblue      0.0794 0.00191 29   0.0755   0.0833
##  greenyellow    0.0825 0.00142 29   0.0796   0.0854
##  red            0.0779 0.00175 29   0.0743   0.0815
##  redblue        0.0788 0.00165 29   0.0754   0.0821
##  redyellow      0.0796 0.00169 29   0.0762   0.0831
##  yellow         0.0844 0.00151 29   0.0813   0.0875
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                 estimate      SE df t.ratio p.value
##  blue - green             0.007639 0.00235 29   3.252  0.0611
##  blue - greenblue         0.009194 0.00235 29   3.912  0.0122
##  blue - greenyellow       0.006028 0.00222 29   2.715  0.2101
##  blue - red               0.010639 0.00201 29   5.286  0.0003
##  blue - redblue           0.009806 0.00198 29   4.940  0.0008
##  blue - redyellow         0.008917 0.00212 29   4.212  0.0058
##  blue - yellow            0.004139 0.00230 29   1.800  0.9871
##  green - greenblue        0.001556 0.00135 29   1.155  1.0000
##  green - greenyellow     -0.001611 0.00116 29  -1.386  1.0000
##  green - red              0.003000 0.00111 29   2.698  0.2101
##  green - redblue          0.002167 0.00122 29   1.779  0.9871
##  green - redyellow        0.001278 0.00130 29   0.980  1.0000
##  green - yellow          -0.003500 0.00170 29  -2.058  0.6333
##  greenblue - greenyellow -0.003167 0.00129 29  -2.454  0.3059
##  greenblue - red          0.001444 0.00120 29   1.207  1.0000
##  greenblue - redblue      0.000611 0.00121 29   0.504  1.0000
##  greenblue - redyellow   -0.000278 0.00100 29  -0.277  1.0000
##  greenblue - yellow      -0.005056 0.00190 29  -2.666  0.2112
##  greenyellow - red        0.004611 0.00111 29   4.152  0.0066
##  greenyellow - redblue    0.003778 0.00127 29   2.984  0.1144
##  greenyellow - redyellow  0.002889 0.00126 29   2.302  0.4022
##  greenyellow - yellow    -0.001889 0.00133 29  -1.425  1.0000
##  red - redblue           -0.000833 0.00101 29  -0.823  1.0000
##  red - redyellow         -0.001722 0.00124 29  -1.383  1.0000
##  red - yellow            -0.006500 0.00180 29  -3.617  0.0246
##  redblue - redyellow     -0.000889 0.00114 29  -0.777  1.0000
##  redblue - yellow        -0.005667 0.00146 29  -3.890  0.0124
##  redyellow - yellow      -0.004778 0.00182 29  -2.630  0.2163
## 
## P value adjustment: holm method for 28 tests

Test grating ERF vs color ERF.

meanERFType %>%
  group_split(stimType) -> s1

t.test(s1[[1]]$meanC1, s1[[2]]$meanC1, paired = TRUE)
## 
##  Paired t-test
## 
## data:  s1[[1]]$meanC1 and s1[[2]]$meanC1
## t = 6.7974, df = 29, p-value = 1.835e-07
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.3568385 0.6639926
## sample estimates:
## mean of the differences 
##               0.5104155

Gamma power and frequency

Get average per-subject gamma power and frequency per stimulus

data %>% 
    filter(wasFixated==1) -> gammaData
gammaData %>% 
    group_by(ID, stimType) %>%
    dplyr::summarize(meanGPower = mean(percGammapower, na.rm=TRUE),
                     meanGFreq = mean(realGammapeak, na.rm=TRUE)) %>%
    ungroup() -> meanGP
gammaData %>% 
    group_by(ID, stimulusVerbal) %>%
    dplyr::summarize(meanGPower = mean(percGammapower, na.rm=TRUE),
                     meanGFreq = mean(realGammapeak, na.rm=TRUE)) %>%
    ungroup() -> meanGPStims
peaks %>%
  group_by(ID, stimType) %>%
  dplyr::summarize(meanPeak1 = mean(peak1, na.rm=TRUE),
                   meanPeak2 = mean(peak2, na.rm=TRUE)) %>%
  ungroup() -> peaksStimtype

Compare gamma power between stimulus types

meanGP %>%
    group_by(stimType) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanGPower))))
meanGP %>%
  group_split(stimType) -> s1

t.test(s1[[1]]$meanGPower, s1[[2]]$meanGPower, paired = TRUE)
## 
##  Paired t-test
## 
## data:  s1[[1]]$meanGPower and s1[[2]]$meanGPower
## t = -8.3195, df = 29, p-value = 3.594e-09
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -100.22417  -60.67036
## sample estimates:
## mean of the differences 
##               -80.44727

Compare gamma frequency between stimulus types

peaksStimtype %>%
    group_by(stimType) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanPeak1, na.rm=TRUE))))
peaksStimtype %>%
  group_split(stimType) -> s1

t.test(s1[[1]]$meanPeak1, s1[[2]]$meanPeak1, paired = TRUE)
## 
##  Paired t-test
## 
## data:  s1[[1]]$meanPeak1 and s1[[2]]$meanPeak1
## t = -4.2483, df = 27, p-value = 0.0002288
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -7.146827 -2.491694
## sample estimates:
## mean of the differences 
##                -4.81926
cor.test(s1[[1]]$meanPeak1, s1[[2]]$meanPeak1)
## 
##  Pearson's product-moment correlation
## 
## data:  s1[[1]]$meanPeak1 and s1[[2]]$meanPeak1
## t = 4.2245, df = 26, p-value = 0.0002598
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3476463 0.8166744
## sample estimates:
##       cor 
## 0.6379782
peaksStimtype %>%
    group_by(stimType) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanPeak2, na.rm=TRUE)))) 
t.test(s1[[1]]$meanPeak2, s1[[2]]$meanPeak2, paired = TRUE)
## 
##  Paired t-test
## 
## data:  s1[[1]]$meanPeak2 and s1[[2]]$meanPeak2
## t = 0.54335, df = 1, p-value = 0.6831
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -110.1574  119.9996
## sample estimates:
## mean of the differences 
##                 4.92107

Compare gamma power between stimuli

meanGPStims %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$meanGPower))))
meanGPStims %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m3 <- aov_ez(id = "ID", dv = "meanGPower", within = "stimulusVerbal",
              data = dat)
summary(m3)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                Sum Sq num Df Error SS den Df F value    Pr(>F)    
## (Intercept)     89061      1    56055     29  46.076 1.882e-07 ***
## stimulusVerbal  24256      7    48400    203  14.534 2.728e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic    p-value
## stimulusVerbal      0.0002407 8.3231e-32
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.33968  1.442e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## stimulusVerbal 0.3720514 5.320935e-07
m3
## Anova Table (Type 3 tests)
## 
## Response: meanGPower
##           Effect          df    MSE         F  ges p.value
## 1 stimulusVerbal 2.38, 68.96 701.90 14.53 *** .188   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(m3, specs = pairwise~stimulusVerbal, adjust ='none')
## $emmeans
##  stimulusVerbal emmean   SE df lower.CL upper.CL
##  blue             2.25 1.05 29    0.106     4.38
##  green           31.19 5.43 29   20.094    42.29
##  greenblue       15.72 2.53 29   10.557    20.89
##  greenyellow     30.86 5.13 29   20.363    41.36
##  red             30.83 6.15 29   18.242    43.42
##  redblue         17.36 2.53 29   12.177    22.54
##  redyellow       10.46 1.96 29    6.454    14.46
##  yellow          15.44 2.94 29    9.423    21.46
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate   SE df t.ratio p.value
##  blue - green            -28.9475 5.49 29  -5.269  <.0001
##  blue - greenblue        -13.4777 2.46 29  -5.474  <.0001
##  blue - greenyellow      -28.6167 5.40 29  -5.303  <.0001
##  blue - red              -28.5837 6.13 29  -4.661  0.0001
##  blue - redblue          -15.1117 2.57 29  -5.876  <.0001
##  blue - redyellow         -8.2111 1.96 29  -4.195  0.0002
##  blue - yellow           -13.1973 3.29 29  -4.017  0.0004
##  green - greenblue        15.4698 3.27 29   4.725  0.0001
##  green - greenyellow       0.3309 3.80 29   0.087  0.9312
##  green - red               0.3638 2.70 29   0.135  0.8939
##  green - redblue          13.8358 3.81 29   3.632  0.0011
##  green - redyellow        20.7364 4.43 29   4.677  0.0001
##  green - yellow           15.7502 4.91 29   3.206  0.0033
##  greenblue - greenyellow -15.1390 4.07 29  -3.724  0.0008
##  greenblue - red         -15.1060 4.39 29  -3.439  0.0018
##  greenblue - redblue      -1.6340 1.75 29  -0.933  0.3583
##  greenblue - redyellow     5.2666 1.70 29   3.093  0.0043
##  greenblue - yellow        0.2804 3.14 29   0.089  0.9294
##  greenyellow - red         0.0329 4.61 29   0.007  0.9944
##  greenyellow - redblue    13.5050 3.63 29   3.716  0.0009
##  greenyellow - redyellow  20.4056 5.06 29   4.035  0.0004
##  greenyellow - yellow     15.4193 3.18 29   4.849  <.0001
##  red - redblue            13.4720 4.13 29   3.261  0.0028
##  red - redyellow          20.3726 5.42 29   3.756  0.0008
##  red - yellow             15.3864 5.93 29   2.597  0.0146
##  redblue - redyellow       6.9006 2.49 29   2.770  0.0097
##  redblue - yellow          1.9144 2.79 29   0.686  0.4980
##  redyellow - yellow       -4.9862 3.56 29  -1.399  0.1725

Compare gamma power between red and green - Bayes factor

meanGPStims %>% ungroup() %>%
    filter(stimulusVerbal == "red" | stimulusVerbal == "green") %>%
    group_split(stimulusVerbal)-> s

1/ttestBF(s[[1]]$meanGPower, s[[2]]$meanGPower, paired = TRUE, rscale = 1)
## Bayes factor analysis
## --------------
## [1] Null, mu=0 : 7.01814 ±0.01%
## 
## Against denominator:
##   Alternative, r = 1, mu =/= 0 
## ---
## Bayes factor type: BFoneSample, JZS

Check how many peaks were fitted for all stimuli

peaks %>% ungroup() %>%
  group_by(stimType,ID) %>%
  dplyr::summarize(onePeak1Found = paste("Peak1", 
                                         as.character(sum(peak1found)>0)),
                   onePeak2Found = paste("Peak2", 
                                         as.character(sum(peak2found)>0))) -> d
prop.table(table(d$stimType, d$onePeak1Found),1)
##          
##           Peak1 FALSE Peak1 TRUE
##   color    0.03333333 0.96666667
##   grating  0.03333333 0.96666667
infer::prop_test(d, response = onePeak1Found, explanatory = stimType, 
                 success = "Peak1 TRUE")
prop.table(table(d$stimType, d$onePeak2Found),1)
##          
##           Peak2 FALSE Peak2 TRUE
##   color     0.1000000  0.9000000
##   grating   0.8666667  0.1333333
infer::prop_test(d, response = onePeak2Found, explanatory = stimType, 
                 success = "Peak2 TRUE")

Compare the lower gamma peak frequency between stimuli

peaks %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$peak1))))
peaks %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m4 <- aov_ez(id = "ID", dv = "peak1", within = "stimulusVerbal",
              data = dat)
summary(m4)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                Sum Sq num Df Error SS den Df  F value    Pr(>F)    
## (Intercept)    113054      1   1894.4      5 298.3851 1.191e-05 ***
## stimulusVerbal    785      7   1374.0     35   2.8559    0.0182 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m4
## Anova Table (Type 3 tests)
## 
## Response: peak1
##           Effect    df   MSE      F  ges p.value
## 1 stimulusVerbal 7, 35 39.26 2.86 * .194    .018
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(m4, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean   SE df lower.CL upper.CL
##  blue             49.3 2.26  5     43.5     55.2
##  green            46.1 2.49  5     39.7     52.5
##  greenblue        44.5 4.94  5     31.8     57.2
##  greenyellow      45.6 2.72  5     38.6     52.6
##  red              48.5 4.07  5     38.0     58.9
##  redblue          47.0 5.36  5     33.2     60.8
##  redyellow        58.4 2.33  5     52.4     64.3
##  yellow           48.9 3.88  5     38.9     58.9
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate   SE df t.ratio p.value
##  blue - green               3.248 3.71  5   0.876  1.0000
##  blue - greenblue           4.843 5.58  5   0.868  1.0000
##  blue - greenyellow         3.780 3.24  5   1.166  1.0000
##  blue - red                 0.874 4.83  5   0.181  1.0000
##  blue - redblue             2.313 5.24  5   0.442  1.0000
##  blue - redyellow          -9.024 2.67  5  -3.379  0.5318
##  blue - yellow              0.424 4.36  5   0.097  1.0000
##  green - greenblue          1.595 2.63  5   0.607  1.0000
##  green - greenyellow        0.532 1.17  5   0.453  1.0000
##  green - red               -2.374 2.10  5  -1.129  1.0000
##  green - redblue           -0.935 3.75  5  -0.250  1.0000
##  green - redyellow        -12.272 3.70  5  -3.313  0.5504
##  green - yellow            -2.824 1.83  5  -1.543  1.0000
##  greenblue - greenyellow   -1.063 2.54  5  -0.418  1.0000
##  greenblue - red           -3.969 1.94  5  -2.045  1.0000
##  greenblue - redblue       -2.530 3.07  5  -0.824  1.0000
##  greenblue - redyellow    -13.867 5.59  5  -2.481  1.0000
##  greenblue - yellow        -4.419 2.23  5  -1.983  1.0000
##  greenyellow - red         -2.906 2.31  5  -1.257  1.0000
##  greenyellow - redblue     -1.467 2.95  5  -0.497  1.0000
##  greenyellow - redyellow  -12.804 3.38  5  -3.790  0.3572
##  greenyellow - yellow      -3.356 1.47  5  -2.277  1.0000
##  red - redblue              1.438 4.29  5   0.336  1.0000
##  red - redyellow           -9.898 4.66  5  -2.126  1.0000
##  red - yellow              -0.450 2.69  5  -0.167  1.0000
##  redblue - redyellow      -11.337 5.74  5  -1.975  1.0000
##  redblue - yellow          -1.889 2.16  5  -0.875  1.0000
##  redyellow - yellow         9.448 4.67  5   2.022  1.0000
## 
## P value adjustment: holm method for 28 tests

Compare the higher gamma peak frequency between stimuli

As the second peak is missing for many participant-stimulus combinations, we’re using a linear mixed-model instead of a RMANOVA here.

peaks %>%
    group_by(stimulusVerbal) %>%
    do(data.frame(rbind(Hmisc::smean.cl.boot(.$peak2))))
peaks %>% ungroup() %>%
    filter(stimulusVerbal != "grating") -> dat

m5 <- lmer(peak2 ~ (1|ID) + stimulusVerbal, data = dat)
anova(m5)
emmeans(m5, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean   SE   df lower.CL upper.CL
##  blue             97.4 3.04 94.9     91.3    103.4
##  green            94.2 2.39 94.6     89.5     98.9
##  greenblue        96.1 2.39 94.6     91.4    100.9
##  greenyellow      96.2 2.30 94.3     91.6    100.7
##  red              96.7 2.30 94.4     92.1    101.2
##  redblue          95.2 2.03 92.8     91.1     99.2
##  redyellow        96.3 2.59 94.9     91.1    101.4
##  yellow          102.6 2.48 94.9     97.7    107.5
## 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate   SE   df t.ratio p.value
##  blue - green              3.1797 3.81 93.0   0.834  1.0000
##  blue - greenblue          1.2634 3.84 94.0   0.329  1.0000
##  blue - greenyellow        1.2301 3.72 91.0   0.331  1.0000
##  blue - red                0.7089 3.72 90.8   0.191  1.0000
##  blue - redblue            2.2165 3.58 92.4   0.619  1.0000
##  blue - redyellow          1.1200 3.96 93.8   0.283  1.0000
##  blue - yellow            -5.1986 3.84 91.4  -1.352  1.0000
##  green - greenblue        -1.9164 3.23 82.3  -0.593  1.0000
##  green - greenyellow      -1.9497 3.13 76.9  -0.623  1.0000
##  green - red              -2.4708 3.13 77.1  -0.789  1.0000
##  green - redblue          -0.9632 2.98 79.8  -0.323  1.0000
##  green - redyellow        -2.0597 3.36 80.7  -0.612  1.0000
##  green - yellow           -8.3783 3.31 83.2  -2.531  0.3712
##  greenblue - greenyellow  -0.0333 3.19 84.3  -0.010  1.0000
##  greenblue - red          -0.5544 3.18 82.9  -0.174  1.0000
##  greenblue - redblue       0.9532 3.01 83.5   0.317  1.0000
##  greenblue - redyellow    -0.1434 3.40 85.0  -0.042  1.0000
##  greenblue - yellow       -6.4619 3.32 84.5  -1.944  1.0000
##  greenyellow - red        -0.5211 3.08 77.8  -0.169  1.0000
##  greenyellow - redblue     0.9865 2.90 77.5   0.340  1.0000
##  greenyellow - redyellow  -0.1101 3.33 83.3  -0.033  1.0000
##  greenyellow - yellow     -6.4286 3.26 83.8  -1.973  1.0000
##  red - redblue             1.5076 2.91 79.0   0.518  1.0000
##  red - redyellow           0.4110 3.35 85.0   0.123  1.0000
##  red - yellow             -5.9075 3.26 83.6  -1.814  1.0000
##  redblue - redyellow      -1.0966 3.16 83.2  -0.346  1.0000
##  redblue - yellow         -7.4151 3.09 84.7  -2.400  0.5017
##  redyellow - yellow       -6.3185 3.44 81.6  -1.838  1.0000
## 
## Degrees-of-freedom method: kenward-roger 
## P value adjustment: holm method for 28 tests

Control analyses 1: Controlling for drive as measured by the ERF

Merge datasets

meanGPStims %>% inner_join(ERFparam) %>%
    inner_join(meanERFStim) %>%
    inner_join(ERFparam) %>%
    inner_join(meanBehavAllStims) %>%
    inner_join(meanBehavAllStimsStable) %>%
    filter(stimulusVerbal != "grating") -> fullDat

Test for ERF-gamma power correlations

fullDat %>% group_by(ID) %>%
  summarise(corERFGamma = cor(meanC1, meanGPower)) -> particCop

Hmisc::smean.cl.boot(particCop$corERFGamma)
##       Mean      Lower      Upper 
## -0.3819432 -0.4831535 -0.2755984
wilcox.test(particCop$corERFGamma, mu=0)
## 
##  Wilcoxon signed rank exact test
## 
## data:  particCop$corERFGamma
## V = 30, p-value = 3.79e-06
## alternative hypothesis: true location is not equal to 0

Compare gamma power between stimuli, taking ERF slope and amplitude into account

m3c <- lmer(meanGPower ~ (1|ID) + meanC1 + erfSlopeZ , data = fullDat)
fullDat$resid <- residuals(m3c)

m3c <- aov_ez(id = "ID", dv = "resid", within = "stimulusVerbal",
              data = fullDat)
summary(m3c)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##                Sum Sq num Df Error SS den Df F value    Pr(>F)    
## (Intercept)         0      1     1349     29  0.0000         1    
## stimulusVerbal  15245      7    50378    203  8.7757 2.041e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##                Test statistic    p-value
## stimulusVerbal      0.0005407 9.2457e-28
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##                 GG eps Pr(>F[GG])    
## stimulusVerbal 0.33207  0.0002063 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                   HF eps   Pr(>F[HF])
## stimulusVerbal 0.3627392 0.0001202639
m3c
## Anova Table (Type 3 tests)
## 
## Response: resid
##           Effect          df    MSE        F  ges p.value
## 1 stimulusVerbal 2.32, 67.41 747.35 8.78 *** .228   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## 
## Sphericity correction method: GG
emmeans(m3c, specs = pairwise~stimulusVerbal, adjust ='holm')
## $emmeans
##  stimulusVerbal emmean   SE df lower.CL upper.CL
##  blue           -11.23 2.77 29  -16.890   -5.574
##  green           12.09 3.25 29    5.438   18.746
##  greenblue       -0.51 1.14 29   -2.836    1.816
##  greenyellow      8.01 3.24 29    1.379   14.650
##  red              8.22 4.22 29   -0.424   16.854
##  redblue         -2.75 1.26 29   -5.322   -0.183
##  redyellow       -7.48 2.09 29  -11.746   -3.208
##  yellow          -6.35 2.37 29  -11.199   -1.501
## 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast                estimate   SE df t.ratio p.value
##  blue - green             -23.324 5.73 29  -4.070  0.0089
##  blue - greenblue         -10.722 2.71 29  -3.963  0.0111
##  blue - greenyellow       -19.246 5.50 29  -3.499  0.0305
##  blue - red               -19.447 6.63 29  -2.933  0.1104
##  blue - redblue            -8.480 3.09 29  -2.749  0.1528
##  blue - redyellow          -3.755 2.43 29  -1.543  0.9353
##  blue - yellow             -4.882 2.96 29  -1.651  0.8830
##  green - greenblue         12.603 3.23 29   3.904  0.0125
##  green - greenyellow        4.078 3.73 29   1.094  1.0000
##  green - red                3.877 2.88 29   1.348  1.0000
##  green - redblue           14.845 3.80 29   3.902  0.0125
##  green - redyellow         19.569 4.37 29   4.478  0.0030
##  green - yellow            18.442 5.05 29   3.650  0.0215
##  greenblue - greenyellow   -8.525 4.02 29  -2.121  0.5108
##  greenblue - red           -8.726 4.43 29  -1.972  0.6408
##  greenblue - redblue        2.242 1.98 29   1.133  1.0000
##  greenblue - redyellow      6.967 1.86 29   3.745  0.0175
##  greenblue - yellow         5.839 3.07 29   1.902  0.6714
##  greenyellow - red         -0.201 4.61 29  -0.044  1.0000
##  greenyellow - redblue     10.767 3.40 29   3.170  0.0680
##  greenyellow - redyellow   15.491 4.90 29   3.160  0.0680
##  greenyellow - yellow      14.364 3.55 29   4.046  0.0092
##  red - redblue             10.968 4.19 29   2.620  0.1939
##  red - redyellow           15.692 5.49 29   2.857  0.1254
##  red - yellow              14.565 6.10 29   2.387  0.3087
##  redblue - redyellow        4.724 2.76 29   1.709  0.8830
##  redblue - yellow           3.597 2.70 29   1.333  1.0000
##  redyellow - yellow        -1.127 3.35 29  -0.337  1.0000
## 
## P value adjustment: holm method for 28 tests

Compare gamma power between red and green while controlling for ERF measures - Bayes factor

fullDat %>% ungroup() %>%
    filter(stimulusVerbal == "red" | stimulusVerbal == "green") %>%
    group_split(stimulusVerbal)-> s

1/ttestBF(s[[1]]$resid, s[[2]]$resid, paired = TRUE, rscale = 1)
## Bayes factor analysis
## --------------
## [1] Null, mu=0 : 2.998587 ±0.02%
## 
## Against denominator:
##   Alternative, r = 1, mu =/= 0 
## ---
## Bayes factor type: BFoneSample, JZS

Control analyses 2: Analysing red-green ratios in behavior, ERF and gamma

fullDat %>% ungroup() %>%
  filter(stimulusVerbal == "red" | stimulusVerbal == "green") %>%
  group_by(ID) %>%
  summarise(LMratioERF = meanC1[stimulusVerbal == "red"]/
              meanC1[stimulusVerbal == "green"],
            LMratioGamma = meanGPower[stimulusVerbal == "red"]/
              meanGPower[stimulusVerbal == "green"],
            LMratioContrast = meanContrast[stimulusVerbal == "red"]/
              meanContrast[stimulusVerbal == "green"]) %>%
  ungroup() -> LMratios
  
Hmisc::smean.cl.boot(1/LMratios$LMratioContrast)
##     Mean    Lower    Upper 
## 1.479354 1.317237 1.641987
range(1/LMratios$LMratioContrast)
## [1] 0.6459659 2.6971367
cor.test(LMratios$LMratioContrast, LMratios$LMratioERF, method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  LMratios$LMratioContrast and LMratios$LMratioERF
## S = 4104, p-value = 0.6465
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.08698554
1/correlationBF(rank(LMratios$LMratioContrast, ties.method = "average"), 
              rank(LMratios$LMratioERF, ties.method = "average"), rscale = 1)
## Bayes factor analysis
## --------------
## [1] Null, rho = 0 : 3.988183 ±0%
## 
## Against denominator:
##   Alternative, r = 1, rho =/= 0 
## ---
## Bayes factor type: BFcorrelation, Jeffreys-beta*
cor.test(LMratios$LMratioContrast, LMratios$LMratioGamma, method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  LMratios$LMratioContrast and LMratios$LMratioGamma
## S = 5244, p-value = 0.3772
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## -0.1666296
1/correlationBF(rank(LMratios$LMratioContrast, ties.method = "average"), 
              rank(LMratios$LMratioGamma, ties.method = "average"), rscale = 1)
## Bayes factor analysis
## --------------
## [1] Null, rho = 0 : 3.043981 ±0%
## 
## Against denominator:
##   Alternative, r = 1, rho =/= 0 
## ---
## Bayes factor type: BFcorrelation, Jeffreys-beta*

Methods

Number of excluded trials

nanCounts <- data %>% 
    group_by(ID) %>%
    dplyr::summarize(non_na_count = sum(!is.na(gammapower)))
sprintf('Gamma power reported in %.0f%% of trials.', 
        100*(mean(nanCounts$non_na_count)/540))
## [1] "Gamma power reported in 81% of trials."