一、从哑变量到方差分析
1.1 哑变量的引入
在前面的学习中,我们已经掌握了线性回归模型的基本形式,即通过线性组合的方式,用一个或多个自变量去解释响应变量的变化。当自变量是连续变量时,线性回归能够直接刻画变量之间的线性关系。然而,在许多实际研究中,自变量可以不是连续变量,它可以是离散变量/属性变量,比如病情的描述可以是“良好”,“中等”,“较差”,“恶化”。如果遇到这样的属性变量,该如何运用到线性回归中呢?
此时,我们仍然可以利用线性回归的框架,只需要引入哑变量(dummy variable)来将其编码为可计算的数值即可。哑变量是通过0-1编码来表征变量所处的状态或属性,从而能够在拟合时使用某一个状态来参与建模。
具体来说,如果一个属性变量有k个状态,那么我们向模型中添加k−1个哑变量x(1),⋯,x(k−1),这些哑变量的取值是:
x(i)={1,0,处于状态i其他状态
对于第k个状态,我们只需要将所有哑变量设置为0,即x(1)=⋯=x(k−1)=0。
此时,我们的模型可以写作:
Y=β0+β1x(1)+⋯+βqx(q)+e
例如,在状态j下,E(Y∣状态j)=β0+βj,在状态k下,E(Y∣状态k)=β0。这样一来就分别表示了属性变量不同状态下的观测。
除了上面这种取法,还有一种取法,就是在上述取法的基础上,对状态k取-1,即:
x(i)=⎩⎨⎧1,−1,0,处于状态i处于状态k其他状态
此时,在状态j下,E(Y∣状态j)=β0+βj不变,但是在状态k下:
E(Y∣状态k)=β0−(β1+⋯+βk−1)
此时:
β0=j=1∑kE(Y∣状态j)/k
β0就代表了这个属性变量的平均效应。
1.2 方差分析的概念
我们再回到1.1小节所提到的模型:
Y=β0+β1x(1)+⋯+βqx(q)+e
这个模型虽然是线性回归,但是这里的回归系数还是原来的含义吗?
在一般的线性回归模型当中,回归系数刻画了当自变量变化一个单位时响应变量的变化量。而在这个模型中你会发现,每一个回归系数只刻画了某个状态的贡献。也就是说,因为每一个样本只可能处于某一个状态,所以当样本值输入到模型当中时,除了常数项β0之外,只有一个回归系数能够参与运算。再进一步说,我们是以某个状态的均值为基准,考察其他状态均值相对于基准状态均值的差异,而对回归系数的假设检验则是考察状态之间均值的差异是否显著。
既然是考虑各个状态的均值差异是否显著,那么除了通过回归模型检验回归系数,还可以对响应变量的方差(波动)进行分解。也就是说,响应变量的方差可以被分解为:
总方差=状态/组别之间方差+状态/组别内部方差
对于同一个状态/分组,其内部存在波动;不同状态/组别的均值之间也存在波动;如果组别之间的波动远远大于组别内部的波动,就能说明每个组别是显著不同的。这就是方差分析的概念。
方差分析(Analysis of Variance, ANOVA)模型是一类特殊的线性回归模型,它的响应变量往往是连续的,而自变量则是属性变量的状态。方差分析并不是与回归分析平行的另一种统计方法,而是线性回归模型的一个特例,它关注的核心问题是:不同组别的均值差异是否显著。
方差分析在许多研究中都有应用,例如不同肥料是否导致作物产量的差异、不同教学方法是否影响学生成绩等,我们关心的问题在于不同处理组或条件下的均值是否不同。
你或许听说过协方差分析(Analysis of Covariance, ANCOVA)。协方差分析就是在属性变量的基础上再添加一些连续变量进行混合分析,即:
Y=β0+β1x(1)+⋯+βqx(q)+Zγ+e
其中γ=(γ1,⋯,γp)T代表连续变量的回归系数,Z为设计矩阵。协方差分析本质上就是在考虑连续变量效应(这些连续变量称为协变量)的基础上进行方差分解,也是非常常见的模型。但是我们并不进行展开,这是因为协方差分析理论较为落后,其主要原因是受到算力的限制,被迫发展出便于手工计算的方法。在目前的高算力时代,直接引入哑变量进行拟合已不再是难题,所以我们不再学习传统的协方差分析。
当然,后面你会看到,方差分析也是可以手工计算而不需要拟合模型的,但是它的思想非常重要,应用也不局限于方差分析本身。
二、单因素方差分析
我们先从最简单的情况开始,也就是只有一个属性变量的情况。
2.1 模型概述与拟合
假设我们仅仅研究因素A对响应值的影响,因素A有a个水平,并且在第Ai(i=1,⋯,a)个水平下有ni个响应值yi1,⋯,yini。如果使用方差分析来建立模型,那么观测值要服从正态分布,即:
yij∼N(μi,σ2),i=1,⋯,a,j=1,⋯,ni
其中μi表示第i个水平的均值。因此,我们可以给出一种可能的模型结构:
yij=μi+eij,eij∼N(0,σ2)
这种结构我们称之为均值模型。在均值模型下,我们很容易写出估计值:
μ^i=j=1∑niyij/ni=yi⋅
也就是说,每个水平均值的估计值就是这个水平下所有观测值的平均值。
均值模型对于单因素方差分析来说已经足够,但不便于把所有方差分析模型都统一起来。于是,我们使用一个更普遍地写法,称之为主效应模型,即:
yij=μi+eij=μ+αi+eij,μ=i=1∑aniμi/N
其中μ称为主效应,是因素A各个水平带来的平均效应;αi称为额外效应,是由因素A的不同水平带来的效应。也就是说,我们认为只要存在因素A,就应该有一个平均效应μ,然后根据样本所处不同组别进行额外效应的调整。
如果我们把上述分量形式写成矩阵形式(其中En代表(1,⋯,1)1×nT):
y11⋮y1n1y21⋮ya1⋮yana=En1En2⋮EnaEn10⋮00En2⋮0⋯⋯⋱⋯00⋮Enaμα1α2⋮αa+e11⋮e1n1e21⋮ea1⋮eana
你就会发现这就是一个线性回归模型,只不过没使用哑变量。另外,由于每一次观测都只属于某一个因素水平,所以这个模型的设计矩阵X是精确设计的,这与一般的线性回归模型有很大不同。
有了这个表达式并不够,你会发现XN×(a+1)的秩为a,即设计矩阵不是列满秩的,所以根据之前所学,这个模型存在多个解。那么为了使得模型有解,我们需要给额外效应加上约束条件:
i=1∑aniαi=0
这个约束条件其实非常符合逻辑。在统计学中我们知道,一组样本x1,⋯,xn的离均差之和为0,即:
i=1∑n(xi−x)=0
这里也一样,因为我们定义了因素A的平均效应/主效应,那么因素A的各个水平的额外效应(相当于离均差)的总和应当为0,所以这个条件非常自然,同时也使得模型有解。
因此,我们可以写出最终的主效应模型:
{Y=Xβ+e,Lβ=0,β=(μ,α1,⋯,αa)TL=(0,n1,⋯,nα)
如果你学习了之前的内容,你会感到非常熟悉,这就是有约束的线性回归模型,并且设计矩阵被精确设计,不存在共线性等一系列问题。根据正规方程不难解得:
μ^=y⋅⋅,α^i=yi⋅−y⋅⋅
同时,由于Lβ=0是边界条件,所以上述估计是无偏估计。
这里的y⋅⋅代表总体均值(也就是对行列所有数据求平均),yi⋅代表对第i行/水平的所有列求平均。
2.2 模型假设检验
我们已经知道,方差分析模型要检验的就是不同水平之间是否存在显著差异。那么对于单因素方差分析来说,其检验的目标是:
H0:α1=⋯=αa
仿照线性回归模型的检验方法,我们构造组内平方和,即每个观测值减去其所属水平的均值的平方:
ESS=i=1∑aj=1∑ni(yij−μ^−α^i)2=i=1∑aj=1∑ni(yij−yi⋅)2
同理,我们构造总平方和,即每个观测值减去总体均值的平方:
TSS=i=1∑aj=1∑ni(yij−y⋅⋅)2
用总平方和减去组内平方和,就可以构造组间平方和,或者等价于用每个水平的均值减去总体均值的平方,再赋予每组的样本数:
TSS−ESS=i=1∑ani(yi⋅−y⋅⋅)2≡SSA
根据我们之前的讨论,如果因素A的组间平方和SSA显著有别于组内平方和ESS,那么说明因素A的不同水平之间有显著差异。类似于线性回归模型,我们仍然可以构造F分布:
F=ESS/(N−a)SSA/(a−1)∼Fa−1,N−a
如果通过检验,说明因素A的不同水平之间是有差异的。
为了记录计算过程,便于手工计算,Fisher提出了方差分析表。我们重新定义分子分母为两个均方和
MSA=SSA/(a−1)MSE=ESS/(N−a)
那么可以构造如下方差分析表:
| 来源 |
自由度 |
平方和 |
均方和 |
F值 |
显著性标识 |
| 因子A |
a−1 |
SSA |
MSA |
F=MSA/MSE |
*** |
| 误差E |
N−a |
ESS |
MSE |
|
|
| 总和T |
N−1 |
TSS |
|
|
|
基于这个表就可以很清晰的看到方差分析的过程,这也是很多方差分析软件返回的结果形式。值得一提的是,MSE就是线性回归模型中的σ^2,是对σ2的无偏估计。
如果你学习过之前的内容,那么你或许对“方差分析表”一词有点熟悉。没错,在第4讲的内容当中,我们对线性回归模型进行假设检验时用到了方差分析表,当时的输出是:
> anova(nullmod, lmod) Analysis of Variance Table
Model 1: Species ~ 1 Model 2: Species ~ Area + Elevation + Nearest + Scruz + Adjacent Res.Df RSS Df Sum of Sq F Pr(>F) 1 29 381081 2 24 89231 5 291850 15.699 6.838e-07 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
|
你可以看到这个命令返回了一个方差分析表,这个表和上面的表大同小异。那么为什么线性回归模型检验本质是方差分析呢?
1.2小节中我们提到,方差分析本质也就是检验每个水平前面的回归系数是否显著不为0,那么在线性回归中原理也是一样的:回归平方和相当于组间平方和,残差平方和相当于组内平方和。这也是为什么我们可以把anova()函数用于线性回归模型。
2.3 多重比较
如果原假设被拒绝,那么说明总体上来说因素A的不同水平之间存在差异,但是我们并不清楚每两个水平之间是否真的存在差异。就像线性回归模型,我们只知道一定有回归系数显著不为0,但是不能保证每一个回归系数都显著不为0,因此要对每一个回归系数进行检验。
在方差分析中,这种检验被称为多重比较(Multiple Comparison),即我们要检验的目标是αi=αj(i=j),或者等价于要检验αi−αj(i=j)的置信区间是否包含0点。因此,我们要设法求出置信区间。下面给出三种可行的方法:
- Bonferroni同时置信区间
- Scheffe同时置信区间
- TukeyHSD
前面两种方法我们在之前的讲解中已经遇到,不过我们需要在方差分析的版块中进行一定的变化;第三种是方差分析特有的方法,当然也是更流行、更推荐的方法。
为了模型的通用性,这里我们引入对照的概念,即∑i=1aciαi,其中∑i=1aci=0。对于方差分析来说,多重比较的对照是遍历αi−αj,对照总个数是m=a(a−1)/2。例如,如果要检验α1−α2,那么其对应的对照是c1=(1−10⋯0)。
Bonferroni同时置信区间。对于m个对照∑i=1aci(k)αi(k=1,⋯,m)来说,其1−α的Bonferroni同时置信区间为:
i=1∑aci(k)yi⋅±tN−a(2mα)σ^2i=1∑an[ci(k)]2,k=1,⋯,m
对于方差分析来说,Bonferroni同时置信区间为:
(yi⋅−yj⋅)±tN−a(2mα)σ^2ni1+nj1,1≤i=j≤a
Scheffe同时置信区间。无论对照个数,所有对照的1−α的Scheffe同时置信区间为:
i=1∑aciyi⋅±σ^(a−1)Fa−1,N−a(α)i=1∑anici2,1≤i=j≤a
对于方差分析来说,Scheffe同时置信区间为:
(yi⋅−yj⋅)±σ^2(a−1)Fa−1,N−a(α)(ni1+nj1),1≤i=j≤a
TukeyHSD(Tukey Honest Significant Difference)。TukeyHSD是由Tukey提出来的检验方法,它没有采用熟知的t分布或F分布,而是提出了一个新的分布,称为学生化极差分布。设一组独立样本样本Z1,⋯,Zn∼N(0,1),且mW2∼χm2,那么定义:
Q=W{max1≤i≤nZi−min1≤i≤nZi}∼Qn,m
因此,如果设yi∼N(μi,σ2),i=1,⋯,n,且mσ^2/σ2∼χm2,那么Tukey的1−α同时置信区间应当为:
(yi−yj)±σ^Qn,m(α)
在单因素方差分析中,TukeyHSD只能用于平衡数据,即n1=⋯=na=n,此时yi⋅∼N(μ+αi,σ2/n),i=1,⋯,a,(N−a)σ^2/σ2∼χN−a2,那么所有αi−αj的1−α同时置信区间为:
(yi⋅−yj⋅)±nσ^Qa,N−a(α)
当然,我们可以推广到所有对照:
i=1∑aciyi⋅±Qa,N−a(α)2nσ^i=1∑a∣ci∣
三、双因素方差分析
上一节我们处理了单因素的方差分析,现在我们将其推广到两个因素。不过其中的原理和方法都是类似的,我们可以仿造上面的内容衍生对应的结论。
3.1 无交互双因素方差分析
无交互,指的是两个因素之间互不干扰,对观测值的影响相互独立。在无交互模型中,我们考虑因素A有a个水平,因素B有b个水平。根据主效应模型,我们定义总体的主效应μ,因素A的额外效应αi,因素B的额外效应βj。我们认为效应之间是可加的,且由于不存在交互,每一组效应(αi,βj)之下只进行一次测定。
模型的基本假定为:yij∼N(μij,σ2),eij∼N(0,σ2),μ=∑i=1a∑j=1bμij/(ab)。
于是模型可以写作:
yij=μ+αi+βj+eij,i=1,⋯,a,j=1,⋯,b
容易想到设计矩阵XN×(a+b+1)的秩是a+b−1,解不唯一,于是添加约束:
i=1∑aαi=0,j=1∑bβj=0
于是模型转化为矩阵形式:
{Y=Xβ+e,(L1L2)β=0,β=(μ,α1⋯,αa,β1,⋯,βb)TL1=(0EaT),L2=(0EbT)
求解可得:
μ^=y⋅⋅,α^i=yi⋅−y⋅⋅,β^j=y⋅j−y⋅⋅
得到估计值后就要进行假设检验。无交互双因素方差分析的原假设有两个:α1=⋯=αa,β1=⋯=βj,因此总平方和的来源是因素A、因素B、残差,于是我们可以定义方差分析表的几个指标:
TSSTSSESSSSASSB=SSA+SSB+ESS=i=1∑aj=1∑b(yij−y⋅⋅)2=i=1∑aj=1∑b(yij−yi⋅−y⋅j+y⋅⋅)2=i=1∑aj=1∑b(yi⋅−y⋅⋅)2=i=1∑aj=1∑b(y⋅j−y⋅⋅)2
无交互双因素方差分析的方差分析表为:
| 来源 |
自由度 |
平方和 |
均方和 |
F值 |
显著性 |
| 因子A |
a−1 |
SSA |
MSA |
MSA/MSE |
*** |
| 因子B |
b−1 |
SSB |
MSB |
MSB/MSE |
*** |
| 误差E |
(a−1)(b−1) |
ESS |
MSE |
|
|
| 总和T |
ab−1 |
TSS |
|
|
|
类似地,我们仿造单因素方差分析的结论,给出同时置信区间。
任意m个αi−αi′和βj−βj′的Bonferroni1−α同时置信区间分别为:
(yi⋅−yi′⋅)(y⋅j−y⋅j′)±t(a−1)(b−1)(2mα)σ^b2±t(a−1)(b−1)(2mα)σ^a2
所有αi−αi′和βj−βj′的Scheffe1−α同时置信区间分别为:
(yi⋅−yi′⋅)(y⋅j−y⋅j′)±σ^(a−1)b2F(a−1)(b−1)(α)±σ^(b−1)a2F(a−1)(b−1)(α)
所有αi−αi′和βj−βj′的Tukey1−α同时置信区间分别为:
(yi⋅−yi′⋅)(y⋅j−y⋅j′)±Qa,(a−1)(b−1)(α)bσ^±Qb,(a−1)(b−1)(α)aσ^
3.2 有交互双因素方差分析
3.1小节介绍了无交互下的双因素方差分析,这一小节我们来看存在交互项的情况。
存在交互项,意味着在(αi,βj)水平下还有二者交互产生的作用rij。因此,如果要拟合交互项,那么每一个水平组合下就应当不止测量1次。于是模型可以写作:
yijk=μ+αi+βj+rij+eijk,k=1,⋯,nij
模型中的k表示了在(αi,βj)水平下测量的次数nij。
为什么存在交互项就必须要重复测量?
这是因为,如果每一个水平组合下只有一个观测,那么所谓的“组内方差”就为0,这样就无法分离误差项,也就无法解释主效应和额外效应了。就好像只用一个点做回归分析,毫无意义。
为了简化,我们假定是平衡数据,即所有nij均为常数c,那么设计矩阵Xabc×(ab+a+b+1)的秩应当为ab(根据正规方程,最后只有ab个独立的方程),因此我们需要a+b+1个约束条件,即:
i=1∑aαi=0j=1∑bβj=0j=1∑brij=0,1≤i≤ai=1∑arij=0,1≤j≤b
根据正规方程可以解得:
μ^α^iβ^jr^ij=y⋅⋅⋅=yi⋅⋅−y⋅⋅⋅=y⋅j⋅−y⋅⋅⋅=yij⋅−yi⋅⋅−y⋅j⋅+y⋅⋅⋅
同理,假设检验的统计量为:
TSSSSASSBSSABESS=SSA+SSB+SSAB+SSE=i=1∑aj=1∑bk=1∑c(yi⋅⋅−y⋅⋅⋅)2=i=1∑aj=1∑bk=1∑c(y⋅j⋅−y⋅⋅⋅)2=i=1∑aj=1∑bk=1∑c(yij⋅−yi⋅⋅−y⋅j⋅+y⋅⋅⋅)2=i=1∑aj=1∑bk=1∑c(yijk−yij⋅)2
方差分析表为:
| 来源 |
自由度 |
平方和 |
均方和 |
F值 |
显著性 |
| 因子A |
a−1 |
SSA |
MSA |
MSA/MSE |
*** |
| 因子B |
b−1 |
SSB |
MSB |
MSB/MSE |
*** |
| 交互项 |
(a−1)(b−1) |
SSAB |
MSAB |
MSAB/MSE |
*** |
| 误差E |
ab(c−1) |
ESS |
MSE |
|
|
| 总和T |
abc−1 |
TSS |
|
|
|
四、方差分析的诊断
前面我们介绍了方差分析的模型构建、假设检验、多重比较等,但是一直没有诊断模型的假设。如果不满足假设,那么上述所有的检验统计量就都不服从F分布,那么方差分析的结果就不可靠。所以,有必要对方差分析的前提假设进行诊断。对于方差分析来说,我们主要检验残差的正态性和方差齐性。这里我们以单因素方差分析为例进行说明。
4.1 正态性诊断
回顾单因素方差分析的模型表达式为yij=μ+αi+eij,其中i=1,⋯,a,j=1,⋯,ni,令残差的估计值为e^ij=yij−yi⋅,那么有:
E(e^ij)=0Var(e^ij)=nini−1σ2Ee^ije^i′j′={0,−niσ2,i=i′i=i′,j=j′
从上面结论中可以看到,同一水平下残差方差相等但不独立,不同水平下残差方差不等但相互独立。于是做如下线性变换:
Zil=l+1l(l1j=1∑le^ij−e^i,j+1)=l+1l(l1j=1∑lyij−yi,j+1)l=1,⋯,ni−1;i=1,⋯,a
此时我们把N=∑i=1ani个残差变为了N−a个Zil,且满足EZil=0,Var(Zil)=σ2,Cov(Zil,Zi′l′)=0,其中i=i′,l=l′。只需要把Zil看作从N(0,σ2)总体中抽出的一组独立样本,使用通常检验残差正态分布的方法做检验即可。
4.2 方差齐性诊断
F检验对方差齐性很敏感,因此必须要做方差齐性检验。对于单因素方差分析,yij=μ+αi+eij,其中i=1,⋯,a,j=1,⋯,ni,eij∼N(0,σi2)且相互独立,那么方差齐性检验的原假设是σ12=⋯=σa2。下面介绍四种方法:
- Levene检验
- Hartley检验
- Cochran C检验
- Bartlett检验
Levene检验。该检验只能用于平衡数据,即n1=⋯=na=n。令lij=e^ij2,e^ij=yij−yi⋅,那么在原假设成立的情况下有:
L=a−1a(n−1)∑i=1a∑j=1n(lij−li⋅)2∑i=1a∑j=1n(li⋅−l⋅⋅)2∼Fa−1,a(n−1)
Hartley检验(最大F比检验)。令SSEi=∑j=1ni(yij−yi⋅)2,由于在正态分布下有SSEi∼σ2χni−12,因此令MSEi=SSEi/(ni−1),那么在原假设成立的情况下有:
Fmax=min1≤i≤aMSEimax1≤i≤aMSEi∼Fa,n−1
Cochran C检验。该检验只能用于平衡数据,即n1=⋯=na=n。与Hartley检验类似,在原假设成立下:
G=∑i=1aMSEimax1≤i≤aMSEi∼Ga,n−1
查询临界值表即可。
Bartlett检验。需要进行如下的定义:
MSEMSEiCB=N−a1i=1∑aj=1∑ni(yij−yi⋅)2=j=1∑ni(yij−yi⋅)2/(ni−1)=1+3(a−1)1(i=1∑ani−11−N−a1)=C1[(N−a)lnMSE−i=1∑a(ni−1)lnMSEi]
Bartlett证明,在大样本下(一般ni≥5),B∼χa−12。
当然,针对样本小于5的情况,Box提出了修正的Bartlett检验。此时定义:
Bf1f2A=f1(A−BC)f2BC=a−1=(C−1)2a+1=2−C+2/f2f2BC同上
Box证明了B∼Ff1,f2。如果f2不是整数,可以通过F分布的分位数表进行内插法得到结果。
本讲的内容到这里就结束了,但是要注意,方差分析远远不止这些,本讲只能算是引入。如果要使用更高级的方差分析,还需要后续知识的补充。