百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

方差分析 in R语言 and Excel(方差分析r语言例题)

bigegpt 2025-07-17 17:24 6 浏览

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析,后续看需求介绍多因素方差分析。本篇使用的工具是R语言和Excel来实现,下一篇再使用常用的Python来实现一下,这样就可以根据不同的需求选择不同的工具了。

这次使用的数据如下,复制链接到浏览器就可以直接下载了↓

https://linss.oss-cn-beijing.aliyuncs.com/Excel/ANOVA_data.xlsx

数据的业务逻辑大概是,有四个省份,然后进行了一次培训。培训前后不同人员的销售金额的变化,需要看每个省份培训后是否带来销售额的提升,再决定后续是否加大培训,以及全国其他省份都进行培训的推广。

首先我们通过直观的图形来看一下,每个省份的平均销售金额有不有提升,在Excel里面绘制一个直方图↓

从图形可以看出,培训后河南、江西、四川三个省份销售均值都有提升,且四川提升最明显;而山东省销售金额还有所下降。然后我们在绘制箱线图来看看整体分布情况变化大不大↓

箱线图的绘制有Excel、PowerBI、R语言、Python四种工具可以参考《PowerBI箱线图 and Excel》《R语言_010可视化(箱型图)》《seaborn_boxplot》

可以看到,整体分布变化不大,四川、江西都有提升,河南整体有提升但是中位数在下降,山东整体下降。但是这只是直观的变化感受,实际在统计学意义上是否显著,是否培训真的带来了明显的效果,还需要做统计检验,这里就是用方差分析来实现。

如果为了介绍的完整性,我们这里还要花很大的篇幅来介绍方差的假设、方差的计算推导步骤(组内平方和、组间平方和、计算均值、计算F值、判断显著性),这写原理大概了解就行了,就可以当成一个黑盒子,根据实际需求,知道传入什么参数,然后能根据结果判断就行了,不必全部深究。这里使用Excel和R语言来对上面的数据做方差分析↓


【Excel方差分析】

Excel的数据分析功能其实很强大,除了函数功能外,还有一个专门的数据分析模块,里面常用的数据统计分析方法都有,这里就介绍一下单因素方差分析。

在Excel的方差分析里,数据字段的格式要求是几个数据就需要放几列,我们这里有两个阶段,就需要分别把两个阶段的结果放成两列。然后因为四个省份培训的人和内容有差异,所以需要四个省份分别来做方差分析,数据如下↓

下面是Excel里面方差分析的步骤↓

菜单【数据】->【数据分析】,然后在出现的界面里面选择单因素方差分析↓

然后参数选择很简单,Input Range选择我们的两列数据就行了,然后把标签在首行勾选上,默认的Alpha值是0.05,使用默认的就行;最后选择输出位置,可以新建一个sheet,或者就在当前sheet里面选择一个单元格作为输出的起始位置就行了↓

最后的输出结果如下↓

如果对方差分析过程参数感兴趣可以看一下其他参数,但是一般使用中我们看一下P值就行了,就是0.05作为判断标准,如果小于0.05就表示我们培训前后效果是显著的,本次四川省的培训效果对销售量有实际提升。

然后我们再使用同样的方式,对剩下三个省份进行方差分析,结果我只取P值,如下↓

江西省:0.32401085013613;

山东省:0.581523331518028;

河南省:0.397483802566017。

可以看到都不显著,说明虽然河南和江西有增长,山东有下降,但都不是因为培训带来的,可能是其他随机因素导致的结果。

所以我们的整体结论是,培训在部分省份有效果,可把四川省的培训方式在复制一份到其他省份看效果,再验证结果是否显著。


【R语言方差分析】

其实在做方差分析前,还需要先对数据本身情况进行检验,检验效果通过才能进行下一步的方差分析,不然分析结论就没意义了。当进行方差分析之前,正态性和方差齐性检验是非常重要的步骤。这些检验可以帮助我们验证方差分析的前提条件是否满足,从而确保我们得到的分析结果是可靠的。

正态性和方差齐性的检验,在Excel里面操作就很麻烦了,但是在代码工具比如R或Python就很简单了,都有成熟的包可以直接调用,我们对两种检验分别使用两种常用的方法,也可以对比看一下效果。

正态性检验-Shapiro-Wilk检验】

Shapiro-Wilk检验是一种用于检验数据是否符合正态分布的统计检验方法。在R语言中,通过shapiro.test()函数可以进行Shapiro-Wilk检验。假设检验的零假设是数据符合正态分布。如果p值小于显著性水平,则拒绝零假设,表示数据不符合正态分布。

shapiro.test(df$销量)

这是对所有样本进行正态性的检测,只是看一下,因为实际我们还是分别对各省每个阶段的数据分别进行正态性检测,结果如下↓

	Shapiro-Wilk normality test

data:  df$销量
W = 0.99199, p-value = 0.0002547

可以看到P值是不到0.01的,所以不能接受原假设(符合正态分布),所以整体来看是不通过正态性检测的。所以我们还是分别对各省来进行正态性检验,看看效果↓

df_jx = subset(df,df$省份 == "江西省")
shapiro.test(df_jx$销量)
	Shapiro-Wilk normality test

data:  df_jx$销量
W = 0.99592, p-value = 0.8728

