5.23R语言-参数假设检验

理论

方差分析(ANOVA, Analysis of Variance)是统计学中用来比较多个样本均值之间差异的一种方法。它通过将总变异分解为不同来源的变异 来检测因子对响应变量的影响。方差分析广泛应用于实验设计、质量控制、医学研究等领域。

方差分析的基本模型

方差分析的基本模型可以用以下形式表示:

单因素方差分析

单因素方差分析(One-Way ANOVA)是最简单的形式,用于比较一个因素的多个水平对结果的影响。例如,比较不同肥料对作物生长的影响。

步骤:

1.假设检验

2.计算组间方差和组内方差

组间方差(MSB,Mean Square Between groups)

组内方差(MSW,Mean Square Within groups):↳

3.计算F值

4.查找临界值

5.做出决策

如果计算得到的F值大于临界值,则拒绝原假设,说明组间均值存在显著差异。

如果计算得到的F值小于等于临界值,则不拒绝原假设,说明组间均值不存在显著差异。

多因素方差分析

多因素方差分析(Two-Way ANOVA 或 Factorial ANOVA)用于同时研究两个或多个因素对结果的影响,且可以考察因素间的交互作用。例如,研究不同肥料和不同灌溉方式对作物生长的联合影响。

方差分析的假设条件

  1. 独立性:各组别的观测值相互独立。
  2. 正态性:各组别的观测值服从正态分布。
  3. 方差齐性:各组别的方差相等。

如果数据不符合这些假设,方差分析的结果可能会失真,因此进行正态性检验可以帮助我们评估模型的适用性。

在进行正态性检验时,我们主要关注检验的 p 值。如果 p 值较大(通常大于 0.05),则表明数据符合正态分布的假设,可以继续进行方差分析。如果 p 值较小,则可能需要考虑使用非参数方法或对数据进行转换以满足模型假设。

实际应用中的考虑

