【数学建模算法】(31)方差分析(上)
我们已经作过两个总体均值的假设检验,如两台机床生产的零件尺寸是否相等,病人和正常人的某个生理指标是否一样。如果把这类问题推广一下,要检验两个以上总体的均值彼此是否相等,仍然用以前介绍的方法是很难做到的。而你在实际生产和生活中可以举出许多这样的问题:从用几种不同工艺制成的灯泡中,各抽取了若干个测量其寿命,要推断这几种工艺制成的灯泡寿命是否有显著差异;用几种化肥和几个小麦品种在若干块试验田里种植小麦,要推断不同的化肥和品种对产量有无显著影响。
可以看到,为了使生产过程稳定,达到优质、高产,需要对影响产品质量的因素进行分析,找出有显著影响的那些因素,除了从机理方面进行研究外,常常要作许多试验,对结果作分析、比较,寻求规律。用数理统计分析试验结果、鉴别各因素对结果影响程度的方法称为方差分析(Analysis Of Variance),记作 ANOVA。
人们关心的试验结果称为指标,试验中需要考察、可以控制的条件称为因素或因子,因素所处的状态称为水平。上面提到的灯泡寿命问题是单因素试验,小麦产量问题是双因素试验。处理这些试验结果的统计方法就称为单因素方差分析和双因素方差分析。
1.单因素方差分析
只考虑一个因素对所关心的指标的影响,取几个水平,在每个水平上作若干个试验,试验过程中除外其它影响指标的因素都保持不变(只有随机因素存在),我们的任务是从试验结果推断,因素对指标有无显著影响,即当取不同水平时指标有无显著差别。
取某个水平下的指标视为随机变量,判断取不同水平时指标有无显著差别,相当于检验若干总体的均值是否相等。
1.1.数学模型
设取个水平,在水平下总体服从正态分布,这里未知,可以互不相同,但假定有相同的方差。又设在每个水平下作了次独立试验,即从中抽取容量为的样本,记作服从且相互独立。将这些数据列成表单因素试验数据表)的形式。
单因素试验数据表
... | ||||
---|---|---|---|---|
... | ||||
... | ... | ... | ... | ... |
... |
将第行称为第组数据。判断的个水平对指标有无显著影响,相当于要作以下的假设检验:
不全相等。
由于的取值既受不同水平的影响,又受固定下随机因素的影响,所以将它分解为:
其中,且相互独立。
记:
是总均值, 是水平对指标的效应。由(1)、(2)模型可表为:
原假设为(以后略去备选假设):
1.2.统计分析
记:
是第组数据的组平均值,是总平均值。考察全体数据对的偏差平方和:
经分解可得:
记:
则:
是各组均值对总方差的偏差平方和,称为组间平方和;是各组内的数据对均值偏差平方和的总和。反映 不同水平间的差异,则表示在同一水平下随机误差的
大小。
注意到是总体的样本方差的倍,于是有:
由分布的可加性知:
即:
且有:
对作进一步分析可得:
若成立,则:
可知若成立,只反映随机波动,而若不成立,那它就还反映了的不同水平的效应 。单从数值上看,当成立时,由(10)、(12)对于一次试验应有:
而当不成立时这个比值将远大于 1。当成立时,该比值服从自由度,的分布,即:
为检验,给定显著性水平,记分布的分位数为,检验规则为:
时接受,否则拒绝。
以上对的分析相当于对组间、组内等方差的分析,所以这种假设检验方法称方差分析。
1.3.方差分析表
将试验数据按上述分析、计算的结果排成表 2 的形式,称为单因素方差分析表(Matlab 中给出的方差分析表)。
单因素方差分析表
方差来源 | 平方和 | 自由度 | 均方 | 分位数 | 概率 |
---|---|---|---|---|---|
因素 | |||||
误差 | |||||
总和 |
最后一列给出大于值的概率相当于。
方差分析一般用的显著性水平是:取,拒绝,称因素的影响(或各水平的差异)非常显著;取,不拒绝,但取,拒绝,称因素的影响显著;取,不拒绝,称因素 无显著影响。
1.4.Matlab实现
Matlab 统计工具箱中单因素方差分析的命令是 anoval。
若各组数据个数相等,称为均衡数据。若各组数据个数不等,称非均衡数据。
1.4.1.均衡数据
处理均衡数据的用法为:
p=anoval(x)
返回值是一个概率,当时接受,为的数据矩阵, 的每一列是一个水平的数据(这里各个水平上的样本容量)。另外,还输出一个方差表和一个
Box 图。
例1 为考察 5 名工人的劳动生产率是否相同,记录了每人 4 天的产量,并算出其平均值,如下表 。你能从这些数据推断出他们的生产率有无显著差别吗?
1 | 256 | 254 | 250 | 248 | 236 |
2 | 242 | 330 | 277 | 280 | 252 |
3 | 280 | 290 | 230 | 305 | 220 |
4 | 298 | 295 | 302 | 289 | 252 |
平均产量 | 269 | 292.25 | 264.75 | 280.5 | 240 |
编写程序如下:
clear,clc
x=[256 254 250 248 236
242 330 277 280 252
280 290 230 305 220
298 295 302 289 252];
p=anova1(x)
Matlab会生成方差分析表:
方差分析表
求得,故接受,即 5 名工人的生产率没有显著差异。方差表对应于上面的单因素方差分析表的 1 ~ 4列,是分布的分位数,可以验证:
fcdf(2.262,4,15)=0.8891=1-p
同时程序会生成箱式图。
注:接受,是将 5 名工人的生产率作为一个整体进行假设检验的结果,并不表明取其中 2 个工人的生产率作两总体的均值检验时,也一定接受均值相等的假设。实际上,读者可以用 ttest2 对本题作的检验,看看会得到什么结果。
1.4.2.非均衡数据
处理非均匀数据的用法为:
p=anova1(x,group)
x为向量,从第1组到第r组数据依次排列;group为与x同长度的向量,标志x中数据的组别(在与x第组数据对应的位置输入整数)。
例2 用4种工艺生产灯泡,从各种工艺制成的灯泡中各抽出了若干个测量其寿命,结果如下表,试推断这几种工艺制成的灯泡寿命是否有显著差异。
1 | 1620 | 1580 | 1460 | 1500 |
2 | 1670 | 1600 | 1540 | 1550 |
3 | 1700 | 1640 | 1620 | 1610 |
4 | 1750 | 1720 | 1680 | |
5 | 1800 |
解:编写如下程序
x=[1620 1580 1460 1500
1670 1600 1540 1550
1700 1640 1620 1610
1750 1720 1680 1800];
x=[x(1:4),x(16),x(5:8),x(9:11),x(12:15)];
g=[ones(1,5),2*ones(1,4),3*ones(1,3),4*ones(1,4)];
p=anova1(x,g)
求得,所以几种工艺制成的灯泡寿命有显著差异。
1.5.多重比较
在灯泡寿命问题中,为了确定哪几种工艺制成的灯泡寿命有显著差异,我们先算出各组数据的均值:
工艺 | ||||
---|---|---|---|---|
均值 | 1708 | 1635 | 1540 | 1585 |
虽然均值最大,但要判断它与其它几种有显著差异,还需做多重比较。一般多重比较要对所有个总体作两两对比,分析相互间的差异。根据问题的具体情况可以减少对比次数。
对于上述问题,Matlab多重比较的程序为:
x=[1620 1580 1460 1500
1670 1600 1540 1550
1700 1640 1620 1610
1750 1720 1680 1800];
x=[x(1:4),x(16),x(5:8),x(9:11),x(12:15)];
g=[ones(1,5),2*ones(1,4),3*ones(1,3),4*ones(1,4)];
[p,t,st]=anova1(x,g)
[c,m,h,nms] = multcompare(st);
[nms num2cell(m)]