aovRT_F2$means        <- model.tables(aovRT_F2$aov, type = "mean")
aovErr_F2           <- ezANOVA(datAggWord, dv = .(perErrorWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovErr_F2$ANOVA$ges <- NULL
aovErr_F2$ANOVA$pes <- aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F/((aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F) + aovErr_F2$ANOVA$DFd)
aovErr_F2$means     <- model.tables(aovErr_F2$aov, type = "mean")
# figure comp vs. incomp
# calculate lofties
datAggF1$loft <- rep(0, times = nrow(datAggF1))
for (targetLoc in c("Left", "Right")){
tempEZ           <- ezANOVA(datAggVP[datAggVP$targetLocation == targetLoc,], dv=.(rtVP), wid = .(vpNum), within = .(wordPosition), detailed = TRUE, return_aov = TRUE)
tempEZ$ANOVA$mse <- tempEZ$ANOVA$SSd/tempEZ$ANOVA$DFd
tempCritT        <- qt(1-0.05/2, tempEZ$ANOVA$DFd[2])
lofties          <- rep(sqrt(tempEZ$ANOVA$mse[2]/(tempEZ$ANOVA$DFd[2]+1))*tempCritT, times = 2, each = 1)
datAggF1[datAggF1$targetLoc == targetLoc, ]$loft <- lofties
}
RTsHorz <- ggplot(datAggF1, aes(x=targetLocation, y=rt, fill = wordPosition, width = .8)) +
geom_bar(stat = "identity", position = position_dodge(width=0.9)) +
geom_errorbar(aes(ymin = rt - loft, ymax = rt + loft), width=0.1, position = position_dodge(width=0.9)) +
scale_fill_manual(name = "Word Location", values=c("grey80", "grey60")) +
scale_x_discrete("Target Location", labels=c("Left", "Right")) +
scale_y_continuous("Response Time (ms)", breaks=seq(720, 1060, by = 40)) + # 760, 900
coord_cartesian(ylim=c(720, 1060)) +
theme_bw() + # custom bw theme adjustments
ggtitle("Horizontal") +
theme(plot.title        = element_text(lineheight=.8, face="bold"),
plot.margin	      = unit(c(1, 1, 0.5, 1), "lines"),
axis.text.x	      = element_text(size = 14),
axis.title.x	    = element_text(size = 14, vjust = -0.5),
axis.text.y	      = element_text(size = 14),
axis.title.y	    = element_text(size = 14, vjust = 1.0),
legend.position	  = c(0.75, 0.875),
legend.text	      = element_text(size=12),
legend.key.size	  = unit(1.0, "lines"),
legend.title	    = element_text(size=14),
legend.background = element_rect(fill = "transparent"),
legend.key        = element_blank())
# combine word direction by response direction vertical/horizontal
exp1fig <- plot_grid(RTsHorz, RTsVert, ncol=2, nrow=1, align="h")
ggsave(filename = "exp1fig.pdf", exp1fig, width=8, height=4)
ggsave(filename = "exp1fig.eps", exp1fig, width=8, height=4)
datAggVP
# "R version 3.2.4 (2016-03-10)"
# clear everything
rm(list = ls())
# packages
# install.packages("dplyr")
# install.packages("ez")
# install.packages("cowplot")
# install.packages("ggplot2")
# load packages
library("dplyr")
library("ez")
library("cowplot")
library("ggplot2")
# data dir
setwd("/Users/Carolin/Documents/Work/MS/5keys/JEP_LML_Data/exp1")
dat <- read.table("exp1data.txt", header=TRUE)
# remove practise trials
dat <- dat[dat$practice != 1,]
# check data
table(dat$wordText)
table(dat$targetLocation)
table(dat$targetLoc, dat$compatibility)
table(dat$wordText, dat$compatibility)
# word position*response location
table(dat$wordPosition, dat$targetLocation)
# data structure
str(dat)
# change vp/word number to factor
dat$vpNum      <- factor(dat$vpNum)
dat$wordNumber <- factor(dat$wordNumber)
# vp info
table(dat$vpGender[!duplicated(dat$vpNum)])
mean(dat$vpAge[!duplicated(dat$vpNum)])
sd(dat$vpAge[!duplicated(dat$vpNum)])
table(dat$vpHandedness[!duplicated(dat$vpNum)])
# choose dependent variable
# dat$dv <- dat$releaseTime  # time VP releases centre key
dat$dv <- dat$respTime       # time VP presses response key
# reaction time is to colour onset so need to subtract 100ms
dat$dv <- dat$dv - 100
# correct vs. incorrect trials and too slow/too fast
# outliers criterion?
hist(dat$dv, 100)
rtMin <- 200
rtMax <- 1600
dat$isCorrect <- ifelse(dat$correct == 1 & dat$dv > rtMin & dat$dv < rtMax, 1, 0)
dat$isError   <- ifelse(dat$correct == 2 & dat$dv > rtMin & dat$dv < rtMax, 1, 0)
dat$isSlow    <- ifelse(dat$correct == 3 | dat$dv > rtMax, 1, 0)
dat$isFast    <- ifelse(dat$correct == 4 | dat$dv < rtMin,  1, 0)
perError <- (sum(dat$isError)/nrow(dat))*100
perFast  <- (sum(dat$isFast)/nrow(dat))*100
perSlow  <- (sum(dat$isSlow)/nrow(dat))*100
hist(dat$dv[dat$isCorrect == 1], 100)
# VP data overall RT and Error Rate
aggregate(dv ~ vpNum, dat[dat$isCorrect == 1,], mean)
table(dat$vpNum, dat$correct)
################################################################################
# RTs: word direction x response direction vertical dimension
datAggVP <- dat %>%
filter(responseDimension == "vertical") %>%
group_by(vpNum, wordPosition, targetLocation) %>%
summarize(nTotalVP     = n(),
nCorrectVP   = sum(isCorrect),
rtVP         = mean(dv[isCorrect ==1]),
nErrorVP     = sum(isError),
nOutlierVP   = sum(isSlow + isFast),
perErrorVP   = (nErrorVP/nTotalVP)*100,
perOutlierVP = (nOutlierVP/nTotalVP)/100)
datAggWord <- dat %>%
filter(responseDimension == "vertical") %>%
group_by(wordNumber, wordPosition, targetLocation) %>%
summarize(nTotalWord     = n(),
nCorrectWord   = sum(isCorrect),
rtWord         = mean(dv[isCorrect ==1]),
nErrorWord     = sum(isError),
nOutlierWord   = sum(isSlow + isFast),
perErrorWord   = (nErrorWord/nTotalWord)*100,
perOutlierWord = (nOutlierWord/nTotalWord)/100)
# grand means
datAggF1 <- datAggVP %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtVP),
sdRT    = sd(rtVP),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorVP),
sdError = sd(perErrorVP),
seError = sdError/sqrt(nTotal))
datAggF2 <- datAggWord %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtWord),
sdRT    = sd(rtWord),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorWord),
sdError = sd(perErrorWord),
seError = sdError/sqrt(nTotal))
# ANOVA RT analysis
datAggVP           <- as.data.frame(datAggVP)
aovRT_F1           <- ezANOVA(datAggVP, dv = .(rtVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovRT_F1$ANOVA$ges <- NULL
aovRT_F1$ANOVA$pes <- aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F/((aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F) + aovRT_F1$ANOVA$DFd)
aovRT_F1$means     <- model.tables(aovRT_F1$aov, type = "mean")
aovErr_F1           <- ezANOVA(datAggVP, dv = .(perErrorVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovErr_F1$ANOVA$ges <- NULL
aovErr_F1$ANOVA$pes <- aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F/((aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F) + aovErr_F1$ANOVA$DFd)
aovErr_F1$means     <- model.tables(aovErr_F1$aov, type = "mean")
datAggWord          <- as.data.frame(datAggWord)
aovRT_F2            <- ezANOVA(datAggWord, dv = .(rtWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovRT_F2$ANOVA$ges  <- NULL
aovRT_F2$ANOVA$pes  <- aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F/((aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F) + aovRT_F2$ANOVA$DFd)
aovRT_F2$means      <- model.tables(aovRT_F2$aov, type = "mean")
aovErr_F2           <- ezANOVA(datAggWord, dv = .(perErrorWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovErr_F2$ANOVA$ges <- NULL
aovErr_F2$ANOVA$pes <- aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F/((aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F) + aovErr_F2$ANOVA$DFd)
aovErr_F2$means     <- model.tables(aovErr_F2$aov, type = "mean")
aovRT_F1$ANOVA
aovRT_F2$ANOVA
################################################################################
# RTs: word direction x response direction horizontal dimension
datAggVP <- dat %>%
filter(responseDimension == "horizontal") %>%
group_by(vpNum, wordPosition, targetLocation) %>%
summarize(nTotalVP     = n(),
nCorrectVP   = sum(isCorrect),
rtVP         = mean(dv[isCorrect ==1]),
nErrorVP     = sum(isError),
nOutlierVP   = sum(isSlow + isFast),
perErrorVP   = (nErrorVP/nTotalVP)*100,
perOutlierVP = (nOutlierVP/nTotalVP)/100)
datAggWord <- dat %>%
filter(responseDimension == "horizontal") %>%
group_by(wordNumber, wordPosition, targetLocation) %>%
summarize(nTotalWord     = n(),
nCorrectWord   = sum(isCorrect),
rtWord         = mean(dv[isCorrect ==1]),
nErrorWord     = sum(isError),
nOutlierWord   = sum(isSlow + isFast),
perErrorWord   = (nErrorWord/nTotalWord)*100,
perOutlierWord = (nOutlierWord/nTotalWord)/100)
# grand means
datAggF1 <- datAggVP %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtVP),
sdRT    = sd(rtVP),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorVP),
sdError = sd(perErrorVP),
seError = sdError/sqrt(nTotal))
datAggF2 <- datAggWord %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtWord),
sdRT    = sd(rtWord),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorWord),
sdError = sd(perErrorWord),
seError = sdError/sqrt(nTotal))
# ANOVA RT analysis
datAggVP           <- as.data.frame(datAggVP)
aovRT_F1           <- ezANOVA(datAggVP, dv = .(rtVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovRT_F1$ANOVA$ges <- NULL
aovRT_F1$ANOVA$pes <- aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F/((aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F) + aovRT_F1$ANOVA$DFd)
aovRT_F1$means     <- model.tables(aovRT_F1$aov, type = "mean")
aovErr_F1           <- ezANOVA(datAggVP, dv = .(perErrorVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovErr_F1$ANOVA$ges <- NULL
aovErr_F1$ANOVA$pes <- aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F/((aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F) + aovErr_F1$ANOVA$DFd)
aovErr_F1$means     <- model.tables(aovErr_F1$aov, type = "mean")
datAggWord            <- as.data.frame(datAggWord)
aovRT_F2              <- ezANOVA(datAggWord, dv=.(rtWord), wid=.(wordNumber), between=.(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovRT_F2$ANOVA$ges    <- NULL
aovRT_F2$ANOVA$pes    <- aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F/((aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F) + aovRT_F2$ANOVA$DFd)
aovRT_F2$means        <- model.tables(aovRT_F2$aov, type = "mean")
aovErr_F2           <- ezANOVA(datAggWord, dv = .(perErrorWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovErr_F2$ANOVA$ges <- NULL
aovErr_F2$ANOVA$pes <- aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F/((aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F) + aovErr_F2$ANOVA$DFd)
aovErr_F2$means     <- model.tables(aovErr_F2$aov, type = "mean")
# figure comp vs. incomp
# calculate lofties
datAggF1$loft <- rep(0, times = nrow(datAggF1))
for (targetLoc in c("Left", "Right")){
tempEZ           <- ezANOVA(datAggVP[datAggVP$targetLocation == targetLoc,], dv=.(rtVP), wid = .(vpNum), within = .(wordPosition), detailed = TRUE, return_aov = TRUE)
tempEZ$ANOVA$mse <- tempEZ$ANOVA$SSd/tempEZ$ANOVA$DFd
tempCritT        <- qt(1-0.05/2, tempEZ$ANOVA$DFd[2])
lofties          <- rep(sqrt(tempEZ$ANOVA$mse[2]/(tempEZ$ANOVA$DFd[2]+1))*tempCritT, times = 2, each = 1)
datAggF1[datAggF1$targetLoc == targetLoc, ]$loft <- lofties
}
RTsHorz <- ggplot(datAggF1, aes(x=targetLocation, y=rt, fill = wordPosition, width = .8)) +
geom_bar(stat = "identity", position = position_dodge(width=0.9)) +
geom_errorbar(aes(ymin = rt - loft, ymax = rt + loft), width=0.1, position = position_dodge(width=0.9)) +
scale_fill_manual(name = "Word Location", values=c("grey80", "grey60")) +
scale_x_discrete("Target Location", labels=c("Left", "Right")) +
scale_y_continuous("Response Time (ms)", breaks=seq(720, 1060, by = 40)) + # 760, 900
coord_cartesian(ylim=c(720, 1060)) +
theme_bw() + # custom bw theme adjustments
ggtitle("Horizontal") +
theme(plot.title        = element_text(lineheight=.8, face="bold"),
plot.margin	      = unit(c(1, 1, 0.5, 1), "lines"),
axis.text.x	      = element_text(size = 14),
axis.title.x	    = element_text(size = 14, vjust = -0.5),
axis.text.y	      = element_text(size = 14),
axis.title.y	    = element_text(size = 14, vjust = 1.0),
legend.position	  = c(0.75, 0.875),
legend.text	      = element_text(size=12),
legend.key.size	  = unit(1.0, "lines"),
legend.title	    = element_text(size=14),
legend.background = element_rect(fill = "transparent"),
legend.key        = element_blank())
# combine word direction by response direction vertical/horizontal
exp1fig <- plot_grid(RTsHorz, RTsVert, ncol=2, nrow=1, align="h")
ggsave(filename = "exp1fig.pdf", exp1fig, width=8, height=4)
ggsave(filename = "exp1fig.eps", exp1fig, width=8, height=4)
aovRT_F1$ANOVA
aovRT_F2$ANOVA
aovErr_F1$ANOVA
aovErr_F2$ANOVA
# "R version 3.2.4 (2016-03-10)"
# clear everything
rm(list = ls())
# packages
# install.packages("dplyr")
# install.packages("ez")
# install.packages("cowplot")
# install.packages("ggplot2")
# load packages
library("dplyr")
library("ez")
library("cowplot")
library("ggplot2")
# data dir
setwd("/Users/Carolin/Documents/Work/MS/5keys/JEP_LML_Data/exp1")
dat <- read.table("exp1data.txt", header=TRUE)
# remove practise trials
dat <- dat[dat$practice != 1,]
# check data
table(dat$wordText)
table(dat$targetLocation)
table(dat$targetLoc, dat$compatibility)
table(dat$wordText, dat$compatibility)
# word position*response location
table(dat$wordPosition, dat$targetLocation)
# data structure
str(dat)
# change vp/word number to factor
dat$vpNum      <- factor(dat$vpNum)
dat$wordNumber <- factor(dat$wordNumber)
# vp info
table(dat$vpGender[!duplicated(dat$vpNum)])
mean(dat$vpAge[!duplicated(dat$vpNum)])
sd(dat$vpAge[!duplicated(dat$vpNum)])
table(dat$vpHandedness[!duplicated(dat$vpNum)])
# dependent variable
dat$dv <- dat$releaseTime  # time VP releases centre key
#dat$dv <- dat$respTime       # time VP presses response key
# reaction time is to colour onset so need to subtract 100ms
dat$dv <- dat$dv - 100
# correct vs. incorrect trials and too slow/too fast
# outliers criterion?
hist(dat$dv, 100)
rtMin <- 200
rtMax <- 1600
dat$isCorrect <- ifelse(dat$correct == 1 & dat$dv > rtMin & dat$dv < rtMax, 1, 0)
dat$isError   <- ifelse(dat$correct == 2 & dat$dv > rtMin & dat$dv < rtMax, 1, 0)
dat$isSlow    <- ifelse(dat$correct == 3 | dat$dv > rtMax, 1, 0)
dat$isFast    <- ifelse(dat$correct == 4 | dat$dv < rtMin,  1, 0)
perError <- (sum(dat$isError)/nrow(dat))*100
perFast  <- (sum(dat$isFast)/nrow(dat))*100
perSlow  <- (sum(dat$isSlow)/nrow(dat))*100
hist(dat$dv[dat$isCorrect == 1], 100)
# VP data overall RT and Error Rate
aggregate(dv ~ vpNum, dat[dat$isCorrect == 1,], mean)
table(dat$vpNum, dat$correct)
################################################################################
# RTs: word direction x response direction vertical dimension
datAggVP <- dat %>%
filter(responseDimension == "vertical") %>%
group_by(vpNum, wordPosition, targetLocation) %>%
summarize(nTotalVP     = n(),
nCorrectVP   = sum(isCorrect),
rtVP         = mean(dv[isCorrect ==1]),
nErrorVP     = sum(isError),
nOutlierVP   = sum(isSlow + isFast),
perErrorVP   = (nErrorVP/nTotalVP)*100,
perOutlierVP = (nOutlierVP/nTotalVP)/100)
datAggWord <- dat %>%
filter(responseDimension == "vertical") %>%
group_by(wordNumber, wordPosition, targetLocation) %>%
summarize(nTotalWord     = n(),
nCorrectWord   = sum(isCorrect),
rtWord         = mean(dv[isCorrect ==1]),
nErrorWord     = sum(isError),
nOutlierWord   = sum(isSlow + isFast),
perErrorWord   = (nErrorWord/nTotalWord)*100,
perOutlierWord = (nOutlierWord/nTotalWord)/100)
# grand means
datAggF1 <- datAggVP %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtVP),
sdRT    = sd(rtVP),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorVP),
sdError = sd(perErrorVP),
seError = sdError/sqrt(nTotal))
datAggF2 <- datAggWord %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtWord),
sdRT    = sd(rtWord),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorWord),
sdError = sd(perErrorWord),
seError = sdError/sqrt(nTotal))
# ANOVA RT analysis
datAggVP           <- as.data.frame(datAggVP)
aovRT_F1           <- ezANOVA(datAggVP, dv = .(rtVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovRT_F1$ANOVA$ges <- NULL
aovRT_F1$ANOVA$pes <- aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F/((aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F) + aovRT_F1$ANOVA$DFd)
aovRT_F1$means     <- model.tables(aovRT_F1$aov, type = "mean")
aovErr_F1           <- ezANOVA(datAggVP, dv = .(perErrorVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovErr_F1$ANOVA$ges <- NULL
aovErr_F1$ANOVA$pes <- aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F/((aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F) + aovErr_F1$ANOVA$DFd)
aovErr_F1$means     <- model.tables(aovErr_F1$aov, type = "mean")
datAggWord          <- as.data.frame(datAggWord)
aovRT_F2            <- ezANOVA(datAggWord, dv = .(rtWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovRT_F2$ANOVA$ges  <- NULL
aovRT_F2$ANOVA$pes  <- aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F/((aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F) + aovRT_F2$ANOVA$DFd)
aovRT_F2$means      <- model.tables(aovRT_F2$aov, type = "mean")
aovErr_F2           <- ezANOVA(datAggWord, dv = .(perErrorWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovErr_F2$ANOVA$ges <- NULL
aovErr_F2$ANOVA$pes <- aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F/((aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F) + aovErr_F2$ANOVA$DFd)
aovErr_F2$means     <- model.tables(aovErr_F2$aov, type = "mean")
# calculate lofties
datAggF1$loft <- rep(0, times = nrow(datAggF1))
for (targetLoc in c("Down", "Up")){
tempEZ           <- ezANOVA(datAggVP[datAggVP$targetLocation == targetLoc,], dv=.(rtVP), wid = .(vpNum), within = .(wordPosition), detailed = TRUE, return_aov = TRUE)
tempEZ$ANOVA$mse <- tempEZ$ANOVA$SSd/tempEZ$ANOVA$DFd
tempCritT        <- qt(1-0.05/2, tempEZ$ANOVA$DFd[2])
lofties          <- rep(sqrt(tempEZ$ANOVA$mse[2]/(tempEZ$ANOVA$DFd[2]+1))*tempCritT, times = 2, each = 1)
datAggF1[datAggF1$targetLocation == targetLoc, ]$loft <- lofties
}
RTsVert <- ggplot(datAggF1, aes(x=targetLocation, y=rt, fill = wordPosition, width = .8)) +
geom_bar(stat = "identity", position = position_dodge(width=0.9)) +
geom_errorbar(aes(ymin = rt - loft, ymax = rt + loft), width=0.1, position = position_dodge(width=0.9)) +
scale_fill_manual(name = "Word Location", values=c("grey80", "grey60")) +
scale_x_discrete("Target Location", labels=c("Down","Up")) +
scale_y_continuous("Response Time (ms)", breaks=seq(720, 1060, by = 40)) + # 760, 900
coord_cartesian(ylim=c(720, 1060)) +
theme_bw() + # custom bw theme adjustments
ggtitle("Vertical") +
theme(plot.title        = element_text(lineheight=.8, face="bold"),
plot.margin	      = unit(c(1, 1, 0.5, 1), "lines"),
axis.text.x	      = element_text(size = 14),
axis.title.x	    = element_text(size = 14, vjust = -0.5),
axis.text.y	      = element_text(size = 14),
axis.title.y	    = element_text(size = 14, vjust = 1.0),
legend.position	  = c(0.75, 0.875),
legend.text	      = element_text(size=12),
legend.key.size	  = unit(1.0, "lines"),
legend.title	    = element_text(size=14),
legend.background = element_rect(fill = "transparent"),
legend.key        = element_blank())
aovRT_F1$ANOVA
aovRT_F2$ANOVA
aovErr_F1$ANOVA
aovErr_F2$ANOVA
################################################################################
# RTs: word direction x response direction horizontal dimension
datAggVP <- dat %>%
filter(responseDimension == "horizontal") %>%
group_by(vpNum, wordPosition, targetLocation) %>%
summarize(nTotalVP     = n(),
nCorrectVP   = sum(isCorrect),
rtVP         = mean(dv[isCorrect ==1]),
nErrorVP     = sum(isError),
nOutlierVP   = sum(isSlow + isFast),
perErrorVP   = (nErrorVP/nTotalVP)*100,
perOutlierVP = (nOutlierVP/nTotalVP)/100)
datAggWord <- dat %>%
filter(responseDimension == "horizontal") %>%
group_by(wordNumber, wordPosition, targetLocation) %>%
summarize(nTotalWord     = n(),
nCorrectWord   = sum(isCorrect),
rtWord         = mean(dv[isCorrect ==1]),
nErrorWord     = sum(isError),
nOutlierWord   = sum(isSlow + isFast),
perErrorWord   = (nErrorWord/nTotalWord)*100,
perOutlierWord = (nOutlierWord/nTotalWord)/100)
# grand means
datAggF1 <- datAggVP %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtVP),
sdRT    = sd(rtVP),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorVP),
sdError = sd(perErrorVP),
seError = sdError/sqrt(nTotal))
datAggF2 <- datAggWord %>%
group_by(wordPosition, targetLocation) %>%
summarize(nTotal  = n(),
rt      = mean(rtWord),
sdRT    = sd(rtWord),
seRT    = sdRT/sqrt(nTotal),
error   = mean(perErrorWord),
sdError = sd(perErrorWord),
seError = sdError/sqrt(nTotal))
# ANOVA RT analysis
datAggVP           <- as.data.frame(datAggVP)
aovRT_F1           <- ezANOVA(datAggVP, dv = .(rtVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovRT_F1$ANOVA$ges <- NULL
aovRT_F1$ANOVA$pes <- aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F/((aovRT_F1$ANOVA$DFn*aovRT_F1$ANOVA$F) + aovRT_F1$ANOVA$DFd)
aovRT_F1$means     <- model.tables(aovRT_F1$aov, type = "mean")
aovErr_F1           <- ezANOVA(datAggVP, dv = .(perErrorVP), wid = .(vpNum), within = .(wordPosition, targetLocation), return_aov = TRUE)
aovErr_F1$ANOVA$ges <- NULL
aovErr_F1$ANOVA$pes <- aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F/((aovErr_F1$ANOVA$DFn*aovErr_F1$ANOVA$F) + aovErr_F1$ANOVA$DFd)
aovErr_F1$means     <- model.tables(aovErr_F1$aov, type = "mean")
datAggWord            <- as.data.frame(datAggWord)
aovRT_F2              <- ezANOVA(datAggWord, dv=.(rtWord), wid=.(wordNumber), between=.(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovRT_F2$ANOVA$ges    <- NULL
aovRT_F2$ANOVA$pes    <- aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F/((aovRT_F2$ANOVA$DFn*aovRT_F2$ANOVA$F) + aovRT_F2$ANOVA$DFd)
aovRT_F2$means        <- model.tables(aovRT_F2$aov, type = "mean")
aovErr_F2           <- ezANOVA(datAggWord, dv = .(perErrorWord), wid = .(wordNumber), between = .(wordPosition), within = .(targetLocation), return_aov = TRUE)
aovErr_F2$ANOVA$ges <- NULL
aovErr_F2$ANOVA$pes <- aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F/((aovErr_F2$ANOVA$DFn*aovErr_F2$ANOVA$F) + aovErr_F2$ANOVA$DFd)
aovErr_F2$means     <- model.tables(aovErr_F2$aov, type = "mean")
# figure comp vs. incomp
# calculate lofties
datAggF1$loft <- rep(0, times = nrow(datAggF1))
for (targetLoc in c("Left", "Right")){
tempEZ           <- ezANOVA(datAggVP[datAggVP$targetLocation == targetLoc,], dv=.(rtVP), wid = .(vpNum), within = .(wordPosition), detailed = TRUE, return_aov = TRUE)
tempEZ$ANOVA$mse <- tempEZ$ANOVA$SSd/tempEZ$ANOVA$DFd
tempCritT        <- qt(1-0.05/2, tempEZ$ANOVA$DFd[2])
lofties          <- rep(sqrt(tempEZ$ANOVA$mse[2]/(tempEZ$ANOVA$DFd[2]+1))*tempCritT, times = 2, each = 1)
datAggF1[datAggF1$targetLoc == targetLoc, ]$loft <- lofties
}
RTsHorz <- ggplot(datAggF1, aes(x=targetLocation, y=rt, fill = wordPosition, width = .8)) +
geom_bar(stat = "identity", position = position_dodge(width=0.9)) +
geom_errorbar(aes(ymin = rt - loft, ymax = rt + loft), width=0.1, position = position_dodge(width=0.9)) +
scale_fill_manual(name = "Word Location", values=c("grey80", "grey60")) +
scale_x_discrete("Target Location", labels=c("Left", "Right")) +
scale_y_continuous("Response Time (ms)", breaks=seq(720, 1060, by = 40)) + # 760, 900
coord_cartesian(ylim=c(720, 1060)) +
theme_bw() + # custom bw theme adjustments
ggtitle("Horizontal") +
theme(plot.title        = element_text(lineheight=.8, face="bold"),
plot.margin	      = unit(c(1, 1, 0.5, 1), "lines"),
axis.text.x	      = element_text(size = 14),
axis.title.x	    = element_text(size = 14, vjust = -0.5),
axis.text.y	      = element_text(size = 14),
axis.title.y	    = element_text(size = 14, vjust = 1.0),
legend.position	  = c(0.75, 0.875),
legend.text	      = element_text(size=12),
legend.key.size	  = unit(1.0, "lines"),
legend.title	    = element_text(size=14),
legend.background = element_rect(fill = "transparent"),
legend.key        = element_blank())
# combine word direction by response direction vertical/horizontal
exp1fig <- plot_grid(RTsHorz, RTsVert, ncol=2, nrow=1, align="h")
ggsave(filename = "exp1fig.pdf", exp1fig, width=8, height=4)
ggsave(filename = "exp1fig.eps", exp1fig, width=8, height=4)
aovRT_F1$ANOVA
aovRT_F2$ANOVA
aovErr_F1$ANOVA
aovErr_F2$ANOVA
table(dat$vpGender[!duplicated(dat$vpNum)])
mean(dat$vpAge[!duplicated(dat$vpNum)])
sd(dat$vpAge[!duplicated(dat$vpNum)])
sd(dat$vpAge[!duplicated(dat$vpNum)])
table(dat$vpHandedness[!duplicated(dat$vpNum)])
