第 5 章 方差分析

5.1 引言

在工业生产或者实验中经常要比较若干个因素对业务指标的影响。比如,为了比较药物A,B,C对治疗某疾病的疗效,我们将实验对象分成三组,分别记录服用三种药物的治疗效果,得到三组样本

X1,,Xn1; Y1,,Yn2; Z1,,Zn3.

通过这些实验数据,我们希望回答:

  1. 这三种药物对治疗该疾病有没有显著差异;

  2. 如果有差异,哪种药物治疗效果最好?

这个例子中,药物称为因子,A,B,C称为该因子的水平

由于这个实验只涉及单个因子——“药物”,我们称之为单因子实验。此外,如果比较不同的药物和性别对疗效的影响,这就是两因子实验。不难推广到多因子实验

本章介绍方差分析方法(Analysis of Variance, ANOVA),研究因子不同水平的差异性,不同因子交互作用的显著性。这些研究有助于搭配有利于指标的不同因子的水平。虽然本章叫做方差分析,但实际上关心的是不同总体的均值比较,而不是它们的方差。

5.2 单因子方差分析

单因子实验设计(one-way layout)在一个因子的不同水平下分别进行独立的观测,是两个独立样本比较方法的推广。

模型假设:考虑一个因子A,有r个水平A1,,Ar, r2. 设在水平Ai下重复进行了ni次实验(ni2),数据是yi1,yi2,,yini. 假设这些数据之间相互独立且yijN(μi,σ2),其中σ未知。我们关心的问题是μi是否全相等,即要检验

H0:μ1==μr vs. H1:μi不全相等.

n=ri=1ni

ˉy=1nri=1nij=1yij, ˉyi=1ninij=1yij,i=1,,r.

这里ˉy表示所有观测的平均值,ˉyi表示水平Ai下的观测平均值。令

S2T=ri=1nij=1(yijˉy)2, S2e=ri=1nij=1(yijˉyi)2,

S2A=ri=1ni(ˉyiˉy)2.

其中,S2T刻画全部数据的波动程度,S2e刻画组内数据的波动程度,S2A刻画不同组均值的差异引起的波动程度。这三者满足以下三角分解:

S2T=S2e+S2A.

这是由于

S2T=ri=1nij=1(yijˉyi+ˉyiˉy)2=ri=1nij=1(yijˉyi)2+ri=1nij=1(ˉyiˉy)2+2ri=1(ˉyiˉy)nij=1(yijˉyi)=S2e+S2A.

这表明,总的平方和等于组内平方和加上组间平方和。注意到ˉyiμi的无偏估计,如果H0成立,ˉyi应该接近,那么S2A相对S2e小得多。也就意味着两者的比值S2A/S2e大到一定程度就有理由拒绝H0. 为给出确切的拒绝域, 我们需要知道在H0成立下,(S2A,S2e)的分布。

定理 5.1 考虑上述模型假设,有S2e/σ2χ2(nr)S2eS2A独立。如果H0:μ1==μr成立,则有

S2Aσ2χ2(r1), F=S2A/(r1)S2e/(nr)F(r1,nr).

证明. 由单个正态总体的抽样分布定理有,

Vi:=1σ2nij=1(yijˉyi)2χ2(ni1).

由于yij之间独立, 所以Vi相互独立。由卡方分布的可加性,我们有S2e/σ2=ri=1Viχ2(nr). 此外,{V1,,Vr}(ˉy1,,ˉyr)独立。注意到S2Aˉyi的函数,所以S2eS2A独立。 当μ1==μr=μ成立时,ˉyiiidN(μ,σ2/ni). 令xi=ni(ˉyiμ)/σiidN(0,1). 注意到,

S2A=ri=1ni(ˉyiˉy)2σ2=ri=1(niˉyinirj=1njnˉyj)2σ2=ri=1[ni(ˉyiμ)nirj=1njn(ˉyjμ)]2σ2=ri=1(xinirj=1njnxj)2=ri=1x2i(ri=1ni/nxi)2=||x1:r||2(αx1:r)2, 其中α=(n1/n,,nr/n). 注意到||α||=1,参考定理1.4的证明,可以构造一个正交矩阵A使得A的第一行为α。令z1:r=Ax1:rN(0,Ir),此时,||z1:r||2=||x1:r||2, z1=αx1:r. 所以,

S2A=||z1:r||2z21=ri=2z2iχ2(r1).

由于S2eS2A独立,所以FF(r1,nr).

为此,我们采用F检验,拒绝域为W={F>F1α(r1,nr)}. 这种方法为方差分析法,是R. A. Fisher在1923年提出来的。在实践中常用以下方差分析表格。

来源 自由度 平方和 均方和 F P值
因子A r1 S2A=ri=1ni(ˉyiˉy)2 S2A/(r1) S2A/(r1)S2e/(nr)
误差 nr S2e=ri=1nij=1(yijˉyi)2 S2e/(nr)
总和 n1 S2T=Ii=1nij=1(yijˉy)2 S2T/(n1)
例 5.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: 箱线图

mouse.aov <- aov(X~A, data=mouse)
summary(mouse.aov)
##             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, r2,因子B有s个水平:B1,,Bs, s2。 设在水平(Ai,Bj)下重复进行了nij次实验(nij2),数据是yij1,yij2,,yijnij. 假设这些数据之间相互独立且yijkN(μij,σ2),其中σ未知。为分析各个因子对指标的影响,令

μ=1rsri=1sj=1μij,

αi=1ssj=1μijμ, i=1,,r,

βj=1rri=1μijμ, j=1,,s,

λij=μijμαiβj.

于是,模型可以表示为

yijk=μ+αi+βj+λij+ϵijk, ϵijkiidN(0,σ2),

其中αi表示因子A的第i个水平Ai的“主效应”,βj表示因子B的第j个水平Bj的“主效应”,λij表示AiBj下的交互作用的效应。

我们关心因子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, nj=ri=1nij, n=ri=1sj=1nij. 类似地,我们有相应的方差分析表:

来源 自由度 平方和 F P值
A r1 S2A=ri=1ni(ˉyiˉy)2 S2A/(r1)S2e(nrs)
B s1 S2B=sj=1nj(ˉyjˉy)2 S2B/(s1)S2e/(nrs)
A×B (r1)(s1) S2AB=ri=1sj=1nij(ˉyijˉy)2 S2AB/[(r1)(s1)]S2e/(nrs)
误差 nrs S2e=ri=1sj=1nijk=1(yijkˉyij)2
总和 n1 S2T=ri=1sj=1nijk=1(yijkˉy)2
例 5.2 研究树种与地理位置对松树生长的影响。以下有4个地区B1B4,3种同龄松树A1A3的直径测量数据(单位:厘米),请对实验结果做分析。
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
表 5.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检验方法。

此外,本章考虑的是全面实验的情形,即各个因子的所有水平组合都安排实验,得到相应的观测数据。然而,当因子比较多,水平数量比较多时,这种全面实验就不合适了,因此需要合理设计实验,挑选出一些有代表性的组合进行实验,这属于实验设计的内容。感兴趣可以参考陈家鼎等编著的教材的第五章。