本文从方差分析的概念切入,简述了对方差分析的理解,随后提出方差分析的一般方法,之后用python实现了方差分析的一个简单应用。全文分成以下几个部分:

  • 方差分析的概念
  • 方差分析的理解和内容
  • 方差分析的前提条件和局限
  • python简单应用
  • 遗留问题和扩展阅读

方差分析的概念

在介绍T检验的时候,我们提到了费舍尔这位统计学大神,今天的主题方差分析也是这位大神的成果之一。

方差分析(Analysis of Variance,ANOVA),或者叫做F检验。方差分析的本质目标是研究分类型的自变量对数值型因变量的影响是否显著,通过检验多个总体的均值是否相等来实现

在科学实验中,精准的设定环境变量,控制自变量来达到研究自变量和因变量的关系是很有效的实验手段。但是涉及到心理学,医疗药物、市场营销等领域,精准的控制环境变量很难做到,甚至有时候连实验机会都很难得。这个时候通常面对的是积累了大量的经验得来的数据,但我们依然希望从中区分出显著的影响因子。

这也是费希尔发明方差检验的动机之一。当年费希尔在英国的衣业试验站上班,面对的就是积累了90多年的杂乱的农业数据,他想通过这些数据找到化肥和土豆产量的关系,发明了方差分析。相比t检验,其显著的优点在于能够在多组不同水平的数据下,高效的检验自变量和因变量的关系

例如这个例子:一家饮料生厂商针对同一批次的饮料,采用了不同的颜色包装,投放到市场。随机从同一城市的同等规模超市中随性选出5家,对饮料的销量进行了统计。发现统计结果如上图所示。现在企业的疑问在于,不同颜色的饮料包装是否影响销量?

如果用t检验方法,要回答此问题,需要对各种颜色包装做两两配对的假设检验。一则是这样会带来更加繁琐的计算,二则是如果每次检验用95%的置信区间,而每次检验将会扩大假设检验犯错误的概率。

方差分析可以用于解决该类问题。注意,在许多网络文章里,方差分析举了解决相关关系的例子,实际上是一种方法的滥用,要确认因变量自变量的关系,有时间先后顺序,比如本例子中的先投放后销售,如医药中的先吞服后观察效果等。在本文的最后一部分,将用python对上述例子做实践。

接着具体来看方差分析这一方法的具体内容。

方差分析的理解和内容

如果要验证假设:A因素对B事件的结果没有显著的影响。这个假设如何去验证呢?我们会取A因素在不同的值的情况下,验证B事件的结果是不是依然是同样的分布。下面由简单到复杂的看个例子。

方差分析的理解

比如我们觉得小明的体重和小亮的语文成绩没有关系,如果同时收集小亮的语文成绩和考试后第二天小明的体重值,组成按照小亮的语文成绩水平组成及格、中等、优秀三等的三组数据,在三组数据里,小亮的体重变化应该是相同的。如果小亮的体重控制的好,一直在一个恒定值的情况下,这三组数据里的小亮的体重一直是常数,方差为0。

小亮成绩 小明体重
及格 60kg all the time
中等 60kg all the time
优秀 60kg all the time

把情况变得复杂一点,因为涉及到小明体重的一些随机因素,比如小明饮食习惯的周期波动,小明体重呈现出某均值的正态分布,在三组数据里,这种波动也是相同的,也就是三组数据呈现出相同的方差,相同的均值。这种情况下,我们也认为小亮的语文成绩与小明的体重无关。

小亮成绩 小明体重
及格 59kg,61kg,60kg,...均值为60kg,方差为1的正态分布
中等 58kg,60kg,61kg,...均值为60kg,方差为1的正态分布
优秀 59kg,60kg,61kg,...均值为60kg,方差为1的正态分布

