1 概要
方差分析(Analysis of variance, ANOVA) 主要研究分类变量作为自变量时,对因变量的影响是否是显著的。
方差分析的方法是由20世纪的统计学家Ronald Aylmer Fisher在1918年到1925年之间提出并陆续完善起来的,该方法刚开始是用于解决田间实验的数据分析问题,因此,方差分析的学习是和实验设计、实验数据的分析密不可分的。
方差分析(ANOVA)是数理统计中很常用的内容, 那么到底是干什么用的呢? 在科学试验和生产实践中, 影响某一事物的因素往往很多, 比如化工生产中, 像原料成分, 剂量, 反应温度, 压力等等很多因素都会影响产品的质量, 有些因素影响较大, 有些影响较小, 为了使生产过程稳定, 保证优质高产, 就有必要找出对产品质量有显著影响的因素。 怎么找呢? 就需要试验, 方差分析就是根据试验的结果进行分析, 鉴别各个有关因素对试验结果影响程度的有效方法。而根据涉及到的因素个数的不同, 又可以把方差分析分为单因素方差分析、多因素方差分析等。
下面我们先重点研究单因素方差分析, 通过一个例子,引出方差分析中的几个概念:
某保险公司想了解一下某险种在不同的地区是否有不同的索赔额。 于是他们就搜集了四个不同地区一年的索赔额情况的记录如下表:
尝试判断一下, 地区这个因素是否对与索赔额产生了显著的影响?
这个问题就是单因素方差分析的问题, 具体解决方法后面会说, 首先先由这个例子弄清楚几个概念:
- 试验指标: 方差分析中, 把考察的试验结果称为试验指标, 上面例子里面的“索赔额”。
- 因素: 对试验指标产生影响的原因称为因素, 如上面的“地区”
- 水平: 因素中各个不同状态, 比如上面我们有A1, A2, A3, A4四个状态, 四个水平。
这个类比的话, 就类似于y就是试验指标, 某个类别特征x
就是因素, 类别特征x的不同取值就是水平。那么通过方差分析, 就可以得到某个类别特征对于y的一个影响程度了吧, 这会帮助分析某个类别特征的重要性哟!
那么如何进行单因素方差分析呢?
2. 单因素方差分析原理及python实现
在解决上面的问题之前, 我们得看看单因素方差分析的原理, 也就是把上面的例子概括为一般性的问题, 分析一下解法。
所谓单因素方差分析, 就是仅考虑有一个因素A对试验指标的影响。 假如因素A有r个水平, 分别在第i个水平下进行多次独立的观测, 所得到的试验指标数据如下:
A
1
:
N
(
μ
1
,
σ
2
)
X
11
X
12
⋯
X
1
n
A
2
:
N
(
μ
2
,
σ
2
)
X
21
X
22
⋯
X
2
n
2
⋮
⋮
⋯
⋮
A
r
:
N
(
μ
r
,
σ
2
)
X
r
1
X
r
2
⋯
X
m
r
\begin{array}{ccccc} A_{1}: N\left(\mu_{1}, \sigma^{2}\right) & X_{11} & X_{12} & \cdots & X_{1 n} \\ A_{2}: N\left(\mu_{2}, \sigma^{2}\right) & X_{21} & X_{22} & \cdots & X_{2 n_{2}} \\ \vdots & \vdots & \cdots & \vdots \\ A_{r}: N\left(\mu_{r}, \sigma^{2}\right) & X_{r 1} & X_{r 2} & \cdots & X_{m_{r}} \end{array}
A1:N(μ1,σ2)A2:N(μ2,σ2)⋮Ar:N(μr,σ2)X11X21⋮Xr1X12X22⋯Xr2⋯⋯⋮⋯X1nX2n2Xmr
注意这里的
n
i
n_{i}
ni不一定一样, 上面的例子。 各总体间相互独立, 因此我们会有下面的模型:
{
X
i
j
=
μ
i
+
ε
i
j
ε
i
j
∼
N
(
0
,
σ
2
)
,
各
ε
i
j
独立
j
=
1
,
2
,
⋯
,
n
i
,
i
=
1
,
2
,
⋯
,
r
\left\{\begin{array}{c} X_{i j}=\mu_{i}+\varepsilon_{i j} \\ \varepsilon_{i j} \sim N\left(0, \sigma^{2}\right), \text { 各 } \varepsilon_{i j} \text { 独立 } \\ j=1,2, \cdots, n_{i}, \quad i=1,2, \cdots, r \end{array}\right.
⎩⎨⎧Xij=μi+εijεij∼N(0,σ2), 各 εij 独立 j=1,2,⋯,ni,i=1,2,⋯,r
简单解释一下上面这个在说啥: X i j X_{ij} Xij 就是第i个水平的第j个观测值, 上面例子里面就是第i个地区第j次的索赔额。 u i u_{i} ui 表示第iii个水平的理论均值, 后面的 ε i \varepsilon_{i } εi表示的随机误差, 假设这个服从正态。第一个等式的意思就是某个观测值可以用某水平下的均值加一个误差来表示。
如果我们想判断某个因素A对于试验指标是否有显著影响, 很直观的就是我们看看因素A不同的水平下试验指标的理论均值是否有显著差异, 即理论均值是否完全相同, 如果有显著差异, 就说明不同的水平对试验指标影响很大, 即A对试验指标有显著影响。这也是方差分析的目标, 故把问题转换成了比较不同水平下试验指标的均值差异。 显著在这里的意思是差异达到的某种程度。
基于上面的分析, 我们就可以把方差分析也看成一个检验假设的问题, 并有了原假设和备择假设:
H
0
:
μ
1
=
μ
2
=
…
=
μ
r
H
1
:
μ
1
,
μ
2
,
…
μ
r
不全相等
\begin{array}{l} H_{0}: \mu_{1}=\mu_{2}=\ldots=\mu_{r} \\ H_{1}: \mu_{1}, \mu_{2}, \ldots \mu_{r} \text { 不全相等 } \end{array}
H0:μ1=μ2=…=μrH1:μ1,μ2,…μr 不全相等
那么这个假设检验的问题怎么验证呢? 我们得先分析一下, 为舍各个
X
i
j
X_{i j}
Xij 会有差异? 从上面的模型 中,我们可以看到
X
i
j
=
μ
i
+
ϵ
i
j
,
X_{i j}=\mu_{i}+\epsilon_{i j},
Xij=μi+ϵij, 所以第一个可能就是
μ
i
\mu_{i}
μi 可能有差异, 比如
μ
1
>
μ
2
,
\mu_{1}>\mu_{2},
μ1>μ2, 那么
X
1
j
X_{1 j}
X1j 很容易就大于
X
2
j
X_{2 j}
X2j 。 另一个可能就是随机误差的存在。在这样的启发下, 我们得找一个衡量全部
X
i
j
X_{i j}
Xij 之间差异的量,就是下面这个了:
S
T
=
∑
i
=
1
r
∑
j
=
1
n
i
(
X
i
j
−
X
ˉ
)
2
S_{T}=\sum_{i=1}^{r} \sum_{j=1}^{n_{i}}\left(X_{i j}-\bar{X}\right)^{2}
ST=i=1∑rj=1∑ni(Xij−Xˉ)2
这个叫做总偏差平方和,如果这个越大, 就表示 X i j X_{i j} Xij 之间的差异就越大。这里的 X ˉ = \bar{X}= Xˉ= ∑ i = 1 r ∑ j = 1 n i X i j / n , n = n 1 + n 2 , … + n 2 \sum_{i=1}^{r} \sum_{j=1}^{n_{i}} X_{i j} / n, \quad n=n_{1}+n_{2}, \ldots+n_{2} ∑i=1r∑j=1niXij/n,n=n1+n2,…+n2 表示总的观测值个数。
接下来, 我们把这个平方和分解开为两部分:一部分是由于因素A引起的差异,这个叫做效应平方和 S A , S_{A}, \quad SA, 另一部分是由于随机误差引起的差异, \quad 这个叫做误差平方和 S E S_{E} SE
关于
S
E
,
S_{E}, \quad
SE, 先固定一个
i
,
i,
i, 此时对应的所有观测值
X
i
1
,
X
i
2
,
…
X
i
n
i
,
X_{i 1}, X_{i 2}, \ldots X_{i n_{i}},
Xi1,Xi2,…Xini, 他们之间的差异与每个水平的理 论平均值就没有关系了,而是取决于随机误差, 反应这些观察值差异程度的量
∑
j
=
1
n
i
(
X
i
j
−
X
ˉ
i
)
2
\sum_{j=1}^{n_{i}}\left(X_{i j}-\bar{X}_{i}\right)^{2}
∑j=1ni(Xij−Xˉi)2 其中
X
ˉ
i
=
(
X
i
1
+
X
i
2
+
⋯
+
X
i
n
)
/
n
i
,
i
=
1
,
2
,
⋯
,
r
\bar{X}_{i}=\left(X_{i 1}+X_{i 2}+\cdots+X_{i n}\right) / n_{i}, \quad i=1,2, \cdots, r
Xˉi=(Xi1+Xi2+⋯+Xin)/ni,i=1,2,⋯,r 综合所有的水平,
\quad
就可以得到误
差平方和的公式如下:
S E = ∑ i = 1 r ∑ j = 1 n i ( X i j − X ˉ i ) 2 S_{E}=\sum_{i=1}^{r} \sum_{j=1}^{n_{i}}\left(X_{i j}-\bar{X}_{i}\right)^{2} SE=i=1∑rj=1∑ni(Xij−Xˉi)2
而上面两者相减, 就会得到效应平方和 S A S_{A} SA