方差分析(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)