《R语言与农业数据统计分析及建模》学习——方差分析

devtools/2024/10/18 10:18:48/

        方差分析是研究一种或多种因素的变化对试验结果的观测值是否有显著影响,从而找到较优试验条件或生产条件的一种常用数理统计方法。

        方差分析根据平方和的加和原理,利用F检验,进而判断试验因素对试验结果的影响是否显著。

        分为:单因素方差分析(one-way ANOVA)、双因素方差分析(two-way ANOVA)和多因素方差分析分析(multi-way ANOVA)

方差分析的前提假设:

        ①样本数据独立

        ②每组数据的总体服从正态分布分布

        ③每组数据方差齐性

        因此在进行方差分析前,需要先进行对应的检验:

        (1)正态性检验

        ①使用Shaprio-Wilk正态检验方法来检验样本是否符合正态分布

        ②使用Q-Q图来检验正态性

        (2)方差齐性检验

        ①Bartlett检验:适用于数据服从正态分布,而当数据非正态时容易导致假阳性。

        ②Levene检验:在非正态数据时,表现较为稳定,对正态不敏感。

        ③Fligner-Killeen检验:非参数检验,完全不依赖已知分布。

        (3)离群点检验

        由于方差分析对离群点很敏感,所以需要对数据检测是否有离群点,最常用(可能也较为好使的)是以图形展示室,如箱线图、散点图等形式:

        ①mvoutlier包aq.plot()作物

        ②car包的outlierTest()作图

1、单因素方差分析分析——检验前提(正态性)

(1)独立性:由于随机抽取,假设总体满足独立。

(2)检验正态性:用W检验。

        H0:样本数据与正态分布没有明显区别;

        HA:样本数据与正态分布存在显著区别。

        W统计量越小,越接近零,表示样本越接近正态分布;p值,如果p-value小于显著性水平α(通常为0.05),则拒绝H0。代码如下:

# 导入数据
df<-read.csv("sss.csv")
# 部分数据展示
head(df)
# 进行正态性检验
shapiro.test(df[which(df[,2]=="A"),]$x)
shapiro.test(df[which(df[,2]=="B"),]$x)
shapiro.test(df[which(df[,2]=="C"),]$x)
shapiro.test(df[which(df[,2]=="D"),]$x)
shapiro.test(df[which(df[,2]=="E"),]$x)

        #结论:所有因素的W检验显示不显著,即满足正态性。

2、单因素方差分析分析——检验前提(齐次性)

        检验方差齐次性(本例使用bartlett检验)

        H0:各因子水平下的方差相同。

        HA:各因子水平下的方差不同。

# 接续上一个代码
# 进行bartlett方差齐性检验
bartlett.test(x~method,data=df)

        检验结果显示,p-value>0.05,即差异不显著,接受原假设(方差齐性)。

3、单因素方差分析分析——检验前提(离群性)

        方差齐性检验本身对离群点就非常敏感。当然也可以用outlierTest()函数进行检验。

# 接续上一代码
# 进行离群性检验
library(car)
outlierTest(aov(x~method,data=df))

        结论:没有证据表明数据中存在离群点。

4、单因素方差分析

        由于经过前面三步的检验,符合方差分析的假设条件。下面进行方差分析。【注意:如果正态性和方差齐性不满足,需要中KW检验进行分析,对应的函数为:kruskal.test()

# 接续上一代码
# 对数据进行方差分析
df$method<-factor(df$method)
aov.model<-aov(x~method,data=df)
summary(aov.model)
boxplot(x~method,data=df)

        结论:p值小于0.05,即method的不同水平之间差异显著。

5、双因素(无交互)方差分析

        双因素(无交互)方差分析,仍需要满足:数据独立、正态性和方差齐性。

        R中的函数aov():不考虑交互作用x~A+B,加号表示两个因素具有可加性。

# 双因素(无交互)方差分析
# 导入数据
juice<-read.csv("juice.csv")
# 数据展示
head(juice)
# 转化为因子型变量
juice$A<-factor(juice$A)
juice$B<-factor(juice$B)
# 双因素方差分析
juice_aov<-aov(X~A+B,data=juice)
summary(juice_aov)

        结论:A因素不同水平对x的影响差异不显著,B因素不同水平对x的影响差异显著。

