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, SS_{A} + SS_{B | A} +SS_{AB | A, B} + SSE = SST. We can test that by adding all SS up, which is 1878.5.

SS_{A} + SS_{B | A} +SS_{AB | 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