再复杂一些,引入抽样这一统计方法。刚才的情况下我们谈到小明的体重数据,说的是第二天任意时刻小明体重值的分布,这个数据分布包括了小明任意时间的所有体重测量结果。在现实里,这是不可能得到的,只能对总体进行抽样,比如每次等小亮考完考试的第二天的早中晚,对小明进行称重。

这样相当于是从正态分布里抽出一个结果,这个结果相对小明的体重均值,是有偏差的。因此在不同水平的三组数据里,小明的体重会呈现出不同的均值和方差。

小亮成绩 小明体重
及格 59kg,59kg,59kg
中等 58kg,60kg,58kg
优秀 59kg,60kg,61kg

很有可能出现这么一种状况,恰好小亮得优秀的时候,刚好抽样得到的这组体检数据都在正态分布曲线的右边,体重偏高,而不及格那组,体重偏低。显然这样就认为两者之间有关联,是不合理的。两者到底有没有联系?这种偶然情况发生的可能性有多大呢?如何确认两者之间的关联强度?要这就是方差分析需要解决的问题。

在刚才的例子里,我们提到的样本不同水平分组的两种统计变量,均值和方差。通过分析分组后的方差,来检验A因素是否对B事件没有影响,这就是方差分析的任务。

方差分析最核心的问题是:如果A因素对B事件的结果没有影响,那么按照A因素的不同水平分组,其方差或与方差相关的变量是不是可以满足某种已知的概率分布,以便让我们能够确认当前水平分组情况出现的概率,从而得到一定置信度的检验结果

接下来先简要介绍一下方差分析的基本思路,之后,在用标准的假设检验标准三步曲对方差分析进行描述。

方差分析的内容

方差分析,顾名思义,就是对方差进行分析。分组后一共有个组的数据,每组数据有个的所有样本数据中的总偏差和SST,组间偏差平方SSA以及组内平方和SSE定义如下:

全部观测值与总均值的误差平方和SST,表示所有数据的均值:

每个水平或组的样本数据与其组均值的误差平方和SSE,表示第组组内数据的均值:

各组均值与总均值的误差平方和SSA:

在数学上,,这个大家有兴趣可以自己推导一下。也就是说,总偏差是由组间偏差和组内偏差共同构成。假设分组水平对事件结果没有影响,组内偏差可以理解为随机因素对事件的影响,如上面例子里小明体重的浮动,可能是测量时间或尺子误差等引起的,这种误差是随机误差,会影响所有数据,而且造成的波动幅度都相似,所以方差分析的前提条件是各组方差相同或相近,在统计学上称之为方差齐次

组外方差是不同水平引起的,在上述例子中,其值应该接近于0。如果小亮的语文成绩和小明的身高没有关系,此时计算SSA/SSE时,其大概率是一个非常大的值。事实上,如果引入自由度的卡方分布对该表达式进行变换,其概率分布曲线是固定的F分布,出现为某值的概率是确定可查。


以上是对于方差分析的直观理解,接下来换成严谨的数学语言进行描述。方差分析是基于单侧假设检验这一统计学方法。方差分析有单因素分析也可以分析多因素影响,这里主要介绍单因素方差分析。

第一步,提出假设

通过检验因素的k个水平分组中,在其方差相同的条件下,分组的均值相等。

第二步,构造统计量

构造三个误差平方和,总平方和(SST)、组间平方和(SSA)和组内平方和(SSE)。得到各平方误差除以它们所对应的自由度的均方差。

统计量 服从的概率密度分布。

第三步,决策统计

在给定显著性水平α下,计算分布的Fα,如果F>Fα,则拒绝原假设,表明自变量对因变量影响显著。同时计算该因素与事件结果的关系强度:

双因素分析在很多教科书中都会有介绍,具体的步骤和单因素分析是非常相似的,都是需要对多因素进行单个的单因素分析。尤其涉及有在多因素的重叠作用时,多因素的重叠将考虑为一个单独的因子进行分析。这里不再展开说明。

方差分析的前提条件和局限

