前言

由于方差分析的原理基本在所有概率论与数理统计的书中都可以找到,那么这里就直接以图片的形式呈现了。关于方差齐次性检验以后会补充。知识基础:假设检验。(今天刚刚学了数据结构,发现自己以前写的数组的基础操作水平极低,真是惭愧)

简介

方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”,是R.A.Fisher发明的,用于两个及两个以上样本均数差别的显著性检验。 由于各种因素的影响,研究所得的数据呈现波动状。造成波动的原因可分成两类,一是不可控的随机因素,另一是研究中施加的对结果形成影响的可控因素。(百度百科)简单来说就是看看不同因素对于样本的总体均值影响。

原理

  • 单因素实验的方差分析:



(里面有一个地方写错了,应该是F分布的α分位点, 而不是(1-α)分位点。因为如果原假设不成立,那么组间的影响就会比较大,也就是SA比较大,对应F也就较大,而α对应的是落入拒绝域的概率,即P(F>threshold)=α,即threshold等于F的α分位点)

  • 双因素的方差分析





    (同样的,这里的分位点应该是α)

代码实现

  • 注意事项
    从原理中我们可以看到方差分析的假设是各因素水平对应的样本要服从同方差的正态分布,因此我们有必要做正态拟合度检验和方差齐次检验!(数据量比较大的时候采用,数据量少的时候没有必要)
