-
Notifications
You must be signed in to change notification settings - Fork 1
/
setup-behavioral-data.R
105 lines (92 loc) · 3.65 KB
/
setup-behavioral-data.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#! /usr/bin/env Rscript
# ================================
# Script 'setup-behavioral-data.R'
# ================================
# This script reads in behavioral data from two psychoacoustics experiments
# (vocoder/reverb) and sets up the data frames for mixed effects modelling.
#
# Author: Dan McCloy <[email protected]>
# License: BSD (3-clause)
# file paths
data_dir <- "data-behavioral"
out_dir <- "models"
rev_fname <- file.path(data_dir, "rev-behdata-xlongform.tsv")
voc_fname <- file.path(data_dir, "voc-behdata-xlongform.tsv")
# data types
common_cols <- c(subj="integer", block="integer", trial="integer",
run_index="integer", attn="character", hit="logical",
miss="logical", fals="logical", crej="logical", frsp="logical",
slot="integer", attn_lett="character", mask_lett="character",
targ="logical", foil="logical", press="logical",
onset="numeric", press_time="numeric", reax_time="numeric")
# add in the experiment-specific variables
rev_cols <- c(common_cols, reverb="character", gender="character")
voc_cols <- c(common_cols, voc_chan="character", gap_len="character")
# read in data
rev_df <- read.delim(rev_fname, sep="\t", colClasses=rev_cols)
voc_df <- read.delim(voc_fname, sep="\t", colClasses=voc_cols)
################################################################################
# SET FACTOR CONTRASTS
# treatment contrasts
txContrast <- function(x, ...) {
x <- factor(x, ...)
contrasts(x) <- contr.treatment
colnames(contrasts(x)) <- paste0("_", levels(x)[-1])
x
}
# sum-to-one (deviation contrasts)
devContrast <- function(x, ...) {
x <- factor(x, ...)
contrasts(x) <- contr.sum
contrasts(x) <- contrasts(x) / 2
colnames(contrasts(x)) <- paste0("_", levels(x)[-length(levels(x))])
x
}
# common variables
makeFactors <- function(df) {
df <- within(df, {
# truth
truth <- ifelse(targ, "target", ifelse(foil, "foil", "neither"))
truth <- txContrast(truth, levels=c("neither", "target", "foil"))
# attn
attn <- devContrast(attn, levels=c("maint.", "switch"))
# slot
slot <- slot + 1 # reset to 1-indexed instead of 0-indexed
slot <- txContrast(as.character(slot), levels=c("1", "2", "3", "4"))
})
df
}
rev_df <- makeFactors(rev_df)
voc_df <- makeFactors(voc_df)
# experiment-specific variables
rev_df <- within(rev_df, {
reverb <- devContrast(reverb, levels=c("anech.", "reverb"))
gender <- devContrast(gender, levels=c("MF", "MM"))
})
voc_df <- within(voc_df, {
voc_chan <- devContrast(voc_chan, levels=c("20", "10"))
gap_len <- devContrast(gap_len, levels=c("long", "short"))
})
# redefine "truth" to be just target & non-target (don't model foils)
rev_df2 <- rev_df
voc_df2 <- voc_df
rev_df2$truth <- txContrast(rev_df2$targ, levels=c(FALSE, TRUE),
labels=c("non-target", "target"))
voc_df2$truth <- txContrast(voc_df2$targ, levels=c(FALSE, TRUE),
labels=c("non-target", "target"))
# make sure factor creation didn't generate NAs
invisible(within(rev_df, {
for (var in c(reverb, gender, attn, slot)) stopifnot(all(!is.na(var)))
}))
invisible(within(rev_df2, {
for (var in c(reverb, gender, attn, slot)) stopifnot(all(!is.na(var)))
}))
invisible(within(voc_df, {
for (var in c(voc_chan, gap_len, attn, slot)) stopifnot(all(!is.na(var)))
}))
invisible(within(voc_df2, {
for (var in c(voc_chan, gap_len, attn, slot)) stopifnot(all(!is.na(var)))
}))
################################################################################
# SAVE
save(rev_df, rev_df2, voc_df, voc_df2, file=file.path(out_dir, "dfs.RData"))