Type 2 ANOVA in R (with Examples)

This tutorial shows how you can calculate Type 2 ANOVA in R with an example. Anova() in the package of Companion to Applied Regression (CAR) can be used to calculate Type 2 ANOVA in R.

Note that, Anova() in CAR only provides options of Type 2 and Type 3 ANOVA. It is different from another function anova() in R, which can be used to calculate Type 1 ANOVA.

Step 1: Prepare the 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

Step 2: Type 2 ANOVA in R

In the following, we use ANOVA() in R to do Type 2 ANOVA. Note that, we specify type=2 in the statement.

#Using Anova() for Type II ANOVA
result4<-car::Anova(lm(sales ~ cities*stores, data = df),type=2)
print(result4)

Output:

Anova Table (Type II tests)

Response: sales
              Sum Sq Df F value  Pr(>F)  
cities        984.15  1  8.4537 0.02707 *
stores         93.75  1  0.8053 0.40408  
cities:stores 183.75  1  1.5784 0.25569  
Residuals     698.50  6                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Step 3 (Optional): Calculate SST

We can use the following R code to calculate the SST for Type 2 ANOVA.

#calculate the all the SS from different components 
print(sum(result4['Sum Sq']))

Output:

[1] 1960.15

We can see that 984.15+93.75+183.75+698.50 = 1960.15.

To compare, we can also calculate SST. SST can be calculated via a 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               

Thus, SSA | B + SSB | A +SSAB | A, B + SSE ≠ SST for Type 2 ANOVA. This conclusion is consistent with what I discussed in another post.


Further Reading