方差分析是英国统计学家R.A.Fisher在20世纪20年代提出的一种统计方法,它有着非常广泛的应用。在生产实践和科学研究中,经验要研究生产条件或实验条件的改变对产品的质量或产量的影响。如在农业生产中,需要考虑品种、施肥量、种植密度等因素对农作物收获量的影响;又如某产品在不同的地区、不同的时期、,采用不同的销售方式,其销售量是否有差异。在诸多影响因素中,哪些是主要的,哪些是次要的,以及主要因素处于何种状态时,才能使农作物的产量和产品的销售量达到一个较高的水平,这就是方差分析索要解决的问题。

方差分析按影响分析指标的因素(也可简单成为 自变量)个数的多少,分为单因素方差分析、双因素方差分析、三因素方差分析。。。

方差分析按分析指标(也可简单称为 因变量)的个数多少,分为一元方差分析(即ANOVOA)、多元方差分析(即,MANOVOA)..

多自变量多因变量的方差分析,可以简单称为多元方差分析,当然更精确的称为“X因素Y元方差分析”,如二因素二元方差分析。

1。单因素一元方差分析

(1) MATLAB统计工具箱中提供了anova1函数,用来作单因素一元方差分析,其调用格式如下:

<1>p=anova1(x)

根据样本观测值矩阵X进行单因素一元方差分析,检验矩阵X的各列所对应的总体是否具有相同的均值,原假设是X的各列所对应的总体具有相同的均值。输出参数p是检验的p值,对于给定的显著性水平,如果p<=显著性水平,则拒绝原假设,认为X的各列所对应的总体具有不完全相同的均值,否则接受原假设,认为X的各列所对应的总体具有相同的均值。

anova1函数还生成2个图形:标准的单因一元方差分析表和箱线图。其中方差分析表把数据之间的差异分为两部分:

一.由于列均值之间的差异引起的变差(即组间变差)

二.由于每列数据与该列数据均值之间的差异引起的变差(即组内变差)

标准的单因素一元方差分析表有6列:

第一列为方差来源,方差来源有组间、组内和总计3种

第二列为各方差来源所对应的平方和(ss)

第三列为各方差来源所对应的自由度(df)

第四列为各方差来源所对应的均方(MS),MS=ss/df

第五列为F检验统计量的观测值,它是组间均方与组内均方的比值

第六列为检验的p值,是根据F检验统计量的分布提出的。

在箱线图中,X的每一列对应一个箱线图,从各个箱子中线之间的差异可以看出F检验统计量和检验的p值,较大的差异异味着较大的F值和较小的p值。

<2> p=anova1(X,group)

当X是一个矩阵时,anoval函数会把X的每一列作为一个独立的组,检验各组所对应总体是否具有相同的均值。输出参数group可以是字符串数组或字符串元胞数组,用来指定每组的组名,X的每一列对应一个组名称字符串,在箱线图中,组名字符串被作为箱线图的标签。

<3>p=anova1(X,group,displayopt)

通过displayopt参数指定是否显示方差分析表和箱线图,当displayopt参数设定为‘on‘(默认情况)时,显示方差分析表和箱线图;当displayopt参数设定为‘off’时,不显示方差分析表和箱线图。

<4>[p,table]=anova1(.....)

还返回元胞数组形式的方差分析表table(包含列标签和行标签)

<5>[p,table,stats]=anova1(....)

还返回一个结构体变量stats,用于进行后续的多重分析。anova1函数用来检验个总体是否具有相同的均值,当拒绝了原假设,认为各总体的均值不完全相同时,通常还需要进行两两的比较检验,以确定哪些总体均值间的差异是显著的,这就是所谓的多重比较。

当anova1函数给出的结果拒绝了原假设,则在后续的分析中,可以调用multcompare函数,把stats作为它的输入,进行多重比较。

样本X满足方向分析的几个基本假定:

所有样本均来自正态总体;

这些正态总体具有相同的方差。

所以在方差分析之前要做正态性检验和方差齐次性检验。

例:现有一学校的6个学院69个班级共2077名学生的数学成绩表格,现要分析不同学院的学生的成绩是否有显著性差别。

第一步:正态性检验

在调用anoval函数做方差分析之前,应先检验样本数据是否满足方差分析的基本假定,即检验正态性和方差齐次性。第一步首先做正态性检验,调用lillietest函数检验6个学院的学生的考试成绩是否服从正态分布,原假设是6个学院的学生的考试成绩服从正态分布,备择假设是不服从正态分布。

%读取文件数学成绩.xls中第一工作表中的数据

[x,y]=xlsread('数学成绩.xls');

%提取矩阵x中的第2列数据,即成绩数据

score=x(:,2);

%读取元胞数组y的第4列的第2行至最后一行数据,即2077名同学所在学院名称数据

college=y(2:end,4);

%读取矩阵x的第一列数据,即2077名学生所在学院的编号数据

college_id=x(:,1);