每种工具都有自己的局限性。

方差分析有三个非常重要的前提:独立、正态和方差齐。各组观察值是来自于正态分布的总体的随机样本;各组观察值之间是相互独立的;各组观察值具有同方差性。这是使用方差分析发现自变量和因变量之间是否有显著关系的前提条件。独立和正态的假设无法准确的确认,只能有判个大致的判断。而更显眼的是方差齐这个前提条件。

方差齐性,方差齐性是指不同组间的总体方差是一样的方差分析是用来比较多组之间均值是否存在显著差异。那如果方差不一致,也就意味着值的波动程度是不一样的,如果此时均值之间存在显著差异,有可能是大方差带来大的波动。这从某种程度上已经证明了这种分组的自变量会影响自变量的分布。所以也不宜用方差分析这种方法来做判断。

如何在拿到一组数据时判断其是否是齐方差的?要用到另外的统计学方法--方差齐次次检验,如方差比、Hartley检验、Levene检验、BF法、Bartlett检验。以及描画残差图等等。

用Python做简单应用

建立python的DataFrame

针对第一节的例子,用pandas建立dataframe。

import pandas as pddf = pd.DataFrame(data=[[265,312,279,308],[287,283,251,296],[251,308,285,324],[291,279,242,317],[372,298,26,328]],columns = ['colourless','pink','orange','green'],index=[1,2,3,4,5])

观察方差齐次性是否满足

这里使用levene方差齐次检验,其主要思想是将每个值先转换为为该值与其组内均值的偏离程度,然后再用转换后的偏离程度去做方差分析,是对方差的方差分析。

from scipy.stats import levenestat, p = levene(df['colourless'],df['orange'],df['green'],df['colourless'],center='median')print(stat, p)

stat = 0.7478660362349282 p = 0.5393030437788999

其p值不在0.05以下,不可拒绝方差为齐次假设。满足方差分析条件。

用方差分析方法分析该模型

接着计算单因素方差分析假设检验结果。需要使用statsmodels,在讲Datafrmae做melt以后,。

from statsmodels.formula.api import olsfrom statsmodels.stats.anova import anova_lmmeltdf = df.melt()model = ols('value ~ C(variable)',meltdf).fit()anova_lm(model)

在方差分析中,P值为0.08,无法拒绝原假设,即包装颜色对销量无显著影响。

总结

这一次的方差分析就介绍到这了。读者们不妨思考如下两个问题,看看是否透彻的理解方差分析。天冷了,我们更新频率也变低了。欢迎大家加入我们。

遗留疑问

如果从已知均值和方差的某正态分布中做抽样1000次,只留下a~b区间的样本,这个样本的分布还是正态分布吗?均值和方差各是多少?

在判断为方差非齐次之后,应该如何处理?

扩展阅读:

  • 《智能风控:Python金融风险管理与评分卡建模4.4.7 方差分析》
  • 《SPSS实战与统计思维》第十章-方差分析,讲述了方差分析的实战。
  • 《市场调研:任务、案例与实战》
  • 异方差分析处理:https://www.jianshu.com/p/4a44cddd488f

参考资料:

  • 方差齐次性检验:https://cloud.tencent.com/developer/article/1678440
  • 《统计学(第二版)》王丽萍 高文才
  • 《统计学原理和应用》程建华 洪文
  • 《应用统计学》陈磊
  • 方差分析python示例:https://blog.csdn.net/qq_35125180/article/details/108025976

