# =========================================================
# Empirical Research Methods for Human-Computer Interaction
# =========================================================
# This R script does the ANOVA on the data collected in the in-class experiment
# for the above-noted course. The input file is 'EntrySpeed.txt' which contains
# eight header lines (for GoStats) followed by an n x 11 matrix of data, where n
# is the number of participants. The first 10 columns of data are the entry
# speed measurements (2 layouts x 5 trials/layout). The 11th column contains
# the group codes for counterbalancing ("1", "2", "1", etc.).
#
# Except for the formatting, the ANOVA data table created from this script is
# the same as the ANOVA table in the spreadsheet, which was created using
# GoStats.
#
# Some additional code is added to do Sheffe post hoc comparisons on the trial
# data. Since there are 5 trials, 10 comparisons are done.
# Reminder: before running this script in RStudio, set the working directory
# to the location of the source file and data file:
#
# Session --> Set Working Directory --> To Source File Location
# fresh start
cat("\f") # clear console
rm(list = ls(all.names = TRUE)) # clear environment
# read data from file (adjust path as per local computer)
data1 = read.delim("EntrySpeed.txt", header=FALSE, sep="\t", skip=8, na="",
col.names = c("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "Group"))
# show the data
data1
# experiment design
nP = nrow(data1); # n = number of participants
nF1 = 2 # 2 levels of 'layout'
nF2 = 5 # 5 levels of 'trial'
nF3 = 2 # 2 groups (for counterbalancing)
# reorganize data into "long" format
data2 = reshape(data1[1:10], direction="long",
varying=c("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10"),
v.names="Entry_Speed", timevar = "Condition", idvar="Participant")
# add column for levels of within-subjects factor, layout
data2$Layout = rep(c("Opti(A)", "Qwerty(B)"), each=nF2*nP)
# add column for levels of within-subjects factor, trial
data2$Trial = rep(c("T1","T2","T3","T4","T5") , each=nP, times=nF1)
# add column for group (alternating row by row)
data2$Group = rep(c("G1", "G2"), times=(nP/2)*nF1*nF2)
# show the data (long format)
data2
# need this library when using anova_test and get_anova_table functions
library(rstatix)
# voila! (do the anova)
res.aov = anova_test(
data = data2,
formula = Entry_Speed ~ Group*Layout*Trial + Error(Participant/(Layout*Trial)),
detailed=TRUE
)
# get the ANOVA result as a table
tbl = get_anova_table(res.aov)
# show the table
tbl
# --- post hoc comparisons for 'trial' ---
# need the DescTools library to use PostHocTest function
library(DescTools)
# create a simplified model first using aov function
model = aov(Entry_Speed~Layout+Trial, data=data2)
summary(model)
# do post hoc comparisons
PostHocTest(model, which=NULL, "scheffe")
# *** end ***