%初始化数据:这里我们设置的数据是单因素5个水平下的五组标准
%正态分布的数据,以确保数据能通过检验
for i=1:5x(i,:)=randn(1,5);
end
%正态性检验(卡方检验)
for i=1:5[h,p]=lillietest(x(i,:));judge(i)=p;%这里算出来的p是χ^2对应的p分位点,因此当p>0.05时,χ^2落入%接受域,原假设成立,可以看作正态分布
end
judge
%方差齐次检验
X=reshape(x',size(x,1)*size(x,2),1);%注意形式,将x按行展开
%数据对应的因素水平序号
ind=[ones(1,5),2*ones(1,5),3*ones(1,5),4*ones(1,5),5*ones(1,5)];
[p,status]=vartestn(X,ind);%p为显著性水平,大于0.05即接受原假设:认为因素水平的影响不大
%方差齐次检验这里我不是很熟,这里简单简单应用一下,日后会补上这方面的内容

我们看一下这段代码的运行结果:

judge=0.5000    0.0741    0.2905    0.0553    0.5000

均大于0.05,满足正态分布的要求(毕竟用的就是正态分布的数据)


p=0.70032>0.05,满足方差齐次检验的要求

箱线图:从上至下分别为:最大值,上四分位数,中位数,下四分位数,最小值。红色的点是离群异常点。

  • 单因素
[p,table,status]=anova1(X,ind)
%p:为显著性水平,同样>0.05即可
%table:方差分析表
%status:后面的多重分析会用到

结果:
p =

0.3350

table =

'Source'    'SS'         'df'    'MS'        'F'         'Prob>F'
'Groups'    [ 5.4734]    [ 4]    [1.3683]    [1.2166]    [0.3350]
'Error'     [22.4947]    [20]    [1.1247]          []          []
'Total'     [27.9681]    [24]          []          []          []

info =

gnames: {5x1 cell}n: [5 5 5 5 5]
source: 'anova1'means: [0.4099 0.0779 -0.7779 -0.0130 0.5745]df: 20s: 1.0605

其中p>0.05,则接受原假设,认为因素无显著影响,反之认为因素有影响
table则对应着方差分析表(具体数字的解读参见原理)


这个箱线图含义与之前的相似,添加的部分是均值的置信区间(由中位数开始指出去的那4条斜线形成的梯形较长底边所在的位置,如第一个的置信区间就约为[-1,1.6]

[c m h gnames]=multcompare(status);
%c:比较矩阵,m:每组的均值的估计值和相应的标准差
%h:图形句柄 gnames:水平等级
head={'组序号','组序号','置信下限','组均值差','置信上限','?'};%最后一列意义不明
[ head ;num2cell(c)]%c:比较结果矩阵
[gnames num2cell(m)]%每组的均值的估计值和相应的标准差

更多关于multcompare的参数和返回值可参见大神文章:MATLAB方差分析
结果:
ans =

'组序号'    '组序号'    '置信下限'       '组均值差'       '置信上限'      '?'
[  1]    [  2]    [-1.1323]    [ 0.8093]    [2.7509]    [0.7247]
[  1]    [  3]    [-1.7358]    [ 0.2058]    [2.1474]    [0.9976]
[  1]    [  4]    [-1.5378]    [ 0.4038]    [2.3454]    [0.9697]
[  1]    [  5]    [-1.5169]    [ 0.4247]    [2.3663]    [0.9637]
[  2]    [  3]    [-2.5451]    [-0.6035]    [1.3381]    [0.8818]
[  2]    [  4]    [-2.3471]    [-0.4055]    [1.5361]    [0.9693]
[  2]    [  5]    [-2.3262]    [-0.3846]    [1.5570]    [0.9746]
[  3]    [  4]    [-1.7436]    [ 0.1980]    [2.1396]    [0.9979]
[  3]    [  5]    [-1.7227]    [ 0.2189]    [2.1605]    [0.9970]
[  4]    [  5]    [-1.9206]    [ 0.0210]    [1.9626]    [1.0000]

ans =

'1'    [ 0.6907]    [0.4588]
'2'    [-0.1186]    [0.4588]
'3'    [ 0.4850]    [0.4588]
'4'    [ 0.2870]    [0.4588]
'5'    [ 0.2660]    [0.4588]

multcompare函数还生成一个交互式图形,可以通过鼠标单击的方式进行两两比较检验。该交互式图形上用一个符号(圆圈)标出了每一组的组均值,用一条之间段标出了每个组的组均值的置信区间。如果某两条线段不相交,即没有重叠的部分,则说明这两个组的组均值之间的差异是显著的。如果某两条直线段有重叠部分,则说明这两个组的组均值之间的差异是不显著的。可以用鼠标在图上任意选一个组,选中的组以及与选中的组禅意显著的其他组均用高亮显示,选中的组用蓝色显示,与选中的组差异显著的其他组用红色显示。
————————————————
版权声明:本文为CSDN博主「MATLAB讲师」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文传送门:https://blog.csdn.net/matlab_matlab/article/details/57076854
图(交互式)中任何均值都在其他均值的置信区间内,可见均值的差别并不大

  • 多因素
    操作与单因素类似,只不过要注意输入数据矩阵的形式,每一个Xijk(k=1~t)在矩阵中对应的位置如下:
     B1      B2..... Bi.....BnA1 X111    X121.............X112   X122................        ... .............X11t   X12t.............A2 X211    X221.............X212   X222................        ... .............X21t   X22t.................Aj                 Xij1Xij2...Xijt...An
clc,clear
x0=[58.2,52.6 56.2,41.2 65.3,60.8
49.1,42.8 54.1,50.5 51.6,48.4
60.1,58.3 70.9,73.2 39.2,40.7
75.8,71.5 58.2,51.0 48.7,41.4];
x1=x0(:,1:2:5);x2=x0(:,2:2:6);
for i=1:4 x(2*i-1,:)=x1(i,:); x(2*i,:)=x2(i,:);
end
[p,t,st]=anova2(x,2)
%anvoa2(x,t) 这里的t就是一组因素水平作用下样本的样本数量

结果:
p =

0.0035    0.0260    0.0001

t =

'Source'         'SS'            'df'    'MS'          'F'          'Prob>F'
'Columns'        [  370.9808]    [ 2]    [185.4904]    [ 9.3939]    [    0.0035]
'Rows'           [  261.6750]    [ 3]    [ 87.2250]    [ 4.4174]    [    0.0260]
'Interaction'    [1.7687e+03]    [ 6]    [294.7821]    [14.9288]    [6.1511e-05]
'Error'          [  236.9500]    [12]    [ 19.7458]           []              []
'Total'          [2.6383e+03]    [23]            []           []              []

st =

  source: 'anova2'sigmasq: 19.7458
colmeans: [58.5500 56.9125 49.5125]coln: 8
rowmeans: [55.7167 49.4167 57.0667 57.7667]rown: 6inter: 1pval: 6.1511e-05df: 12


这里p均<0.05,则拒绝原假设,认为在不同A,B水平下均值的差异还是很大的,而且AB的交互作用也是很显著的。

%多元分析
[c_A,m_A,h_A,ganmes_A]=multcompare(st,'estimate','row')%行:对因素A进行多重分析
[c_B,m_B,h_B,ganmes_B]=multcompare(st,'estimate','column')%列:对因素B进行多重分析

结果解读与对应单因素多重分析的结果一致
PS:有不正确或者不详细的地方欢迎在留言区提出,大家一起学习

数学建模之方差分析基础--单因素,双因素方差分析与matlab实现相关推荐

  1. 数学建模python实现基础编程练习4

    数学建模python实现基础编程练习4 1.使用networkx实现最短路和最短距离 import networkx as nx list1 = [(1,2,7),(1,3,3),(1,4,12),( ...

  2. 《数学建模:基于R》——2.2 方差分析

    2.2 方差分析 方差分析是分析试验数据的一种方法.对于抽样得到的试验数据,由于观测条件不同(同一因素不同水平或不同因素的各个水平)会引起试验结果有所不同;另一方面,由于各种随机因素的干扰,实验结果也 ...

  3. 数学建模python实现基础编程练习1

    数学建模python实现编程练习1 习题来自<python数学实验与建模> 1.利用sympy库进行画单叶双曲面 用pyplot画的不是很理想,就用sympy画了,利用plot3D函数 f ...

  4. 想学数学建模???先来看会这几个MATLAB题吧!!!(一)

    给MATLAB初学者的几个题,自己也是初学者,肯定有错还望指出. 有源码没有详解,自己看懂才是真懂(不,应该是自己会写才是嘿嘿) 这是数学建模基础,以后还会推出更难的代码,当然还有数学建模的题和详解哦 ...

  5. 2018年数学建模国赛A题题目、解题思路、matlab代码(四)

    题目: 消防和金属冶金等行业常常需要工作人员在高温环境中作业,高温作业专用服装可以较好地吸收部分热量,使得工作人员体表温度不至于过高从而避免灼伤,所以高温作业服必不可少.通常作业服由三层材料构成,记为 ...

  6. 咦?奇怪的知识又增加了?以数学建模的方式打开海啸传播模型(附部分matlab源码)

    前言 之前关于森林火灾蔓延模型小伙伴们反响都还不错,今天我们对海啸进行数学建模. 在文章初始,先喂自己袋盐. 以下是博主精心整理的两个matlab专栏,包含入门到精通及实战内容,需要的小伙伴可根据自己 ...

  7. 学习记录1——PMSM数学建模——PMSM的基础知识

    说明: 学习要从基础走起,对永磁同步电机进行具体的学习,那对其基础理论知识与数学模型是必不可缺以了解的内容,所以作为开始学习记录的第一篇文章,我便从整理三相pmsm 的生活意义.分类以及简称数学模型的 ...

  8. 【数学建模】十二(最后一篇):MATLAB CUMCM真题求解实例三:机理建模型

    机理建模问题在国赛中的占比呈上升趋势,近年来的题目有重庆交警平台设置.打车软件补贴优化.开放小区等问题, 本讲将以 2015 年的打车软件问题为例,介绍 MATLAB 在这类问题中的求解过程. 所介绍 ...

  9. MATLAB实战系列(十七)-大学生数学建模赛题解析-水塔中水流量估计(附MATLAB源码)

    题目 美国某洲的各用水管理机构要求各社区提供以每小时多少加仑计的用水率以及每天总 的用水量,但许多社区并没有测量水流入或流出当地水塔的水量的设备,他们只能代之以每小时测量水塔中的水位,精度在 0.5% ...

  10. 泰尔指数r语言_【数学建模】泰尔指数及分解的计算方法与Matlab实现

    补充更方便使用的R语言版本:张敬信:[R语言]泰尔指数及其分解​zhuanlan.zhihu.com 前言 最近查一点泰尔指数的资料,发现无论是公式还是软件实现,都说的特别乱,看不出所以然. 特整理了 ...

最新文章

  1. 软件测试的发展空间大吗
  2. 《PSP游戏下载 国际象棋大师:学习的艺术》(Chessmaster : The Art Of Learning)
  3. 英国政府发人工智能深度报告,力图保持领先地位
  4. 【采用】【风险管理】(第三篇)风险管理报表体系
  5. Python 数据分析三剑客之 Pandas(六):GroupBy 数据分裂、应用与合并
  6. ReactNative实现图集功能
  7. 2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型
  8. JavaScript30秒, 从入门到放弃之Array(七)
  9. 12)hInstance和hWnd写进子类
  10. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少?
  11. 算法:回溯十七 Combination Sum III挑选数组中规定个数元素的和为指定数
  12. java实现http/https请求
  13. Skywalking应用
  14. c:\windows\ ntdetect failed
  15. 照片文件与计算机系统,照片文件格式怎么修改
  16. U盘,移动硬盘显示显示需要格式化怎么修复
  17. NT_iOS笔记—判断iPhone6
  18. 内置模块:http模块
  19. 正和游戏:加密协议正在重塑公共产品 |链捕手
  20. JAVA JDK1.8 API 中文文档 高清完整版 CHM.rar(永久有效)

热门文章

  1. 代码时间换空间以及空间换时间
  2. 如何学习计算机思维,刘康平:为什么我们每个人都应该学习计算思维?
  3. 最简单的方法来压缩图片,改变图片大小
  4. 502 bad gateway
  5. 使用F021_API_F2837xD_FPU32.lib 库函数遇到的问题 warning #10068-D: no matching section
  6. OMNeT 例程 Tictoc15 和 Tictoc16 矢量和标量统计详解
  7. 超六类网线和六类网线的区别—Vecloud
  8. 学生信息管理系统—流程图
  9. 计算机专业普通的期刊,计算机类的普通期刊
  10. 数据库update更新date类型数据