在实际应用中,必须确保满足方差分析的假设条件,否则结果可能不可靠。当假设条件不满足时,可以考虑使用非参数检验(如Kruskal-Wallis检验)或调整模型(如方差不齐的情形下使用Welch's ANOVA)。

结论

方差分析是一个强大的统计工具,可以有效地检测多个组别之间的差异。然而,应用时需要谨慎,确保数据符合基本假设,并在必要时进行模型调整或采用其他统计方法。随着统计学的不断发展,方差分析的方法和应用也在不断进步,研究人员需要不断更新知识,以便在复杂的实际问题中作出准确的判断。

R语言实操-方差分析模型

方差分析(ANOVA)模型用于比较多个组之间的均值是否有显著差异。进行方差分析模型,最好对数据进行正态性检验。正态性检验有助于确认方差分析模型的假设是否满足,特别是方差分析对数据的正态性有一定的要求。写了另一篇关于正态性检验的文章:

5.22 R语言-正态性检验-CSDN博客文章浏览阅读66次,点赞2次,收藏4次。正态性检验的目的是确定一组数据是否符合正态分布(也称高斯分布)。在统计分析和数据建模中,正态性假设是许多统计方法和模型的基础。了解数据是否符合正态分布有助于选择适当的统计方法和确保分析结果的有效性。本文主要从方面来进行正态性检验。即假设检验的角度来说,数据是否服从正态分布可以通过与""这样一个零假设进行假设检验计算,构建相关统计量来计算出检验结果。文中提及的Q-Q Plot是正态检验 (Normality Test)------常见方法汇总与简述-CSDN博客。https://blog.csdn.net/Shirleyluck/article/details/139131768?spm=1001.2014.3001.5501https://blog.csdn.net/Shirleyluck/article/details/139131768?spm=1001.2014.3001.5501

进行方差分析(ANOVA)模型的步骤
  1. 准备数据:确保你的数据是干净和适合分析的。

  2. 拟合模型 :使用 aov 函数拟合方差分析模型。

  3. 检验模型假设:包括正态性检验和方差齐性检验。

  4. 查看结果 :使用 summary 函数查看方差分析的结果

    m = aov(Time ~ IDE, data=ide2)

使用 aov 函数来拟合一个方差分析(ANOVA)模型 。具体而言,你正在比较不同 IDE 组别之间的 Time 数据是否存在显著差异

  • aov(Time ~ IDE, data=ide2): 这行代码指定模型的公式,即 Time 是因变量,IDE 是自变量。data=ide2 指定了数据来源。
  • m = : 这行代码将拟合的模型赋值给变量 m,以便后续进行模型检验和结果分析。

可以使用 summary(m) 来查看方差分析的结果,了解各个组别之间的差异是否显著。

summary(m) 的输出通常包含以下部分:

  • Df(自由度):自变量和误差的自由度。

  • Sum Sq(平方和):自变量和误差的平方和。

  • Mean Sq(均方):平方和除以相应的自由度。

  • F value(F值):自变量的均方除以误差的均方得到的F值。

  • Pr(>F)(P值):F值对应的P值,用于判断显著性。

    拟合方差分析模型

    m <- aov(Time ~ IDE, data = ide2)

    正态性检验

    install.packages("nortest")
    library(nortest)
    shapiro.test(ide2[ide2IDE == "VStudio",]Time)
    shapiro.test(ide2[ide2IDE == "Eclipse",]Time)

    方差齐性检验

    bartlett.test(Time ~ IDE, data = ide2)
    install.packages("car")
    library(car)
    leveneTest(Time ~ IDE, data = ide2)

    查看方差分析的结果

    summary(m)

绘制Q-Q 图

为了评估方差分析模型(ANOVA)假设的正态性,使用qqnorm和qqline绘制 Q-Q 图。 Q-Q 图(Quantile-Quantile Plot)是一种图形方法,用于比较数据的分布与正态分布。如果数据点大致沿着一条直线分布,则数据可以被认为是正态分布的

##试试检验假设

#首先是正态性假设

Shapiro-Wilk normality test(夏皮罗-威尔克检验)

shapiro.test(ide2[ide2IDE == "VStudio",\]Time) #H0:研究对象符合正态分布。

shapiro.test(ide2[ide2IDE == "Eclipse",\]Time)

满足正态性假设

但真正重要的是残差正态性 【仅展示】

m = aov(Time ~ IDE, data=ide2) # fit model

shapiro.test(residuals(m)) # test residuals

qqnorm(residuals(m)); qqline(residuals(m)) # plot residuals

如果残差是正态分布的,那么这些点应该近似地落在一条直线上。

qqline函数在这图上添加了一条参考线,这条参考线是正态分布的理论分位数线,有助于直观判断残差是否近似正态分布。

不正态可以尝试数据转换【仅展示】

ide2logTime = log(ide2Time) # log transform

View(ide2) # verify

#其次是方差齐性假设 # 方差齐性检验就是看两总体方差是否相等.比如在两独立样本的t检验中,两总体方差1.相等 2.不相等

install.packages("car")

library(car)

leveneTest(Time ~ IDE, data=ide2, center=mean) # Levene's test:用于检验两组及两组以上独立样本的方差是否相等。

leveneTest(Time ~ IDE, data=ide2, center=median) # Brown-Forsythe test: Brown-Forsythe检验是指采用Brown-Forsythe分布的统计量进行的各组均值是否相等的检验。

##执行独立样本T检验: 单总体t检验是检验一个样本平均数与一个已知的总体平均数的差异是否显著。

t.test(Time ~ IDE, data=ide2, var.equal=TRUE) #var.equal= TRUE 方差相等

###根据上述结果,可以得出结论:有足够证据拒绝零假设,接受备择假设,即Eclipse和VStudio在完成任务所需平均时间上存在显著差异。

###具体来说,Eclipse组的平均时间比VStudio组多166.05个单位(468.15 - 302.10),并且这个差异是统计上显著的。

相关推荐
fathing5 分钟前
c# 调用c++ 的dll 出现找不到函数入口点
开发语言·c++·c#
前端青山27 分钟前
webpack指南
开发语言·前端·javascript·webpack·前端框架
nukix41 分钟前
Mac Java 使用 tesseract 进行 ORC 识别
java·开发语言·macos·orc
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】内存可见性问题 & volatile
java·开发语言·java-ee
Lizhihao_1 小时前
JAVA-队列
java·开发语言
远望清一色2 小时前
基于MATLAB边缘检测博文
开发语言·算法·matlab
何曾参静谧2 小时前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
Prejudices2 小时前
C++如何调用Python脚本
开发语言·c++·python
我狠狠地刷刷刷刷刷2 小时前
中文分词模拟器
开发语言·python·算法
wyh要好好学习2 小时前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf