单因素方差分析是用来检验3组或者3组以上的数据间是否有差异的的一种统计分析方法。
比如下面用到的示例数据:
探究三种不同的肥料是否对某种作物的产量有影响。做实验的时候就是将一块地随机划分成若干小块,分别施用3种不同的肥料,最终统计产量。最后用单因素方差分析检验不同组之间的均值是否相等。
单因素方差分析的零假设是不同处理间的均值没有差异,如果计算得到的P值小于0.05,则拒绝原假设,即不同处理间是有差异的
以下内容参考https://www.scribbr.com/statistics/anova-in-r/
使用到的数据也可以在上面的链接处获取。
第一步是读入数据
代码语言:javascript复制
df<-read.csv("one_way_anova/crop.data.csv",header=T)
head(df)
df$fertilizer<-as.factor(df$fertilizer)
summary(df)
数据是3种肥料,每种肥料30个数据
单因素方差分析
代码语言:javascript复制> one.way<-aov(yield~fertilizer,data = df)
> summary(one.way)
Df Sum Sq Mean Sq F value Pr(>F)
fertilizer 2 6.07 3.0340 7.863 7e-04 ***
Residuals 93 35.89 0.3859
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
p值小于0.05,不同肥料对应的产量是有差异的。具体谁和谁之间是有差异的还不知道,还需要借助多重检验。
代码语言:javascript复制tukey.test<-TukeyHSD(one.way)
plot(tukey.test)
image.png
上图的线只要跨0那条虚线说明没有差异。根据上图可以看出肥料2和和肥料1对应的产量没有差异,3和2,3和1有差异。
接下来用箱线图展示结果
代码语言:javascript复制library(ggplot2)
ggplot(df,aes(x=fertilizer,y=yield))
geom_boxplot(aes(fill=fertilizer),notch=T,width=0.5)
geom_jitter(width=0.1) theme_bw()
theme(legend.position = "top")
image.png
最终得出的结论就是这三种肥料中3的效果最好。