方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法。下面我总结一下R语言如何对常用的方差分析进行操作。
1. 方差分析的假定
上面这个思维导图,也可以看出,方差分析有三大假定:正态,独立和齐次,如果不满足,可以使用广义线性模型或者混合线性模型,或者广义线性混合模型去分析。
「本次我们的主题有:」
2. 数据来源
这里,我们使用的数据来源于R包agridat,它是讲农业相关的论文,书籍中相关的数据收集在了一起,更加符合我们的背景。
包的下载地址:/web/packages/agridat/
「包的介绍」
❝
「agridat: Agricultural Datasets」 Datasets from books, papers, and websites related to agriculture. Example graphics and analyses are included. Data come from small-plot trials, multi-environment trials, uniformity trials, yield monitors, and more.
❞
「包的安装方式:」
("agridat")
3. 单因素方差分析
❝
比如一个处理有A,B,C三个水平,观测值y,想看一下这个处理是否达到显著性水平,这就可以用到方差分析了。
❞
「数据描述:」
❝
Corn yield and nitrogen fertilizer treatment with field characteristics for the Las Rosas farm, Rio Cuarto, Cordoba, Argentina.
❞
data()dat
「数据结构:」
> str(dat)'': 3443 obs. of 9 variables: $ year : int 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 ... $ lat : num -33.1 -33.1 -33.1 -33.1 -33.1 ... $ long : num -63.8 -63.8 -63.8 -63.8 -63.8 ... $ yield: num 72.1 73.8 77.2 76.3 75.5 ... $ nitro: num 132 132 132 132 132 ... $ topo : Factor w/ 4 levels "E","HT","LO",..: 4 4 4 4 4 4 4 4 4 4 ... $ bv : num 163 170 168 177 171 ... $ rep : Factor w/ 3 levels "R1","R2","R3": 1 1 1 1 1 1 1 1 1 1 ... $ nf : Factor w/ 6 levels "N0","N1","N2",..: 6 6 6 6 6 6 6 6 6 6 ...
这里数据有很多列,但是我们要演示单因素方差分析,这里的因素为nf,自变量(Y变量)是yield,想要看一下nf的不同水平是否达到显著性差异。
「建模:」 Y变量:yield 因子:nf
「R中的建模代码:」
m1 = aov(yield ~ nf, data=dat)
- m1为模型保存的名称
- aov为R中的方差分析代码
- yield为数据中的Y变量,这里是yield
- ~,波浪号前面为Y变量,后面为X变量
- nf为分析的因子变量
- dat为数据
「结果:」
> m1 = aov(yield ~ nf, data=dat)> summary(m1) Df Sum Sq Mean Sq F value Pr(>F) nf 5 23987 4797 12.4 6.08e-12 ***Residuals 3437 1330110 387 ---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
结果可以看出,nf之间达到极显著水平,可以进行多重比较。
「方差分析的显著性和多重比较有何关系???」
❝
方差分析,一般会得到显著性(即P值小于0.05,说明显著,小于0.01,说明极显著,大于0.05,说明不显著),显著的意思是因素之间至少有一对水平达到显著性差异,具体是那一对呢?有几对呢?这就需要用到多重比较。所以,多重比较是在方差分析达到显著性之后进行的,只有显著了(P值小于0.05)才有能进行多重比较。多重比较的方法有很多,比如LSD,Tukey,Bonferroni,Holm等等,我们后面系统的介绍。
❞
4. 单因素随机区组
这里区组的设置,可以控制一些环境误差。
「数据描述:」
❝
Switchback trial in dairy with three treatments
❞
data()dat
「数据结构:」
> str(dat)'': 36 obs. of 5 variables: $ cow : Factor w/ 12 levels "C1","C10","C11",..: 1 5 6 7 8 9 10 11 12 2 ... $ trt : Factor w/ 3 levels "T1","T2","T3": 1 2 3 1 2 3 1 2 3 1 ... $ period: Factor w/ 3 levels "P1","P2","P3": 1 1 1 1 1 1 1 1 1 1 ... $ yield : num 34.6 22.8 32.9 48.9 21.8 25.4 30.4 35.2 30.8 38.7 ... $ block : Factor w/ 3 levels "B1","B2