matlab 双因素方差分析(MATLAB单因素一元方差分析)
用matlab求一元二次方程的根MATLAB单因素单变量方差分析
方差分析是20世纪20年代由英国统计学家R.A.Fisher提出的一种统计 ,应用范围非常广泛。在生产实践和科学研究中,经验要研究生产条件或实验条件的变化对产品质量或产量的影响。比如在农业生产中,要考虑品种、施肥、种植密度对作物产量的影响;再比如一个产品在不同地区、不期、不同销售方式下的销量是否存在差异。在众多影响因素中,哪些是主要的,哪些是次要的,主要因素处于什么状态,农作物的产量和产品的销量能否达到一个较高的水平,这就是方差分析要解决的问题。
方差分析根据影响分析指标的因素(也可以是单纯的自变量)的多少,分为单因素方差分析、双因素方差分析和三因素方差分析。
方差分析根据分析指标(也简称因变量)的数量可分为单变量方差分析(ANOVOA)和多变量方差分析(MANOVOA)。
多个自变量和多个因变量的方差分析可以简称为多元方差分析,更准确的称呼是 x因素Y元素方差分析及应用。,如双因素二元方差分析。
1。单向单变量方差分析
(MATLAB的统计工具箱中提供了anova1函数,用于单向anova,其调用格式如下
1p=anova1(x)
根据样本观测矩阵X,进行单因素方差分析,检验矩阵X的每一列对应的总体是否具有相同的均值。最初的假设是矩阵X的每一列对应的总体具有相同的均值。输出参数p是测试的p值。对于给定的显著性水平,如果p=显著性水平,原假设被拒绝,X的每一列对应的总体被认为具有不完全相同的均值;否则接受原假设,认为X的每一列对应的总体具有相同的均值。
anova1函数还生成两个图表一个标准的单向anova表和一个箱线图。差异分析表将数据之间的差异分为两部分
1.由于列平均值之间的差异而产生的变化(即各组之间的变化)
2.每列数据与该列数据平均值之间的差异导致的差异(即组内差异)
标准的单变量方差分析表有六列
之一列是差异来源,有三个差异来源组间、组内和总数。
第二列是对应于方差来源的平方和(ss)。
第三列是对应于方差来源的自由度(df)。
第四列是每个方差源对应的均方(MS),MS=ss/df。
第五列是f检验统计量的观测值,即组间均方与组内均方的比值。
第六列是检验的p值,根据f检验统计量的分布提出。
在箱线图中,X的每一列对应一个箱线图。从每个方框中心线的差值可以看出f检验统计量和检验的P值,差值越大意味着F值越大,P值越小。
2 p=anova1(X,组)
当X为矩阵时,anoval函数将X的每一列作为一个独立的组,检验每一组对应的总体是否具有相同的均值。输出参数组可以是字符串数组,也可以是字符串单元格数组,用来指定每个组的组名。X的每一列对应于一个组名字符串。在盒形图中,组名字符串用作盒形图的标签。
3p=anova1(X,group,displayopt)
通过displayopt参数指定是否显示方差分析表和箱线图。当displayopt参数设置为 在 (默认),将显示方差分析表和箱线图。当displayopt参数设置为 关闭 不显示方差分析表和箱线图。
4[p,table]=anova1(.)
还以单元格数组的形式返回ANOVA表(包括列标签和行
它还为后续的多重分析返回一个结构变量stats。anova1函数用于检验两个总体是否具有相同的平均值。当原假设被拒绝,且各群体均值不完全相,通常需要进行两两比较检验,以确定哪些群体均值存在显著差异,这种比较称为多重比较。
当anova1函数给出的结果拒绝原始假设时,在后续分析中,可以调用multcompare函数,并且可以将统计数据用作其多重比较的输入。
样本x满足方向分析的几个基本假设;
所有样本均来自正常人群;
这些正态总体具有相同的方差。
,方差分析前应进行正态性检验和方差齐性检验。
例目前某校6个学院69个班2077人。现在需要分析不同学院的学生成绩是否有显著差异。
之一步常态测试
在调用anoval函数做ANOVA之前,要检查样本数据是否满足ANOVA的基本假设,即检验正态性和方差齐性。之一步,做一个正态检验,调用lillietest函数,检验六个学院学生的考试成绩是否服从正态分布。原假设是六个学院学生的考试成绩服从正态分布,替代假设是不服从正态分布。
%读取文件math score中之一个工作表的数据。xls。
[x,y]=xls read( ;数学成绩。xls )
%提取矩阵X中的第二列数据,即性能数据。
得分=x(:2);
%将单元格数组Y的第2行第4列读到。
一行数据,即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.7138gt0.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' 'ProbgtF'
'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值lt0.05,故拒绝原假设,认为不同学院的学生的考试成绩有非常显著的差别,还返回的table是一个标准的单因素一元方差分析表,它的各列依次是方差来源,平方和、自由度、均方、、F值和p值。还生成了箱线图。
虽然不同学院的学生的成绩有非常显著的差别,但这并不意味着任意两个学院学生的成绩都有显著性差别,还需要进行两两的比较检验,即多重比较,找出考试成绩存在显著性差别的学院。
第五步多重比较
方差分析的结果已经表明不同学院的学生的考试成绩有非常显著的差别,但这并不意味着任意两个学院学生的成绩都有显著性差别,还需要进行两两的比较检验,即多重比较,找出考试成绩存在显著性差别的学院。
MATLAB统计工具箱中提供了multcompare函数,用来做多重检验,其调用格式如下
lt1gtc=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函数还生成一个交互式图形,可以通过鼠标单击的方式进行两两比较检验。该交互式图形上用一个符号(圆圈)标出了每一组的组均值,用一条之间段标出了每个组的组均值的置信区间。如果某两条线段不相交,即没有重叠的部分,则说明这两个组的组均值之间的差异是显著的。如果某两条直线段有重叠部分,则说明这两个组的组均值之间的差异是不显著的。可以用鼠标在图上任意选一个组,选中的组以及与选中的组禅意显著的其他组均用高亮显示,选中的组用蓝色显示,与选中的组差异显著的其他组用红色显示。
lt2gtc=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’,分别表示对斜率、截距或总体边缘均值进行比较。lt3gt[c,m]=multcompare(......)
返回一个多行2列的矩阵m,第1列为每一组均值的估计值,第2列为相应的标准误差。
lt4gt[c,m,b]=multcompare(.....)
返回交互式多重比较的图形的句柄值h,可通过h修改图形属性,如图形标题和X轴标签等。
lt5gt[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={'组序号','组序号','置信下限','置信上限','组均值差','置信上限'}
[headnum2cell(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]
单因素一元方差分析的matlab实现 matlab进行单因素方差分析