江西省的P值是0.87,通过正态性检测。其他几个省份同样操作,结果如下:

四川0.11,河南0.23,山东0.54都通过了正态性检测。

正态性检验-Kolmogorov-Smirnov检验】

Kolmogorov-Smirnov检验用于检验一个样本是否来自特定分布。在R语言中,通过ks.test()函数可以进行Kolmogorov-Smirnov检验。我们将数据与正态分布进行比较,如果p值小于显著性水平,则表示数据不符合正态分布。

还是先看一下整体的分布是否正态

ks.test(df$销量, "pnorm", mean(df$销量), sd(df$销量))
	Asymptotic one-sample Kolmogorov-Smirnov test

data:  df$销量
D = 0.044542, p-value = 0.08363
alternative hypothesis: two-sided

结果也是勉强通过检验,还是需要看一下每个省份的检验效果。

ks.test(df_jx$销量, "pnorm", mean(df_jx$销量), sd(df_jx$销量))
	Asymptotic one-sample Kolmogorov-Smirnov test

data:  df_jx$销量
D = 0.046131, p-value = 0.7883
alternative hypothesis: two-sided

江西省的结果是0.778,其他四川是0.24、河南是0.87、山东是0.87,都非常完美的通过了检验。

方差齐性检验-Bartlett检验】

Bartlett检验用于检验不同组之间的方差是否相等。在R语言中,通过bartlett.test()函数可以进行Bartlett检验。假设检验的零假设是各组样本的方差相等。如果p值小于显著性水平,则拒绝零假设,表示各组样本的方差不相等。

我们就直接使用每个省份的数据来进行检验了,江西省代码和结果如下↓

bartlett.test(df_jx$销量 ~ df_jx$次数)
	Bartlett test of homogeneity of variances

data:  df_jx$销量 by df_jx$次数
Bartlett's K-squared = 0.25787, df = 1, p-value = 0.6116

结果为0.61,通过了方差齐性检验,表示江西省这两次的结果方差整体差异不大。

其他三个省份的结果分别是,四川0.53,河南0.36,山东0.93,都完美的通过了Bartlett方差齐性检测。

方差齐性检验-Levene检验】

Levene检验也用于检验不同组之间的方差是否相等,通常用于小样本情况。在R语言中,通过leveneTest()函数进行Levene检验。同样,假设检验的零假设是各组样本的方差相等。如果p值小于显著性水平,则表示各组样本的方差不相等。

还是重复上面的操作,江西省效果如下↓

leveneTest(df_jx$销量 ~ df_jx$次数)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   1  0.2638 0.6081
      198

结果为0.61,通过了方差齐性检验,表示江西省这两次的结果方差整体差异不大。

其他三个省份的结果分别是,四川0.38,河南0.57,山东0.98,也都完美的通过了Levene方差齐性检测。


【R语言正式方差分析】

通过一系列的检测,并且都通过了,我们就可以顺利的进入到最后一步,进行各省的方差分析了。

我们还是直接从省份开始了,在R里面,方差分析就是aov函数,参数就是分析的数据和维度,江西省代码如下↓

aov_jx <- aov(df_jx$销量 ~ df_jx$次数)
summary(aov_jx)
             Df Sum Sq Mean Sq F value Pr(>F)
df_jx$次数    1    105   105.1   0.978  0.324
Residuals   198  21293   107.5

结果是0.324,和Excel里面的结果是完全一样的,没有通过方差检验,说明江西省这次培训前后销量的变化没有差异。

然后是几个省份的值:

四川是0.0378,表示培训前后销售有明显变化,而且在R语言里面如果通过了显著性检验,会在P值后面标记*,三*最好↓

             Df Sum Sq Mean Sq F value Pr(>F)  
df_sc$次数    1   1842  1842.2   4.371 0.0378 *
Residuals   198  83447   421.5                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

剩下的河南0.397,山东0.582都是和Excel结果一样的。


完成了方差分析后,我们才有更可靠的统计学支撑,对比只看表面图形和数字的变化更具有说服力。也是作为业务判断有力的一个标准。

链接是我使用PowerBI整合的历史文章,按类型分类,可以根据需求查询:Microsoft Power BI↓

https://app.powerbi.com/view?r=eyJrIjoiNjI2NWQ3NjktYjU0ZC00ZWZhLTgzMDgtMGI4ZTk1ZDlkODM3IiwidCI6IjI3NDQ3MWQ0LTM4ZDQtNDVlZS1hMmJkLWU1NTVhOTBkYzM4NiJ9

End

相关推荐

方差分析简介(方差分析通俗理解)

介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

Python数据可视化:箱线图多种库画法

概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

方差分析 in R语言 and Excel(方差分析r语言例题)

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

matplotlib 必知的 15 个图(matplotlib各种图)

施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

R ggplot2常用图表绘制指南(ggplot2绘制折线图)

ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

Python数据可视化:从Pandas基础到Seaborn高级应用

数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

Python 数据可视化常用命令备忘录

本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

统计图的种类(统计图的种类及特点图片)

统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

通过AI提示词让Deepseek快速生成各种类型的图表制作

在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

数据可视化:解析箱线图(box plot)

箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

[seaborn] seaborn学习笔记1-箱形图Boxplot

1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...