Libraries

library(plyr)
library(tidyr)

Reviewing Analysis of Variance (ANOVA)

I’ll be following Chapter 10 of A Primer of Ecological Statistics by Gotelli and Ellison

Key Concepts:

ANOVA aims to determine differences in a continuous variable between 2 or more groups.

ANOVA bulit on partitioning on the concept of paritioning of the sum of squares (\(SS_{total}\)). How do we calculate this?

The total sum of squares of the data is the sum of squared deviations of each observation (\(Y_i\)) from the grand mean (\(\bar{Y}\)). There are \(i\) = 1 to \(a\) treatment levels and \(j\) = 1 to \(n\) replicates per treatment.

recap:

\[ SS_{total} = \sum_{i=1}^a\sum_{j=1}^n (Y_{ij}-\bar{Y})^2\]

The total sum of squares is the deviation of each observation from the grand mean.

\(SS_{total}\) can then be partitioned into different components, mainly among and within groups.

\[SS_{total} = SS_{among} + SS_{within}\] So for the among group SS:

\[ SS_{among} = \sum_{i=1}^a\sum_{j=1}^n (\bar{Y}_{i}-\bar{Y})^2\] So for the within group SS:

\[ SS_{within} = \sum_{i=1}^a\sum_{j=1}^n (Y_{ij}-\bar{Y}_i)^2\]

Bringing it all together:

\[ \sum_{i=1}^a\sum_{j=1}^n (Y_{ij}-\bar{Y})^2 = \sum_{i=1}^a\sum_{j=1}^n (\bar{Y}_{i}-\bar{Y})^2 + \sum_{i=1}^a\sum_{j=1}^n (Y_{ij}-\bar{Y}_i)^2\]

Enter data

#data, 
# a = 3, 3 treatments
# n = 4, 4 reps
n=4
unman<-c(10,12,12,13)
control<-c(9,11,11,12)
treat<-c(12,13,15,16)

wide.dat<-data.frame(unman,control,treat);wide.dat
##   unman control treat
## 1    10       9    12
## 2    12      11    13
## 3    12      11    15
## 4    13      12    16
long.dat<-gather(wide.dat,treatment,measure,unman:treat);long.dat
##    treatment measure
## 1      unman      10
## 2      unman      12
## 3      unman      12
## 4      unman      13
## 5    control       9
## 6    control      11
## 7    control      11
## 8    control      12
## 9      treat      12
## 10     treat      13
## 11     treat      15
## 12     treat      16
#global mean
grandmean<-round(mean(c(unman,control,treat)),2);grandmean
## [1] 12.17

\(SS_{total}\) calculations

sum((long.dat$measure-grandmean)^2)
## [1] 41.6668

\(SS_{among}\) calculations

## calculating 1 case

(mean(unman)-grandmean)^2
## [1] 0.1764
### making a whole function 
#with ddply
ssa<-function(n=n,vec=c(1,3,3),grandmean=grandmean){
  SSa<-(mean(vec)-grandmean)^2
  SSa
}
ssa(vec=unman,n=n,grandmean=grandmean) # verify function
## [1] 0.1764
## executing function
ssam<-ddply(long.dat,.(treatment),summarize,ssamong=ssa(vec=measure,n=n,grandmean=grandmean));ssam
##   treatment ssamong
## 1   control  2.0164
## 2     treat  3.3489
## 3     unman  0.1764
SSAM<-n*sum(ssam$ssamong);SSAM
## [1] 22.1668
# for a balanced design!

\(SS_{within}\) calculations

## calculating 1 case
sum((unman-mean(unman))^2)
## [1] 4.75
### making a whole function 
#with ddply
sswi<-function(x){
  SSwithin<-sum((x-mean(x))^2)
  SSwithin
}
sswi(unman) # verify function
## [1] 4.75
SSwi<-ddply(long.dat,.(treatment),summarize,sswi=sswi(measure));SSwi
##   treatment  sswi
## 1   control  4.75
## 2     treat 10.00
## 3     unman  4.75
sumwithin<-sum(SSwi$sswi);sumwithin
## [1] 19.5

Assumptions of ANOVAs

  1. Samples are indepednent and identically distributed.
  2. Variances are homogeneous among groups
    • variance within each group approx to variance within other groups
  3. Residuals are normally distributed
  4. Samples are classified correctly
  5. Maine effects are additive

Hypothesis testing

Definitions:

Alternative Hypothesis, \(H_a\): \(Y_{ij} = \mu + A_i + \epsilon_{ij}\)

Null Hypothesis, \(H_o\): \(Y_{ij} = \mu + \epsilon_{ij}\)

Verify with aov() function

knitr::kable(round(summary(aov(measure~treatment,data=long.dat))[[1]],2))
Df Sum Sq Mean Sq F value Pr(>F)
treatment 2 22.17 11.08 5.12 0.03
Residuals 9 19.50 2.17 NA NA