多因素方差分析_方差分析入门相关推荐

  1. 三因素方差分析_重复测量方差分析的操作教程及结果解读

    内容来自:"小白学统计"微信公众号,感谢作者授权. 重复测量数据是指对同一个体在不同时间点的测量,这种数据在医学研究中较为常见,比较典型的数据形式如: 对一组人群分别在干预前后不同 ...

  2. R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战

    R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战 目录 R语言单因素重复测量方差分析(one-way repeated measures ANOVA) ...

  3. R语言多因素有交互方差分析(Two-Way ANOVA)实战:拟合多因素有交互方差分析模型、分析不同分组的差异TukeyHSD、多因素有交互方差分析的结果总结

    R语言多因素有交互方差分析(Two-Way ANOVA)实战:拟合多因素有交互方差分析模型.分析不同分组的差异TukeyHSD.多因素有交互方差分析的结果总结 目录

  4. Excel多因素可重复方差分析

    Excel多因素可重复方差分析 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 多因素可重复方差分析简介 针对多类数据(多个因 ...

  5. Excel多因素不重复方差分析

    Excel多因素不重复方差分析 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 多因素不重复方差分析简介 针对多类数据(多个因 ...

  6. python方差齐性检验_方差分析中的方差齐性检验_方差齐性检验结果分析

    方差分析中的方差齐性检验_方差齐性检验结果分析_方差分析 齐性检验 方差分析时的方差齐性检验是方差分析的前提条件,还是只是后面进行均值的多重比较时选择分析方法的依据?看过几本书,这两种观点都有.我看方 ...

  7. 两因素重复测量方差分析,史上最详细SPSS教程!

    原文地址 http://www.sohu.com/a/202657022_489312 2017-11-06 18:34 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-R ...

  8. Matlab重复测量的方差分析,两因素重复测量方差分析,史上最详细SPSS教程!

    原标题:两因素重复测量方差分析,史上最详细SPSS教程! 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-Reactive Protein, CRP)的浓度. 研究者招募了 ...

  9. 单/多因素重复测量方差分析

    重复测量方差分析 普通的方差是对于独立的单样本进行一次测量,比如我们在对一个班的前20名测量身高,然后再对后20名同学测量身高,这样我们就是对这个班的同学进行单次测量 重复测量就是每隔一周对两个组的同 ...

最新文章

  1. python读写csv确定编码格式_Python使用utf8编码读写csv文件
  2. python3文件下载-python3获取文件中url内容并下载代码实例
  3. 有个名字叫随便乱记——css3
  4. python线程创建对象_Python多线程编程基础:如何创建线程?
  5. IOS开发基础之画板案例软件的开发
  6. 阿里mysql 二进制_Mysql binlog 之阿里canal
  7. selenium中Chrome和Firefox浏览器驱动的使用和版本对应
  8. Linux学习(第十七周)
  9. 安装谷歌json格式转换插件
  10. 沧小海基于xilinx srio核的学习笔记之第三章 xilinx srio核介绍(三)核配置
  11. s3c2416运行JAVA_实时时钟RTC - 基于S3C2440的Linux-3.6.6移植_Linux编程_Linux公社-Linux系统门户网站...
  12. 微信指数:微信关键词搜索热度情况分析!
  13. 一行代码教你屏蔽你的博客广告
  14. OpenCV 实现读取摄像头、视频读取保存 (C++)
  15. jetson agx xavier 系统源码编译及固件烧写
  16. 使用Python实现批量PPT转图片,格式支持PNG、JPG,转后图片后批量重命名
  17. CDN和DNS的区别
  18. 如何强制关闭进程linux,4种强制关闭Ubuntu中无响应应用程序的方法
  19. osg vs2017编译
  20. 用SQL语句修改表结构和添加约束

热门文章

  1. 取特定字符串后的数字 linux_Linux相关操作(四)
  2. jittor 和pytorch gpu 使用效率对比(惊人jittor的算力利用率是pytorch 4-5倍)
  3. gan只用来生成是浪费
  4. 云容器实例服务入门必读
  5. java企业网站源码,模版,有前后台,springmvcSSM,生成静态化
  6. Android 性能优化
  7. Kubernetes StatefulSet源码分析
  8. Eclipse_Eclipse下配置Maven
  9. Git查看、删除、重命名远程分支和tag【转】
  10. Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDI