第 5 章 方差分析
5.1 引言
在工业生产或者实验中经常要比较若干个因素对业务指标的影响。比如,为了比较药物A,B,C对治疗某疾病的疗效,我们将实验对象分成三组,分别记录服用三种药物的治疗效果,得到三组样本
X1,…,Xn1; Y1,…,Yn2; Z1,…,Zn3.
通过这些实验数据,我们希望回答:
这三种药物对治疗该疾病有没有显著差异;
如果有差异,哪种药物治疗效果最好?
这个例子中,药物称为因子,A,B,C称为该因子的水平。
由于这个实验只涉及单个因子——“药物”,我们称之为单因子实验。此外,如果比较不同的药物和性别对疗效的影响,这就是两因子实验。不难推广到多因子实验。
本章介绍方差分析方法(Analysis of Variance, ANOVA),研究因子不同水平的差异性,不同因子交互作用的显著性。这些研究有助于搭配有利于指标的不同因子的水平。虽然本章叫做方差分析,但实际上关心的是不同总体的均值比较,而不是它们的方差。
5.2 单因子方差分析
单因子实验设计(one-way layout)在一个因子的不同水平下分别进行独立的观测,是两个独立样本比较方法的推广。
模型假设:考虑一个因子A,有r个水平A1,…,Ar, r≥2. 设在水平Ai下重复进行了ni次实验(ni≥2),数据是yi1,yi2,…,yini. 假设这些数据之间相互独立且yij∼N(μi,σ2),其中σ未知。我们关心的问题是μi是否全相等,即要检验
H0:μ1=⋯=μr vs. H1:μi不全相等.
令n=∑ri=1ni,
ˉy=1nr∑i=1ni∑j=1yij, ˉyi⋅=1nini∑j=1yij,i=1,…,r.
这里ˉy表示所有观测的平均值,ˉyi⋅表示水平Ai下的观测平均值。令
S2T=r∑i=1ni∑j=1(yij−ˉy)2, S2e=r∑i=1ni∑j=1(yij−ˉyi⋅)2,
S2A=r∑i=1ni(ˉyi⋅−ˉy)2.
其中,S2T刻画全部数据的波动程度,S2e刻画组内数据的波动程度,S2A刻画不同组均值的差异引起的波动程度。这三者满足以下三角分解:
S2T=S2e+S2A.
这是由于
S2T=r∑i=1ni∑j=1(yij−ˉyi⋅+ˉyi⋅−ˉy)2=r∑i=1ni∑j=1(yij−ˉyi⋅)2+r∑i=1ni∑j=1(ˉyi⋅−ˉy)2+2r∑i=1(ˉyi⋅−ˉy)ni∑j=1(yij−ˉyi⋅)=S2e+S2A.
这表明,总的平方和等于组内平方和加上组间平方和。注意到ˉyi⋅是μi的无偏估计,如果H0成立,ˉyi⋅应该接近,那么S2A相对S2e小得多。也就意味着两者的比值S2A/S2e大到一定程度就有理由拒绝H0. 为给出确切的拒绝域, 我们需要知道在H0成立下,(S2A,S2e)的分布。
定理 5.1 考虑上述模型假设,有S2e/σ2∼χ2(n−r)且S2e与S2A独立。如果H0:μ1=⋯=μr成立,则有
S2Aσ2∼χ2(r−1), F=S2A/(r−1)S2e/(n−r)∼F(r−1,n−r).
证明. 由单个正态总体的抽样分布定理有,
Vi:=1σ2ni∑j=1(yij−ˉyi⋅)2∼χ2(ni−1).
由于yij之间独立, 所以Vi相互独立。由卡方分布的可加性,我们有S2e/σ2=∑ri=1Vi∼χ2(n−r). 此外,{V1,…,Vr}与(ˉy1⋅,…,ˉyr⋅)独立。注意到S2A为ˉyi⋅的函数,所以S2e与S2A独立。 当μ1=⋯=μr=μ成立时,ˉyi⋅iid∼N(μ,σ2/ni). 令xi=√ni(ˉyi⋅−μ)/σiid∼N(0,1). 注意到,
S2A=∑ri=1ni(ˉyi⋅−ˉy)2σ2=∑ri=1(√niˉyi⋅−√ni∑rj=1njnˉyj⋅)2σ2=∑ri=1[√ni(ˉyi⋅−μ)−√ni∑rj=1njn(ˉyj⋅−μ)]2σ2=r∑i=1(xi−√nir∑j=1√njnxj)2=r∑i=1x2i−(r∑i=1√ni/nxi)2=||x1:r||2−(α⊤x1:r)2, 其中α=(√n1/n,…,√nr/n)⊤. 注意到||α||=1,参考定理1.4的证明,可以构造一个正交矩阵A使得A的第一行为α⊤。令z1:r=Ax1:r∼N(0,Ir),此时,||z1:r||2=||x1:r||2, z1=α⊤x1:r. 所以,
S2A=||z1:r||2−z21=r∑i=2z2i∼χ2(r−1).
由于S2e与S2A独立,所以F∼F(r−1,n−r).为此,我们采用F检验,拒绝域为W={F>F1−α(r−1,n−r)}. 这种方法为方差分析法,是R. A. Fisher在1923年提出来的。在实践中常用以下方差分析表格。
来源 | 自由度 | 平方和 | 均方和 | F值 | P值 |
---|---|---|---|---|---|
因子A | r−1 | S2A=∑ri=1ni(ˉyi⋅−ˉy)2 | S2A/(r−1) | S2A/(r−1)S2e/(n−r) | |
误差 | n−r | S2e=∑ri=1∑nij=1(yij−ˉyi⋅)2 | S2e/(n−r) | ||
总和 | n−1 | S2T=∑Ii=1∑nij=1(yij−ˉy)2 | S2T/(n−1) |
菌型 | 存 | 活 | 天 | 数 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | 4 | 3 | 2 | 4 | 7 | 7 | 2 | 2 | 5 | 4 | |
2 | 5 | 6 | 8 | 5 | 10 | 7 | 12 | 12 | 6 | 6 | ||
3 | 7 | 11 | 6 | 6 | 7 | 9 | 5 | 5 | 10 | 6 | 3 | 10 |
方差分析R的关键命令为aov(model,data....)
与lm
类似,详细如下:
library(ggplot2)
mouse <- data.frame(
X = c(2, 4, 3, 2, 4, 7, 7, 2, 2, 5, 4,
5, 6, 8, 5, 10, 7, 12, 12, 6, 6,
7, 11, 6, 6, 7, 9, 5, 5, 10, 6, 3, 10),
A = factor(rep(1:3,c(11,10,12)))
)
ggplot(mouse,aes(A,X,fill=A)) + geom_boxplot()