%调用lillietest函数分布对6个学院的成绩进行正态性检验

for i=1:6

scorei=score(college_id==i); %提取第i个学院的成绩数据

[h,p]=lillietest(scorei); %正态性检验

result(i,:)=p; %把检验的p值赋给result变量

end

%检测正态检验的p值

result

result =

0.0734

0.1783

0.1588

0.1494

0.4541

0.0727

对6个学院的学生的考试成绩进行的正态检验的p值均大于0.05,说明在显著性水平0.05下均接受原假设,认为6个学院的学院的考试成绩服从正态分布。

第二步:方差齐次性检验

下面调用vartestn函数检验6个学院的学生的考试成绩是否服从方差相同的正态分布,原假设是6个学院的学生的成绩服从方差相同的正态分布,备择假设是服从方差不同的正态分布。

%读取文件数学成绩.xls中第一工作表中的数据

[x,y]=xlsread('数学成绩.xls');

%提取矩阵x中的第2列数据,即成绩数据

score=x(:,2);

%读取元胞数组y的第4列的第2行至最后一行数据,即2077名同学所在学院名称数据

college=y(2:end,4);

%调用vartestn函数进行方差齐次性检验

[p,stats]=vartestn(score,college)

p =

0.7138

stats =

chisqstat: 2.9104

df: 5

检验的p值=0.7138>0.05,说明在显著性水平0.05下接受原假设,认为6个学院的学生的考试成绩服从方差相同的正态分布,满足方差分析的基本假定。

第三步:方差分析

经过正态性检验和方差齐次性检验之后,认为6个学院学生的成绩服从方差相同的正态分布,下面调用anoval函数进行单因素一元方差分析,检验不同学院的学生的考试成绩有无显著差别,原假设是没有显著差别,备择假设是有显著差别。

%读取文件数学成绩.xls中第一工作表中的数据

[x,y]=xlsread('数学成绩.xls');

%提取矩阵x中的第2列数据,即成绩数据

score=x(:,2);

%读取元胞数组y的第4列的第2行至最后一行数据,即2077名同学所在学院名称数据

college=y(2:end,4);

%单因素一元方差分析

[p,table,stats]=anova1(score,college)

p =

5.6876e-74

table =

'Source' 'SS' 'df' 'MS' 'F' 'Prob>F'

'Groups' [2.9192e+04] [ 5] [5.8384e+03] [76.7405] [5.6876e-74]

'Error' [1.5756e+05] [2071] [ 76.0796] [] []

'Total' [1.8675e+05] [2076] [] [] []

stats =

gnames: {6x1 cell}

n: [510 404 349 206 303 305]

source: 'anova1'

means: [72.5608 74.4703 79.8968 73.1068 69.4323 67.9508]

df: 2071

s: 8.7224

anova1函数返回的p值<0.05,故拒绝原假设,认为不同学院的学生的考试成绩有非常显著的差别,同时还返回的table是一个标准的单因素一元方差分析表,它的各列依次是方差来源,平方和、自由度、均方、、F值和p值。还生成了箱线图。

虽然不同学院的学生的成绩有非常显著的差别,但这并不意味着任意两个学院学生的成绩都有显著性差别,因此还需要进行两两的比较检验,即多重比较,找出考试成绩存在显著性差别的学院。

第五步:多重比较

方差分析的结果已经表明不同学院的学生的考试成绩有非常显著的差别,但这并不意味着任意两个学院学生的成绩都有显著性差别,因此还需要进行两两的比较检验,即多重比较,找出考试成绩存在显著性差别的学院。

MATLAB统计工具箱中提供了multcompare函数,用来做多重检验,其调用格式如下:

<1>c=multcompare(stats)

根据结构体变量stats中的信息进行多重比较,返回两两比较的结果矩阵c。c是一个多行5列的矩阵,它的每一行对应一次两两比较的检验,每一行上的元素包括包括作比较的两个组的组标好,两个组的均值差、均值差的置信区间。比如

2.0000 5.0000 1.9442 8.0625 14.4971

表示第2组合第5组进行两两比较,两组的均值差(第2组减去第5组的均值)为8.0625,均值差的95%的置信区间为[1.9442,14.4971],这个区间不包括0,说明在显著性水平0.05下,两组间均值的差异是显著的。

multcompare函数还生成一个交互式图形,可以通过鼠标单击的方式进行两两比较检验。该交互式图形上用一个符号(圆圈)标出了每一组的组均值,用一条之间段标出了每个组的组均值的置信区间。如果某两条线段不相交,即没有重叠的部分,则说明这两个组的组均值之间的差异是显著的。如果某两条直线段有重叠部分,则说明这两个组的组均值之间的差异是不显著的。可以用鼠标在图上任意选一个组,选中的组以及与选中的组禅意显著的其他组均用高亮显示,选中的组用蓝色显示,与选中的组差异显著的其他组用红色显示。

<2>c=multcompare(stats,param1,val1,param2,val2,.......)

指定一个或多个成对出现的参数名与参数值来控制多重比较,可用的参数值和参数名如下表:

参数名参数值说明
‘alpha’(0,1)内的标量用来指定输出矩阵c中的置信区间和交互式图形上的置信水平,默认值0.05
‘display’‘on’‘off’用来指定是否显示交互式图形,若为‘on’(默认情况),则显示图形;若为‘off’则不显示图形
‘ctype’‘hsd’或‘tukeyk-kramer’;‘lsd’;’bonferroni’;‘dumn-sidak’;’scheffe’指定多重比较的方法。可用的方法有Tukey-Kramer法(默认情况)、最小显著差法(LSD法)、Bonferron t检验法、Dunn-Sidak法和Scheffe法
‘dimension’正整数向量对于多因素方差分析的比较检验,用来指定要比较的因素(分组变量)的序号,默认值为1,表示第1个分组变量。仅适用于stats是anovan函数的输出的情形
‘estimate’依赖于生成结构体变量stats所用的函数指定要比较的估计,其可能取值依赖于生成的结构体变量stats所用的函数。对于anova1,anovan(多因素方差分析)、friedman(Frideman秩方差分析)和kruskalwallis(Kruskal-Wallis单因素方差分析)函数,才参数被忽略;对于anova2(双因素方差分析)函数.’estimate’参数的可能取值为‘column’(默认)或‘row’,表示对列均值或行均值进行比较;对于aoctool(交互式协方差分析)函数,‘estimate’参数的可能取值为‘slope’,‘intercept’或‘pmm’,分别表示对斜率、截距或总体边缘均值进行比较。

<3>[c,m]=multcompare(......)

返回一个多行2列的矩阵m,第1列为每一组均值的估计值,第2列为相应的标准误差。

<4>[c,m,b]=multcompare(.....)

返回交互式多重比较的图形的句柄值h,可通过h修改图形属性,如图形标题和X轴标签等。

<5>[c,m,b,gnames]=multcompare(......)

返回组名变量gnames,它是一个元胞数组,每一行对应一个组名。

%读取文件数学成绩.xls中第一工作表中的数据

[x,y]=xlsread('数学成绩.xls');

%提取矩阵x中的第2列数据,即成绩数据

score=x(:,2);

%读取元胞数组y的第4列的第2行至最后一行数据,即2077名同学所在学院名称数据

college=y(2:end,4);

%单因素一元方差分析

[p,table,stats]=anova1(score,college)

%调用multcompare函数多重比较

[c,m,h,gnames]=multcompare(stats);

%设置表头,以元胞数组形式显示矩阵c

head={'组序号','组序号','置信下限','置信上限','组均值差','置信上限'};

[head;num2cell(c)] %将矩阵c转为元胞数组,并与head一起显示

[gnames num2cell(m)] %将m转为元胞数组,和gnames一起显示

ans =

'组序号' '组序号' '置信下限' '置信上限' '组均值差' '置信上限'

[ 1] [ 2] [-3.5650] [-1.9095] [-0.2540] [ 0.0130]

[ 1] [ 3] [-9.0628] [-7.3361] [-5.6093] [2.0676e-08]

[ 1] [ 4] [-2.5980] [-0.5460] [ 1.5060] [ 0.9743]

[ 1] [ 5] [ 1.3255] [ 3.1284] [ 4.9313] [1.1298e-05]

[ 1] [ 6] [ 2.8108] [ 4.6100] [ 6.4092] [2.0679e-08]

[ 2] [ 3] [-7.2430] [-5.4266] [-3.6101] [2.0676e-08]

[ 2] [ 4] [-0.7645] [ 1.3635] [ 3.4915] [ 0.4489]

[ 2] [ 5] [ 3.1490] [ 5.0380] [ 6.9270] [2.0676e-08]

[ 2] [ 6] [ 4.6340] [ 6.5195] [ 8.4049] [2.0676e-08]

[ 3] [ 4] [ 4.6061] [ 6.7901] [ 8.9740] [2.0676e-08]

[ 3] [ 5] [ 8.5128] [10.4645] [12.4163] [2.0676e-08]

[ 3] [ 6] [ 9.9977] [11.9460] [13.8943] [2.0676e-08]

[ 4] [ 5] [ 1.4299] [ 3.6745] [ 5.9190] [4.5367e-05]

[ 4] [ 6] [ 2.9144] [ 5.1560] [ 7.3976] [2.1451e-08]

[ 5] [ 6] [-0.5346] [ 1.4815] [ 3.4976] [ 0.2902]

ans =

'机械' [72.5608] [0.3862]

'电信' [74.4703] [0.4340]

'化工' [79.8968] [0.4669]

'环境' [73.1068] [0.6077]

'经管' [69.4323] [0.5011]

'计算机' [67.9508] [0.4994]

1.《matlab如何操作table、matlab如何操作word?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《matlab如何操作table、matlab如何操作word?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3301100.html