Type 1 ANOVA in R (with Examples)

This tutorial shows how to do Type 1 ANOVA in R. There are two functions in R that can be used to calculate Type 1 ANOVA, anova() or aov().

Note that, anova() here is different from Anova() in Companion to Applied Regression (CAR). Anova() in CAR can be used only for Type 2 and Type 3 ANOVA.

Sample Data

The data has two categorical IVs (cities and stores) and one DV (sales).

x_1 = rep(c('City1','City2'),each=5)
x_2 = rep(c('store1','store2'), 5)
sales=c(10,20,20,50,30,10,5,4,12,4)

df <- data.frame (cities  = x_1,
                  stores = x_2,
                  sales=sales)
print(df)

Output:

   cities stores sales
1   City1 store1    10
2   City1 store2    20
3   City1 store1    20
4   City1 store2    50
5   City1 store1    30
6   City2 store2    10
7   City2 store1     5
8   City2 store2     4
9   City2 store1    12
10  City2 store2     4

Example 1: anova() for Type 1 ANOVA in R

Note that, Type 1 ANOVA is Sequential Sum of Squares (please refer to my another tutorial). When given a sequence of objects, anova tests the models against one another in the order specified.

Below is to use anova() to do the Type 1 ANOVA in R.

sales_ANOVA <- lm(sales ~ cities*stores, data = df)

ANOVA_result<-anova(sales_ANOVA)
print(ANOVA_result)

Output:

Analysis of Variance Table

Response: sales
              Df Sum Sq Mean Sq F value  Pr(>F)  
cities         1 902.50  902.50  7.7523 0.03182 *
stores         1  93.75   93.75  0.8053 0.40408  
cities:stores  1 183.75  183.75  1.5784 0.25569  
Residuals      6 698.50  116.42       

Example 2: aov() for Type 1 ANOVA in R

aov() can be also used for Type 1 ANOVA in R. Below is the R code and output.

aov_result<-aov(sales ~ cities*stores, data = df)
summary(aov_result)

Output:

              Df Sum Sq Mean Sq F value Pr(>F)  
cities         1  902.5   902.5   7.752 0.0318 *
stores         1   93.8    93.8   0.805 0.4041  
cities:stores  1  183.7   183.7   1.578 0.2557  
Residuals      6  698.5   116.4   

As we can see that, in both anova() and aov(), the p-values are exactly the same.

SST of Type 1 ANOVA

For Type I ANOVA, SSA + SSB | A +SSAB | A, B + SSE = SST. We can test that by adding all SS up, which is 1878.5.

SSA + SSB | A +SSAB | A, B + SSE = 902.5 + 93.8+183.7+698.5 =1878.5 = SST

We can also calculate the SST by using the following R code. That is, to calculate SST, we can use the model only with intercept. We can see that the SST is also 1878.5.

# Calculate SST in R
sales_intercept <- lm(sales ~ 1, data = df)

anova(sales_intercept)     

Output:

Response: sales
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals  9 1878.5  208.72               

Further Reading