方差分析
第一节 单因素一元方差分析的MATLAB实现
1. anova1函数
功能:单因素一元方差分析
p = anova1(X)
p = anova1(X,group)
p = anova1(X,group,displayopt)
[p,table] = anova1(…)
[p,table,stats] = anova1(…)
2. multcompare函数
功能:多重比较检验
c = multcompare(stats)
c = multcompare(stats,param1,val1,param2,val2,…)
[c,m] = multcompare(…)
[c,m,h] = multcompare(…)
[c,m,h,gnames] = multcompare(…)
【例11.1-1】 分析饮料的颜色对销售量是否产生影响。
>> x = [26.5 31.2 27.9 30.8
28.7 28.3 25.1 29.6
25.1 30.8 28.5 32.4
29.1 27.9 24.2 31.7
27.2 29.6 26.5 32.8];
>> [p,table] = anova1(x)
p =
4.6614e-004
这里取显著性水平为0.05,由于F值> F 临界值,故拒绝H0,即认为饮料的颜色对销售量有显著影响。
正态性检验
在调用anova1函数作方差分析之前,应先检验数据是否满足方差分析的基本假定,即检验正态性和方差齐性。
>> [x,y]=xlsread('examp11_01.xls');
>> score = x(:,2);
>> college = y(2:end,4);
>> 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.0650
0.1638
0.1433
0.1372
NaN
0.0660
方差齐性检验
下面调用vartestn函数检验6个学院的学生的考试成绩是否服从方差相同的正态分布。
% 调用vartestn函数进行方差齐性检验
>> [p,stats] = vartestn(score,college)
p =
0.7138
stats =
chisqstat: 2.9104
df: 5
方差分析
经过正态性和方差齐性检验之后,认为6个学院学生的考试成绩服从方差相同的正态分布,下面就可以调用anova1函数进行单因素一元方差分析,检验不同学院的学生的考试成绩有无显著差别。
>> [p,table,stats] = anova1(score,college) % 单因素一元方差分析
多重比较检验
方差分析的结果已表明不同学院的学生的考试成绩有非常显著的差别,但这并不意味着任意两个学院学生的考试成绩都有显著的差别,因此还需要进行两两的比较检验,即多重比较,找出考试成绩存在显著差别的学院。
>> [c,m,h,gnames] = multcompare(stats); % 多重比较
% 设置表头,以元胞数组形式显示矩阵c
>> head = {'组序号','组序号','置信下限','组均值差','置信上限'};
>> [head; num2cell(c)] % 将矩阵c转为元胞数组,并与head一起显示
双因素一元方差分析的MATLAB实现
anova2函数
功能:双因素一元方差分析
调用方式:
p = anova2(X,reps)
p = anova2(X,reps,displayopt)
[p,table] = anova2(…)
[p,table,stats] = anova2(…)