load packages

library(tidyverse)
library(here)
library(janitor)

read combined clean data

clean_data <- read_csv(here("data", "combined", "1_clean_combined.csv"))

select just baseline

Arrange by pp, emotion, muscle. Add an empty bl_outlier column.

bl <- clean_data %>%
  filter(bin == "bin_0") %>%
  arrange(pp_no, emotion,  muscle) %>%
  mutate(bl_outlier = "")

stim <- clean_data %>%
  filter(bin != "bin_0") %>%
  arrange(pp_no, emotion,  muscle) %>%
  mutate(bl_outlier = "")

add mean, sd columns

add mean and sd columns AND TRUE FALSE if bl_rms value is > 1.5sd above the mean for the participant, emotion, muscle

bl_screen <- bl %>%
  group_by(pp_no, emotion, muscle) %>%
  mutate(meanRMS = mean(rms), sdRMS = sd(rms)) %>%
  mutate(bl_outlier = if_else(rms > meanRMS + 1.5*sdRMS, "TRUE", "FALSE"))

count how many trials have bad baseline

glimpse(bl_screen)
## Rows: 3,184
## Columns: 11
## Groups: pp_no, emotion, muscle [398]
## $ pp_no      <chr> "pp401", "pp401", "pp401", "pp401", "pp401", "pp401",…
## $ condition  <chr> "dyn", "dyn", "dyn", "dyn", "dyn", "dyn", "dyn", "dyn…
## $ emotion    <dbl> 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626…
## $ bin        <chr> "bin_0", "bin_0", "bin_0", "bin_0", "bin_0", "bin_0",…
## $ bin_no     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ trial      <chr> "trial1", "trial2", "trial3", "trial4", "trial5", "tr…
## $ muscle     <chr> "brow", "brow", "brow", "brow", "brow", "brow", "brow…
## $ rms        <dbl> 10.7942, 8.6127, 11.0856, 12.0263, 11.1572, 8.7479, 9…
## $ bl_outlier <chr> "FALSE", "FALSE", "FALSE", "FALSE", "FALSE", "FALSE",…
## $ meanRMS    <dbl> 9.892425, 9.892425, 9.892425, 9.892425, 9.892425, 9.8…
## $ sdRMS      <dbl> 1.626683, 1.626683, 1.626683, 1.626683, 1.626683, 1.6…
bl_screen$bl_outlier <- as.logical(bl_screen$bl_outlier)

bl_screen %>%
  group_by(pp_no, emotion, muscle) %>%
  summarise(trialcount = n(), trialbad = sum(bl_outlier))
## # A tibble: 398 x 5
## # Groups:   pp_no, emotion [199]
##    pp_no emotion muscle trialcount trialbad
##    <chr>   <dbl> <chr>       <int>    <int>
##  1 pp401     626 brow            8        0
##  2 pp401     626 cheek           8        0
##  3 pp401     727 brow            8        1
##  4 pp401     727 cheek           8        1
##  5 pp401     828 brow            8        0
##  6 pp401     828 cheek           8        1
##  7 pp401     929 brow            8        1
##  8 pp401     929 cheek           8        1
##  9 pp402     626 brow            8        0
## 10 pp402     626 cheek           8        1
## # … with 388 more rows

drop extra variables to prep for bl_stim bind

bl_bind <- bl_screen %>%
  select(pp_no:rms, bl_outlier)

stim$bl_outlier <- as.logical(stim$bl_outlier) # bind only works if data type is the same in both dfs, change stim outlier col to logicalback to char

Bind bl and stim back together using bind_rows and then sort. Use fill to complete empty cells in the bl_outlier column.

bl_stim <- bind_rows(bl_bind, stim) %>%
  arrange(pp_no, emotion, trial, muscle, bin_no) %>%
   fill(bl_outlier)

filter out whole trials with bl outliers, write to csv

no_bl_outliers <- bl_stim %>%
  filter(bl_outlier == FALSE) %>%
  select(-bl_outlier)

no_bl_outliers %>%
  write_csv(here("data", "combined", "2_clean_no_bl_outliers.csv"))

filter keep only outlier trials, write to csv

Just in case you need to refer to which trials were thrown out later

just_bl_outliers <- bl_stim %>%
  filter(bl_outlier == TRUE) 

just_bl_outliers %>%
  write_csv(here("data", "combined", "3_clean_just_bl_outliers.csv"))