图 5.1: 箱线图
## Df Sum Sq Mean Sq F value Pr(>F)
## A 2 94.3 47.1 8.48 0.0012 **
## Residuals 30 166.7 5.6
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
从中发现,p=0.0012,在显著水平α=0.05下拒绝H0,即认为注射三种菌型后的平均存活天数有显著差异。
5.3 两因子方差分析
两因子实验设计(two-way layout)研究两个因子在不同水平下的交互作用。
模型假设:考虑因子A有r个水平:A1,…,Ar, r≥2,因子B有s个水平:B1,…,Bs, s≥2。 设在水平(Ai,Bj)下重复进行了nij次实验(nij≥2),数据是yij1,yij2,…,yijnij. 假设这些数据之间相互独立且yijk∼N(μij,σ2),其中σ未知。为分析各个因子对指标的影响,令
μ=1rsr∑i=1s∑j=1μij,
αi=1ss∑j=1μij−μ, i=1,…,r,
βj=1rr∑i=1μij−μ, j=1,…,s,
λij=μij−μ−αi−βj.
于是,模型可以表示为
yijk=μ+αi+βj+λij+ϵijk, ϵijkiid∼N(0,σ2),
其中αi表示因子A的第i个水平Ai的“主效应”,βj表示因子B的第j个水平Bj的“主效应”,λij表示Ai和Bj下的交互作用的效应。
我们关心因子A或者因子B或者它们的交互作用(记为A×B)对指标有没有影响。对应的检验问题为
H0:α1=⋯=αr=0 vs. H1:αi不全为0,
H0:β1=⋯=βs=0 vs. H1:βj不全为0,
H0:λ11=⋯=λrs=0 vs. H1:λij不全为0.
记ni⋅=∑sj=1nij, n⋅j=∑ri=1nij, n=∑ri=1∑sj=1nij. 类似地,我们有相应的方差分析表:
来源 | 自由度 | 平方和 | F值 | P值 |
---|---|---|---|---|
A | r−1 | S2A=∑ri=1ni⋅(ˉyi⋅⋅−ˉy)2 | S2A/(r−1)S2e(n−rs) | |
B | s−1 | S2B=∑sj=1n⋅j(ˉy⋅j⋅−ˉy)2 | S2B/(s−1)S2e/(n−rs) | |
A×B | (r−1)(s−1) | S2AB=∑ri=1∑sj=1nij(ˉyij⋅−ˉy)2 | S2AB/[(r−1)(s−1)]S2e/(n−rs) | |
误差 | n−rs | S2e=∑ri=1∑sj=1∑nijk=1(yijk−ˉyij⋅)2 | ||
总和 | n−1 | S2T=∑ri=1∑sj=1∑nijk=1(yijk−ˉy)2 |
A1 | A2 | A3 | |
---|---|---|---|
B1 | 23, 25, 21, 14, 15 | 28, 30, 19, 17, 22 | 18, 15, 23, 18, 10 |
B2 | 20, 17, 11, 26, 21 | 26, 24, 21, 25, 26 | 21, 25, 12, 12, 22 |
B3 | 16, 19, 13, 16, 24 | 19, 18, 19, 20, 25 | 19, 23, 22, 14, 13 |
B4 | 20, 21, 18, 27, 24 | 26, 26, 28, 29, 23 | 22, 13, 12, 22, 19 |
tree <- data.frame(
Y = c(23, 25, 21, 14, 15,
28, 30, 19, 17, 22,
18, 15, 23, 18, 10,
20, 17, 11, 26, 21,
26, 24, 21, 25, 26,
21, 25, 12, 12, 22,
16, 19, 13, 16, 24,
19, 18, 19, 20, 25,
19, 23, 22, 14, 13,
20, 21, 18, 27, 24,
26, 26, 28, 29, 23,
22, 13, 12, 22, 19),
A = gl(3,5,60,labels = paste0("A",1:3)),
B = gl(4,15,60,labels = paste0("B",1:4))
)
tree.aov <- aov(Y~A*B,tree)
summary(tree.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## A 2 353 176.3 8.96 0.00049 ***
## B 3 88 29.2 1.48 0.23108
## A:B 6 72 12.0 0.61 0.72289
## Residuals 48 944 19.7
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
A | mean | variance |
---|---|---|
A1 | 19.55 | 20.37 |
A2 | 23.55 | 15.63 |
A3 | 17.75 | 22.09 |
由此可得,在显著水平α=0.05下,树种效应A是显著的,地理位置效应B及相互效应A×B并不显著。由于树种效应是显著的,所以选择什么树种对树的生长很重要,计算树种因子的平均值,如上表所示。从中可以看出,第二种树种对生长有利。同样地,我们可以计算地理位置因子的平均值,只不过该因子对生长有没有显著的影响。
5.4 小结
本章主要介绍了方差分析法来研究因子是否显著影响指标。如果发现某因子影响显著,我们可以进一步分析该因子的哪些水平存在差异性,哪些有利于指标。此时就要两两比较不同水平的差异性,如第三章提到的两样本t检验方法。
此外,本章考虑的是全面实验的情形,即各个因子的所有水平组合都安排实验,得到相应的观测数据。然而,当因子比较多,水平数量比较多时,这种全面实验就不合适了,因此需要合理设计实验,挑选出一些有代表性的组合进行实验,这属于实验设计的内容。感兴趣可以参考陈家鼎等编著的教材的第五章。