方差分析(analysis of variance , ANOVA ):
用于 两个或两个以上 样本均数的比较 , 还可分析两个或多个研究因素的 交互作用 以及回归方程的 线性假设检验
等。(涉及总变异、组内变异、组间变异、自由度)
基本思想:
把全部观察值间的变异 —— 总变异按设计和需要分解成两个或多个组成部分,再作分析。
理解:
比较抽样样本的均数,来对总体均数的比较。
方差分析的前提条件
1、各样本是相互独立的随机样本;
2、均服从 正态分布(Shapiro-Wilk检验) ;
3、 各样本的总体方差相等 ,即 方差齐性(Bartlett 检验、Levene 检验);
方差分析基础
•因素(factor):通常把影响试验考察指标的条件或要素称为因素,可以是单因素,也可以是多因素。如高三学生的性别;研究养殖日增重量时,品种、饲料、投喂方法等等就是其影响因素。
•水平(level):每一个因素根据其质或量所分的等级或所处的状态。如高三性别中男、女;研究饲料对养殖日增重的影响,不同的投喂量成为不同的水平。
观察值:***
完全随机设计 (completely randomized design )
是将同质的受试对象随机地分配到各处理组 , 再观察其实验效应 。完全随机设计是最常见的研究单因素两水平或多水平的
实验设计方法 ,属 单向方差分析(oneway ANOVA)
多因素方差分析不仅考虑多个控制变量独立作用,还要分析控制变量的交互作用以及随机变量的作用。相关的统计结果解析同于单因素方差分析。
多样本均数的两两比较
1.多个样本均数经方差分析后 , 若有统计学意义 ,需用两两比较的方法进一步确定哪些均数不等。
2. 多重比较的方法有很多种 , 常用的有SNK 法(每两个均数间) 、Bonferroni 法 、 Dunnett 法 (k-1实验组与对照组均数)、LSDt 法等
多重比较检验 ——控制变量的不同水平对观测变量的影响程度如何实现对各个水平下观测变量总体均值的逐对比较。
R 实践
library(reshape2)
library(agricolae)
data = read.table("file.txt", header = T, sep = ",")
> head(data)
normal middle high
1 332.96 253.21 232.55
2 297.76 235.87 217.71
3 312.57 269.30 261.15
4 295.47 258.90 220.72
5 284.25 254.39 219.46
## 正态分布检验Shapiro-Wilk检验
for (i in 1:ncol(data)) {
tmp = shapiro.test(data[,i])
if (tmp$p.value < 0.05) {
quit()
}else{
tmp.value = paste(colnames(data)[i], tmp$p.value, sep = " ")
print(tmp.value)
}
}
## 方差齐次性检验bartlett检验
tran.data = as.data.frame(t(data))
tran.data$group = colnames(data)
tran.data = melt(t(data), id='group')
tmp = bartlett.test(value~Var1,data=tran.data)
#bartlett.test(tran.data$value, tran.data$Var1)
if (tmp$p.value < 0.05) {
quit()
}
## 方差分析
npk.aov = aov(value~Var1,data=tran.data)
summary(npk.aov)
#oneway.test(value~Var1,data=tran.data)
### 多重比较检验
## SNK 法 : 属于多重极差检验 ,用于每两个均数间的比较 。
out = SNK.test(npk.aov, "Var1")
print(out$groups)
## 多重t检验:检验两两水平下的样本之间的差异是否明显
out2 = pairwise.t.test(tran.data$value, tran.data$Var1)
print(out2$p.value)