`# Hinton's general ANOVA example, chapter 11`

`h = data.frame(cond.1 = c(5,6,7,5,3,4), cond.2 = c(11, 10, 9, 11, 9, 10), cond.3 = c(14, 15, 17, 13, 17, 14))`

`# overall mean: 10`

`alldata = c(h$cond.1, h$cond.2, h$cond.3)`

`mean(alldata)`

`# overall sum of squares`

`all.ssq = sum((alldata - mean(alldata))**2)`

`# [1] 328`

`# sum of squares for each condition separately`

`sum((h$cond.1 - mean(h$cond.1))**2)`

`# [1] 10`

`sum((h$cond.2 - mean(h$cond.2))**2)`

`# [1] 4`

`sum((h$cond.3 - mean(h$cond.3))**2)`

`# [1] 14`

`# Within-conditions sum of squares: sum of the above three sums of squares for each condition separately`

`within.ssq = sum((h$cond.1 - mean(h$cond.1))**2) + sum((h$cond.2 -`

`mean(h$cond.2))**2) + sum((h$cond.3 - mean(h$cond.3))**2)`

`# 28 `

`# Rest of sum of squares: between conditions`

`between.ssq = all.ssq - within.ssq`

`# Or we can compute it as follows: compute the mean of the 3 condition means,`

`means.mean = mean( c(mean(h$cond.1), mean(h$cond.2), mean(h$cond.3)))`

`# then add up the sums of squares for differences between condition means and the`

`# mean-of-means, and multiply it by the number of data points in each condition`

`#`

`between.ssq = ((mean(h$cond.1) - means.mean)** 2 + (mean(h$cond.2) - means.mean)** 2`

`+ (mean(h$cond.3) - means.mean)** 2 ) * 6`

`# dividing up degrees of freedom in the same way: total degrees of freedom = number of datapoints - 1`

`total.df = length(alldata) - 1`

`# between conditions: number of conditions - 1`

`between.df = 3 - 1`

`# within conditions:`

`# (number of datapoints in each condition - 1`

`) * number of conditions`

`within.df = total.df - between.df`

`within.df = length(h$cond.1) - 1 + length(h$cond.2) - 1 + length(h$cond.3) - 1`

`# within conditions: individual differences between participants, and random error`

`# between conditions: systematic difference between conditions plus individual differences between participants plus random error`

`#`

`# F-value: (systematic difference + error variance) / (error variance) = (between_conditions_variance) / (within_conditions_variance) = `

`# (between.ssq / between.df) / (within.ssq / within.df)`

### A worked full example of one factor, independent measures ANOVA

`hinton.anagram.altformat = data.frame(time=c(15,20,14,13,18,16,13,12,18,11,21,25,29,18,26,22,26,24,28,21,28,30,32,`

`28,26,30,25,36,20,25),condition=c("first","first","first","first","first","first",`

`"first","first","first","first","last","last","last","last","last","last","last",`

`"last","last","last","none","none","none","none","none","none","none","none","none",`

`"none"))`

`bwplot(time ~ condition,data=hinton.anagram.altformat) `

`# To work through this we'll use a slightly different format....`

`hinton.anagram = data.frame(`

`first.letter=c(15,20,14,13,18,16,13,12,18,11),`

`last.letter=c(21,25,29,18,26,22,26,24,28,21),`

`no.letter= c(28,30,32,28,26,30,25,36,20,25))`

`numberofdatapoints = 30`

`numberofconditions = 3`

`numberofdatapointspercondition = 10`

`# First column in the ANOVA table: degrees of freedom. `

`# total, between conditions, and within conditions`

`df.total = 30 - 1`

`df.between = 3 - 1`

`df.within = df.total - df.between`

`# Second columns: sums of squares`

`# total, between conditions, and within conditions`

`mean.total = (sum(hinton.anagram)/numberofdatapoints)`

`ssq.total = sum((hinton.anagram - mean.ana)**2)`

`ssq.within = sum((hinton.anagram$first.letter -mean(hinton.anagram$first.letter))**2) + `

`sum((hinton.anagram$last.letter -mean(hinton.anagram$last.letter))**2) + `

`sum((hinton.anagram$no.letter -mean(hinton.anagram$no.letter))**2) `

`ssq.between = ssq.total - ssq.within`

`MS.between= ssq.between/df.between`

`MS.error = ssq.within/df.within`

`F = MS.between/MS.error`

`1 - pf(F,df.between,df.within)`

`# We can do this in R without all the steps`

`anagram.lm = lm(time ~ condition,data=hinton.anagram.altformat)`

`anova(anagram.lm)`

`# An alternative syntax`

`anagram.aov = aov(time ~ condition,data=hinton.anagram.altformat)`

`summary(anagram.aov)`

`# Anova tells you that the factor explains more variance that expected by chance, but`

`# it doesn't tell you where the differences lie. For that we need other tests.`

`pairwise.t.test(hinton.anagram.altformat$time,hinton.anagram.altformat$condition,`

`p.adj="bonferroni")`

`TukeyHSD(anagram.aov)`