Two-Way ANOVA
library(data.table)
1 Introduction
So this is an overly pedantic explanation of two-way ANOVA that describes how to do the math both by hand and using R. This will use the CO2
dataset which shows the amount of co2 absorbed by the same species of grass that originated from either Mississippi or Quebec and were measured after being either chilled overnight or unchilled.
co2 <- data.table(CO2)
head(co2)
## Plant Type Treatment conc uptake
## 1: Qn1 Quebec nonchilled 95 16.0
## 2: Qn1 Quebec nonchilled 175 30.4
## 3: Qn1 Quebec nonchilled 250 34.8
## 4: Qn1 Quebec nonchilled 350 37.2
## 5: Qn1 Quebec nonchilled 500 35.3
## 6: Qn1 Quebec nonchilled 675 39.2
The dataset measures co2 uptake at different levels of ambient co2 concentrations so I’ll just average those for each plant.
co2[,.(meanUptake = mean(uptake)), by = .(Plant,Type,Treatment)]
## Plant Type Treatment meanUptake
## 1: Qn1 Quebec nonchilled 33.22857
## 2: Qn2 Quebec nonchilled 35.15714
## 3: Qn3 Quebec nonchilled 37.61429
## 4: Qc1 Quebec chilled 29.97143
## 5: Qc2 Quebec chilled 32.70000
## 6: Qc3 Quebec chilled 32.58571
## 7: Mn1 Mississippi nonchilled 26.40000
## 8: Mn2 Mississippi nonchilled 27.34286
## 9: Mn3 Mississippi nonchilled 24.11429
## 10: Mc1 Mississippi chilled 18.00000
## 11: Mc2 Mississippi chilled 12.14286
## 12: Mc3 Mississippi chilled 17.30000
So there are three plants that received each treatment and come from each location for a total of 12 plants.
The table looks like this:
Mississippi | Quebec | |
---|---|---|
Chilled | 18, 12.143, 17.3 | 29.971, 32.7, 32.586 |
Nonchilled | 26.4, 27.343, 24.114 | 33.229, 35.157, 37.614 |
2 Hypthoses
Now we state our hypotheses. There are three sets of hypotheses:
\(H_0: \text{Temperature (treatment) doesn't affect co2 uptake}\)
\(H_1: \text{Temperature (treatment) does affect co2 uptake}\)
\(H_0: \text{Plant origin (type) doesn't affect co2 uptake}\)
\(H_1: \text{Plant origin (type) does affect co2 uptake}\)
\(H_0: \text{Plant origin (type) and temperature (treatment) don't affect co2 uptake}\)
\(H_1: \text{Plant origin (type) and temperature (treatment) affect co2 uptake}\)
3 ANOVA Table
We have to fill in this ANOVA table to find out if the F-test value is greater or less than the C.V.
d.f. | CV | SS | MS | F | |
---|---|---|---|---|---|
Treatment (A) | a-1 | \(SS_A\) | \(SS_A/(d.f.A)\) | \(MS_A/MS_{Within}\) | |
Type (B) | b-1 | \(SS_B\) | \(SS_{B}/(d.f.B)\) | \(MS_B/MS_{Within}\) | |
Interaction(AxB) | (a-1)(b-1) | \(SS_{AxB}\) | \(SS_{(AxB)}/(d.f.AxB)\) | \(MS_{(AxB)}/MS_{Within}\) | |
Within (error) | ab(n-1) | \(SS_{Within}\) | \(SS_W/d.f.W\) | ||
Total | abr-1 | \(SS_{Total}\) |
4 Degrees of Freedom
To find the critical values we use the F-Distribution table which requires that we have the following:
The Degrees of Freedom for each factor:
Where:
- \(a\) is the number of treatment categories (chilled and nonchilled).
- \(b\) is the number of type categories (Quebec and Mississippi).
- \(n\) is the number of data values in each group.
Also:
- d.f.N stands for Degrees of Freedom Numerator
- d.f.D stands for Degrees of Freedom Denominator
5 Critical Values
Based on those numbers and the F-Distribution Table the critical values are:
- \(CV_{treatment} = 5.3177\)
- \(CV_{type} = 5.3177\)
- \(CV_{type \times treatment} = 5.3177\)
6 Find Sum of Squares and Mean Squares
First we have to find the means for each group, then the means of the rows and columns.
Mississippi | Quebec | Row Mean | |||||
---|---|---|---|---|---|---|---|
Chilled | 18, 12.143, 17.3 (Mean = 15.814) | 29.971, 32.7, 32.586 (Mean = 31.752) | 23.783 | ||||
Nonchilled | 26.4, 27.343, 24.114 (Mean = 25.952) | 33.229, 35.157, 37.614 (Mean = 35.333) | 30.643 | ||||
Column Mean | 20.883 | 33.543 | 27.213 |
In the following equations:
- r = replicants, or the number of values in each group
- b = the number of type categories (Quebec and Mississippi)
- a = the number of treatment categories (chilled and nonchilled)
- \(\bar{X}_{GM}\) = Grand Mean, the mean of all values in the table
6.1 Sum and Mean Squares A
\[\begin{align} SS_{A} = SS_{treatment} & = rb \sum_{i=1}^A (\bar{X}_{i } - \bar{X}_{GM})^2 \\ & & \\ SS_{treatment} & = 3 \times 2 \times[(23.783 - 27.213)^2 + (30.642 - 27.213)^2] = 141.138 \\ & & \\ \text{We're just taking each row mean,} & \text{ subtracting it from the grand mean, squaring each of them, and then adding the result together.} \ & & \\ \text{Then we multiply that result by t} & \text{he number of samples in each group and by the number of }\textbf{ type}\text{ categories.} \\ & & \\ MS_{treatment} & = SS_{treatment} \mathbin{/} df_{treatment} = SS_{treatment} \mathbin{/} (a-1) \\ & & \\ MS_{treatment} & = 141.138 \mathbin{/} 1 = 141.138 \end{align}\]6.2 Sum and Mean Squares B
6.3 Sum and Mean Squares Interaction
6.4 Sum and Mean Square Within
\[\begin{align} SS_W & = \sum_{k=1}^r \sum_{j=1}^B \sum_{i=1}^A (X_{ijk} - \bar{X}_{ij})^2 \\ & & \\ SS_W & = (18 - 15.814)^2 + (12.143 - 15.814)^2 + (17.3 - 15.814)^2 + (29.971 - 31.752)^2 + \ & & \\ & \hspace{.5cm} _{\cdot \space \cdot \space \cdot \space \cdot \space \cdot} \ & & \\ & \hspace{.5cm} + (37.614 - 35.333)^2 \\ & & \\ SS_W & = 40.404 \\ & & \\ \text{Here were taking each} & \text{ value in each group, subtracting from the mean of the group and squaring the result.} \\ & & \\ MS_W & = SS_W \mathbin{/} df_{within} = SS_W \mathbin{/} ab(n-1) \\ & & \\ MS_W & = 40.404 \mathbin{/} 8 = 5.050 \end{align}\]7 F-Test
8 ANOVA Table
Now we can build our ANOVA table:
d.f. | CV | SS | MS | F | |
---|---|---|---|---|---|
Treatment (A) | 1 | 5.3177 | 141.138 | 141.138 | 27.948 |
Type (B) | 1 | 5.3177 | 480.827 | 480.827 | 95.213 |
Interaction(AxB) | 1 | 5.3177 | 32.246 | 32.246 | 6.385 |
Within (error) | 8 | 40.404 | 5.050 | ||
Total | 11 | 694.615 |
So based on that we can see that all three factors cross the \(\alpha = 0.05\) threshold. Doing the operation in R confirms this.
9 Do It In R
co2 <- co2[,.(meanUptake = mean(uptake)), by = .(Plant,Type,Treatment)]
head(co2)
## Plant Type Treatment meanUptake
## 1: Qn1 Quebec nonchilled 33.22857
## 2: Qn2 Quebec nonchilled 35.15714
## 3: Qn3 Quebec nonchilled 37.61429
## 4: Qc1 Quebec chilled 29.97143
## 5: Qc2 Quebec chilled 32.70000
## 6: Qc3 Quebec chilled 32.58571
co2.model = aov(meanUptake ~ Type + Treatment + Type:Treatment, data = co2)
co2.model
## Call:
## aov(formula = meanUptake ~ Type + Treatment + Type:Treatment,
## data = co2)
##
## Terms:
## Type Treatment Type:Treatment Residuals
## Sum of Squares 480.7906 141.1592 32.2471 40.4045
## Deg. of Freedom 1 1 1 8
##
## Residual standard error: 2.247345
## Estimated effects may be unbalanced
anova(co2.model)
## Analysis of Variance Table
##
## Response: meanUptake
## Df Sum Sq Mean Sq F value Pr(>F)
## Type 1 480.79 480.79 95.1955 1.02e-05 ***
## Treatment 1 141.16 141.16 27.9492 0.0007402 ***
## Type:Treatment 1 32.25 32.25 6.3849 0.0354301 *
## Residuals 8 40.40 5.05
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Yeah, that’s much faster.
10 F-Distribution Table \(\alpha\) = 0.05
/ | dfN = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 15 | 20 | 24 | 30 | 40 | 60 | 120 | ∞ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
dfD=1 | 161.4476 | 199.5000 | 215.7073 | 224.5832 | 230.1619 | 233.9860 | 236.7684 | 238.8827 | 240.5433 | 241.8817 | 243.9060 | 245.9499 | 248.0131 | 249.0518 | 250.0951 | 251.1432 | 252.1957 | 253.2529 | 254.3144 |
2 | 18.5128 | 19.0000 | 19.1643 | 19.2468 | 19.2964 | 19.3295 | 19.3532 | 19.3710 | 19.3848 | 19.3959 | 19.4125 | 19.4291 | 19.4458 | 19.4541 | 19.4624 | 19.4707 | 19.4791 | 19.4874 | 19.4957 |
3 | 10.1280 | 9.5521 | 9.2766 | 9.1172 | 9.0135 | 8.9406 | 8.8867 | 8.8452 | 8.8123 | 8.7855 | 8.7446 | 8.7029 | 8.6602 | 8.6385 | 8.6166 | 8.5944 | 8.5720 | 8.5494 | 8.5264 |
4 | 7.7086 | 6.9443 | 6.5914 | 6.3882 | 6.2561 | 6.1631 | 6.0942 | 6.0410 | 5.9988 | 5.9644 | 5.9117 | 5.8578 | 5.8025 | 5.7744 | 5.7459 | 5.7170 | 5.6877 | 5.6581 | 5.6281 |
5 | 6.6079 | 5.7861 | 5.4095 | 5.1922 | 5.0503 | 4.9503 | 4.8759 | 4.8183 | 4.7725 | 4.7351 | 4.6777 | 4.6188 | 4.5581 | 4.5272 | 4.4957 | 4.4638 | 4.4314 | 4.3985 | 4.3650 |
6 | 5.9874 | 5.1433 | 4.7571 | 4.5337 | 4.3874 | 4.2839 | 4.2067 | 4.1468 | 4.0990 | 4.0600 | 3.9999 | 3.9381 | 3.8742 | 3.8415 | 3.8082 | 3.7743 | 3.7398 | 3.7047 | 3.6689 |
7 | 5.5914 | 4.7374 | 4.3468 | 4.1203 | 3.9715 | 3.8660 | 3.7870 | 3.7257 | 3.6767 | 3.6365 | 3.5747 | 3.5107 | 3.4445 | 3.4105 | 3.3758 | 3.3404 | 3.3043 | 3.2674 | 3.2298 |
8 | 5.3177 | 4.4590 | 4.0662 | 3.8379 | 3.6875 | 3.5806 | 3.5005 | 3.4381 | 3.3881 | 3.3472 | 3.2839 | 3.2184 | 3.1503 | 3.1152 | 3.0794 | 3.0428 | 3.0053 | 2.9669 | 2.9276 |
9 | 5.1174 | 4.2565 | 3.8625 | 3.6331 | 3.4817 | 3.3738 | 3.2927 | 3.2296 | 3.1789 | 3.1373 | 3.0729 | 3.0061 | 2.9365 | 2.9005 | 2.8637 | 2.8259 | 2.7872 | 2.7475 | 2.7067 |
10 | 4.9646 | 4.1028 | 3.7083 | 3.4780 | 3.3258 | 3.2172 | 3.1355 | 3.0717 | 3.0204 | 2.9782 | 2.9130 | 2.8450 | 2.7740 | 2.7372 | 2.6996 | 2.6609 | 2.6211 | 2.5801 | 2.5379 |
11 | 4.8443 | 3.9823 | 3.5874 | 3.3567 | 3.2039 | 3.0946 | 3.0123 | 2.9480 | 2.8962 | 2.8536 | 2.7876 | 2.7186 | 2.6464 | 2.6090 | 2.5705 | 2.5309 | 2.4901 | 2.4480 | 2.4045 |
12 | 4.7472 | 3.8853 | 3.4903 | 3.2592 | 3.1059 | 2.9961 | 2.9134 | 2.8486 | 2.7964 | 2.7534 | 2.6866 | 2.6169 | 2.5436 | 2.5055 | 2.4663 | 2.4259 | 2.3842 | 2.3410 | 2.2962 |
13 | 4.6672 | 3.8056 | 3.4105 | 3.1791 | 3.0254 | 2.9153 | 2.8321 | 2.7669 | 2.7144 | 2.6710 | 2.6037 | 2.5331 | 2.4589 | 2.4202 | 2.3803 | 2.3392 | 2.2966 | 2.2524 | 2.2064 |
14 | 4.6001 | 3.7389 | 3.3439 | 3.1122 | 2.9582 | 2.8477 | 2.7642 | 2.6987 | 2.6458 | 2.6022 | 2.5342 | 2.4630 | 2.3879 | 2.3487 | 2.3082 | 2.2664 | 2.2229 | 2.1778 | 2.1307 |
15 | 4.5431 | 3.6823 | 3.2874 | 3.0556 | 2.9013 | 2.7905 | 2.7066 | 2.6408 | 2.5876 | 2.5437 | 2.4753 | 2.4034 | 2.3275 | 2.2878 | 2.2468 | 2.2043 | 2.1601 | 2.1141 | 2.0658 |
16 | 4.4940 | 3.6337 | 3.2389 | 3.0069 | 2.8524 | 2.7413 | 2.6572 | 2.5911 | 2.5377 | 2.4935 | 2.4247 | 2.3522 | 2.2756 | 2.2354 | 2.1938 | 2.1507 | 2.1058 | 2.0589 | 2.0096 |
17 | 4.4513 | 3.5915 | 3.1968 | 2.9647 | 2.8100 | 2.6987 | 2.6143 | 2.5480 | 2.4943 | 2.4499 | 2.3807 | 2.3077 | 2.2304 | 2.1898 | 2.1477 | 2.1040 | 2.0584 | 2.0107 | 1.9604 |
18 | 4.4139 | 3.5546 | 3.1599 | 2.9277 | 2.7729 | 2.6613 | 2.5767 | 2.5102 | 2.4563 | 2.4117 | 2.3421 | 2.2686 | 2.1906 | 2.1497 | 2.1071 | 2.0629 | 2.0166 | 1.9681 | 1.9168 |
19 | 4.3807 | 3.5219 | 3.1274 | 2.8951 | 2.7401 | 2.6283 | 2.5435 | 2.4768 | 2.4227 | 2.3779 | 2.3080 | 2.2341 | 2.1555 | 2.1141 | 2.0712 | 2.0264 | 1.9795 | 1.9302 | 1.8780 |
20 | 4.3512 | 3.4928 | 3.0984 | 2.8661 | 2.7109 | 2.5990 | 2.5140 | 2.4471 | 2.3928 | 2.3479 | 2.2776 | 2.2033 | 2.1242 | 2.0825 | 2.0391 | 1.9938 | 1.9464 | 1.8963 | 1.8432 |
21 | 4.3248 | 3.4668 | 3.0725 | 2.8401 | 2.6848 | 2.5727 | 2.4876 | 2.4205 | 2.3660 | 2.3210 | 2.2504 | 2.1757 | 2.0960 | 2.0540 | 2.0102 | 1.9645 | 1.9165 | 1.8657 | 1.8117 |
22 | 4.3009 | 3.4434 | 3.0491 | 2.8167 | 2.6613 | 2.5491 | 2.4638 | 2.3965 | 2.3419 | 2.2967 | 2.2258 | 2.1508 | 2.0707 | 2.0283 | 1.9842 | 1.9380 | 1.8894 | 1.8380 | 1.7831 |
23 | 4.2793 | 3.4221 | 3.0280 | 2.7955 | 2.6400 | 2.5277 | 2.4422 | 2.3748 | 2.3201 | 2.2747 | 2.2036 | 2.1282 | 2.0476 | 2.0050 | 1.9605 | 1.9139 | 1.8648 | 1.8128 | 1.7570 |
24 | 4.2597 | 3.4028 | 3.0088 | 2.7763 | 2.6207 | 2.5082 | 2.4226 | 2.3551 | 2.3002 | 2.2547 | 2.1834 | 2.1077 | 2.0267 | 1.9838 | 1.9390 | 1.8920 | 1.8424 | 1.7896 | 1.7330 |
25 | 4.2417 | 3.3852 | 2.9912 | 2.7587 | 2.6030 | 2.4904 | 2.4047 | 2.3371 | 2.2821 | 2.2365 | 2.1649 | 2.0889 | 2.0075 | 1.9643 | 1.9192 | 1.8718 | 1.8217 | 1.7684 | 1.7110 |
26 | 4.2252 | 3.3690 | 2.9752 | 2.7426 | 2.5868 | 2.4741 | 2.3883 | 2.3205 | 2.2655 | 2.2197 | 2.1479 | 2.0716 | 1.9898 | 1.9464 | 1.9010 | 1.8533 | 1.8027 | 1.7488 | 1.6906 |
27 | 4.2100 | 3.3541 | 2.9604 | 2.7278 | 2.5719 | 2.4591 | 2.3732 | 2.3053 | 2.2501 | 2.2043 | 2.1323 | 2.0558 | 1.9736 | 1.9299 | 1.8842 | 1.8361 | 1.7851 | 1.7306 | 1.6717 |
28 | 4.1960 | 3.3404 | 2.9467 | 2.7141 | 2.5581 | 2.4453 | 2.3593 | 2.2913 | 2.2360 | 2.1900 | 2.1179 | 2.0411 | 1.9586 | 1.9147 | 1.8687 | 1.8203 | 1.7689 | 1.7138 | 1.6541 |
29 | 4.1830 | 3.3277 | 2.9340 | 2.7014 | 2.5454 | 2.4324 | 2.3463 | 2.2783 | 2.2229 | 2.1768 | 2.1045 | 2.0275 | 1.9446 | 1.9005 | 1.8543 | 1.8055 | 1.7537 | 1.6981 | 1.6376 |
30 | 4.1709 | 3.3158 | 2.9223 | 2.6896 | 2.5336 | 2.4205 | 2.3343 | 2.2662 | 2.2107 | 2.1646 | 2.0921 | 2.0148 | 1.9317 | 1.8874 | 1.8409 | 1.7918 | 1.7396 | 1.6835 | 1.6223 |
40 | 4.0847 | 3.2317 | 2.8387 | 2.6060 | 2.4495 | 2.3359 | 2.2490 | 2.1802 | 2.1240 | 2.0772 | 2.0035 | 1.9245 | 1.8389 | 1.7929 | 1.7444 | 1.6928 | 1.6373 | 1.5766 | 1.5089 |
60 | 4.0012 | 3.1504 | 2.7581 | 2.5252 | 2.3683 | 2.2541 | 2.1665 | 2.0970 | 2.0401 | 1.9926 | 1.9174 | 1.8364 | 1.7480 | 1.7001 | 1.6491 | 1.5943 | 1.5343 | 1.4673 | 1.3893 |
120 | 3.9201 | 3.0718 | 2.6802 | 2.4472 | 2.2899 | 2.1750 | 2.0868 | 2.0164 | 1.9588 | 1.9105 | 1.8337 | 1.7505 | 1.6587 | 1.6084 | 1.5543 | 1.4952 | 1.4290 | 1.3519 | 1.2539 |
∞ | 3.8415 | 2.9957 | 2.6049 | 2.3719 | 2.2141 | 2.0986 | 2.0096 | 1.9384 | 1.8799 | 1.8307 | 1.7522 | 1.6664 | 1.5705 | 1.5173 | 1.4591 | 1.3940 | 1.3180 | 1.2214 | 1.0000 |