6、双因素(有交互)方差分析

        双因素(有交互)方差分析仍需要满足:数据独立、正态性和方差齐性。

        有交互作用,表示两个因素的不同水平较差搭配对试验指标产生影响。

        R中的函数aov():考虑交互作用的方差分析模型x~A+B+A:B

# 双因素(有交互)方差分析
# 导入数据
rats<-read.csv("rats.csv")
# 数据展示
head(rats,3)
# 转化为因子型变量
rats$Toxicant<-factor(rats$Toxicant)
rats$Cure<-factor(rats$Cure)
# 更改图形显示的界面排版
op<-par(mfrow=c(1,2))
# 图形展示
plot(Time~Toxicant+Cure,data=rats)
# 用函数interaction.plot()作出交互效应图,考察因素间是否存在交互作用
with(rats,interaction.plot(Toxicant,Cure,Time,trace.label="Cure"))
with(rats,interaction.plot(Cure,Toxicant,Time,trace.label="Toxicant"))
# 方差分析
rats_aov<-aov(Time~Toxicant+Cure+Toxicant:Cure,data=rats)
summary(rats_aov)

        由交互曲线图可以看出,曲线中没有明显的相交情况出现,初步认为两个因素没有交互作用,下一步在用方差分析进行两因素间交互作用的确认。

        由方差分析结果可知:两因素对Time的影响极显著;二者间的交互作用对Time影响不显著。


http://www.ppmy.cn/devtools/27695.html

相关文章

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux&#xff0c; Apache&#xff0c; MySQL&#xff0c; PHP组成的&#xff0c;即把Apache、MySQL以及PHP安装在Linux系统上&#xff0c;组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

6.C++模板(超全)

目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.2 函数模板的原理 2.3 函数模板的实例化 2.4 模板参数的匹配原则 3. 类模板 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;…

09_Scala函数和对象

文章目录 函数和对象1.函数也是对象 scala中声明了一个函数 等价于声明一个函数对象2.将函数当作对象来用&#xff0c;也就是访问函数&#xff0c;但是不执行函数结果3.对象拥有数据类型(函数类型)&#xff0c;对象可以进行赋值操作4.函数对象类型的省略写法&#xff0c;也就是…

在cocos2d-x中编译/调试curl库

环境参数 系统&#xff1a;mac os x10.6 xocde&#xff1a;4.0.2 ios sdk&#xff1a;4.3 curl&#xff1a;curl-7.22.0 不知道curl是做什么的&#xff0c;就自己google了&#xff0c;这里暂时不纠结这个问题。 因一个cocos2d-x项目需要使用curl库&#xff0c;但是curl官方…

MySQL商城数据表(20-29)

20快递表 DROP TABLE IF EXISTS xuge_express; CREATE TABLE xuge_express (expressId int(11) NOT NULL AUTO_INCREMENT COMMENT 自增id,expressName varchar(50) NOT NULL COMMENT 快递名称,-dataFlag tinyint(4) NOT NULL DEFAULT 1 COMMENT 有效标记&#xff08;1 &#x…

【toos】工具篇

1 通用的makefile 编写一个makefile&#xff0c;可以将其所在目录下的所有独立 .c 文件编译生成同名可执行文件。 src $(wildcard *.c) # 拿到所有*.c target $(patsubst %.c, %, $(src)) # 将src中所有%.c替换成%ALL:$(target)%:%.cgcc $< -o …

模型剪枝-Network Slimming算法分析

代码见文末 论文地址&#xff1a;Learning Efficient Convolutional Networks through Network Slimming ICCV 2017 Open Access Repository 1.概述 由于边缘设备的限制&#xff0c;在模型的部署中经常受到模型大小、运行内存、计算量的限制。之前的方法要么只能解决其中一个…

中兴F7607P自启动程序,关闭JAVA插件

中兴F7607P自启动程序&#xff0c;关闭JAVA插件 本文目的&#xff1a;关闭光猫内自动运行的JAVA插件&#xff0c;并实现开机自动调用用户的程序启动 原文地址 移动定制版F7607P不带LXC容器&#xff0c;取而代之的是JAVA虚拟机&#xff0c;内置多个插件&#xff0c;包括名为C…