The following is bare code. I think that you will be able to extend it to similar analyses.
### Various Repeated Measures Designs
### The following uses aov() instread of lm(). This creates better printouts
###One Within Subject Variable No Between Subject Variable
data1 <- read.table("http://www.uvm.edu/~dhowell/fundamentals9/DataFiles/Tab18-1.dat"
, header = TRUE)
data1$person <- factor(1:25)
attach(data1)
data1Long <- reshape(data = data1, varying = 1:5, v.names = "depression",
timevar = "time", idvar = "person",
ids = "subj", direction = "long")
attach(data1Long)
time <- factor(time)
person <- factor(person)
model1 <- aov(depression ~ time + Error(person))
summary(model1)
### Now one between and one within
### Using King data
data2 <- read.table("http://www.uvm.edu/~dhowell/methods8/DataFiles/Tab14-4.dat",
header = TRUE)
data2$person <- factor(1:24)
data2$Group <- factor(data2$Group)
data2Long <- reshape(data = data2, varying = 2:7, v.names = "outcome", timevar
= "time", idvar = "person", ids = "person", direction = "long")
attach(data2Long)
time <- factor(time)
my.aov <- aov(outcome ~ (Group*time) + Error(person/(time)))
### THIS WORKS TOO -- SO DOES THE NEXT
############## This was modified from one written by Joshua Wiley, in the Psychology
### Department at UCLA.
### Handles 2 Between and 1 Within
### Howell Table 14.7 ###
### Repeated Measures ANOVA with 2 Between and 1 Within variables
### Read in data, convert to 'long' format, and factor()
dat <- read.table("http://www.uvm.edu/~dhowell/methods7/DataFiles/Tab14-7.dat",
header = TRUE)
head(dat)
dat$subject <- factor(1:40)
datLong <- reshape(data = dat, varying = 4:7, v.names = "outcome", timevar
= "time", idvar = "subject", ids = "subj", direction = "long")
datLong$Condition <- factor(datLong$Condition, levels = 1:2, labels = c("BST", "Control"))
datLong$Sex <- factor(datLong$Sex, levels = 1:2, labels = c("Male","Female"))
datLong$time <- factor(datLong$time)
str(datLong)
attach(datLong)
# Actual formula and calculation
my.aov <- aov(outcome ~ (Condition*Sex*time) + Error(subject/(time)),data = datLong)
# Present the summary table (ANOVA source table)
summary(my.aov)
# Two within subject variables, one between
# Data from Bouton & Schwartzentruber (1985)
# Methods8, p. 486
rm(list = ls())
dataBouton <- read.table("http://www.uvm.edu/~dhowell/methods8/DataFiles/Tab14-11.dat",
header = T)
dataBouton$subject <- factor(c(1:24))
attach(dataBouton)
## I should use "reshape," but I can't get it to work. This is pretty easy.
Phase <- factor(rep(1:2, each = 24, times = 4))
Cycle <- factor(rep(1:4, each = 48))
Group = factor(rep(1:3, each = 8,times = 8))
dv <- c(C1P1, C1P2, C2P1, C2P2, C3P1, C3P2, C4P1, C4P2)
Subj <- factor(rep(1:24, times = 8))
cat("Means and sd by Group \n")
tapply(dv, Group, mean); tapply(dv, Group, sd)
cat("\n Means and sd by Cycle\n")
tapply(dv, Cycle, mean); tapply(dv, Cycle, sd)
cat("\n Means and sd by Phase\n")
tapply(dv, Phase, mean); tapply(dv, Phase, sd)
options(contrasts = c("contr.sum","contr.poly"))
model1 <- aov(dv ~ (Group*Cycle*Phase) + Error(Subj/(Cycle*Phase)), contrasts = contr.sum)
print(summary(model1))
print(coefficients(model1)) # This will give mean deviations)
library(ez) # Alternative approach using ezANOVA
df <- data.frame(cbind(Subj, dv, Group, Phase, Cycle))
df$Group <- factor(df$Group)
df$Phase <- factor(df$Phase)
df$Cycle <- factor(df$Cycle)
df$Subj <- factor(df$Subj)
modelez <- ezANOVA(data <- df, dv = dv, wid = Subj, within = .(Phase, Cycle), between =
Group, type = 3 )
print(modelez) #ges = Generalized Eta Square, GGE - Greenhouse and Geisser, HFe =
Huynh * Feldt)
# I get slightly different values for the Greenhouse & Geisser and the
#Huynh & Feldt correction
dch: