Source: http://www.r-bloggers.com/two-way-analysis-of-variance-two-way-anova-in-r/
单因子方差分析是验证多个群组均值是否相等的非常有用的技术。但一些更复杂的问题这个技术就无能为力了。例如,有时需要考虑变异的两个因子来决定群组之间的平均依赖于群组分类(“zone”),还是第二级需考虑的变量(“block”)。在这个情形中应该使用双因子方差分析(双因子ANOVA)。
我们立刻以一个例子开始,以便于理解这个统计方法。收集的数据组织在双项表(double entry tables)中。
-------------------------------------------------------
公司董事收集了5年的收入(thousand dollars),而每年都统计到每个月份。你想看看收入是依赖于年呢,还是依赖于月份,或者与这两个因素都无关。
理论上,这个问题可以用horizontal ANOVA和vertical ANOVA来解决,以便于验证每年的平均收入是否相同,或者由月份计算的平均收入是否相等。这需要许多计算,因而我们更愿意用双因子ANOVA,能够及时提供结果。这是已统计的收入表,分别由年和月份分类:
Months | Year1 | Year2 | Year3 | Year4 | Year5 |
Jan | 15 | 18 | 22 | 23 | 24 |
Feb | 22 | 25 | 15 | 15 | 14 |
Mar | 18 | 22 | 15 | 19 | 21 |
Apr | 23 | 15 | 14 | 17 | 18 |
May | 23 | 15 | 26 | 18 | 14 |
Jun | 12 | 15 | 11 | 10 | 8 |
Jul | 26 | 12 | 23 | 15 | 18 |
Aug | 19 | 17 | 15 | 20 | 10 |
Sep | 15 | 14 | 18 | 19 | 20 |
Oct | 14 | 18 | 10 | 12 | 23 |
Nov | 14 | 22 | 19 | 17 | 11 |
Dec | 21 | 23 | 11 | 18 | 14 |
首先将数据录入,然后创建月份和年两个维度的因子变量:
revenue = c(15,18,22,23,24, 22,25,15,15,14, 18,22,15,19,21, 23,15,14,17,18, 23,15,26,18,14, 12,15,11,10,8, 26,12,23,15,18, 19,17,15,20,10, 15,14,18,19,20, 14,18,10,12,23, 14,22,19,17,11, 21,23,11,18,14) months = gl(12,5) years = gl(5, 1, length(revenue))
现在就拟合线性模型和产生ANOVA表:
fit = aov(revenue ~ months + years) anova(fit) Analysis of Variance Table Response: revenue Df Sum Sq Mean Sq F value Pr(>F) months 11 308.45 28.04 1.4998 0.1660 years 4 44.17 11.04 0.5906 0.6712 Residuals 44 822.63 18.70
这样来解释结果:
不同月份之间差异额显著性为:F=1.4998。这个值比查表值低,并且p-value>0.05。因此我们接受null hypothesis,即根据月份来评估的收入均值都相等,所以变量“月份”在收入上没有影响。
不同年之间差异额显著性为:F=0.5906。这个值比查表值低,并且p-value>0.05。因此我们接受null hypothesis,即根据年来评估的收入均值都相等,所以变量“年”在收入上没有影响。