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, SS_{A | B} + SS_{B | A} +SS_{AB | A, B} + SSE ≠ SST for Type 2 ANOVA. This conclusion is consistent with what I discussed in another post.