ANOVA變異數分析是用來檢定“2組以上”類別平均數之間是否有顯著差異(significant differences),自變數為類別變項,依變數為連續變項。(2組則使用T-test)
為何是比較平均數,卻叫做變異數分析呢?
這是因為實際在檢定平均數的統計顯著性時,關心的就是變異數(Variance)的部分,計算全體樣本在依變數的“變異情形”(組內變異SSW、組間變異SSB)。
我們希望SSW愈小愈好,SSB愈大愈好
在進行變異數分析之前,需要滿足3個假設條件:
1.常態性:母體常態分布(高斯分布),形狀長得不一樣當然就比不出什麼
2.獨立性:樣本一定是獨立的簡單隨機抽樣,不能刻意在A組抽比較高的幾個,或在B組抽比較低的幾個,簡單隨機抽樣表示抽出來的樣本也是常態
3.同質性:造成變異的只有組平均數,而不是變異數,所以要求變異數同質
先透過plot簡單判斷,看出透過花瓣的寬度和長度就能區分出三種種類的iris
plot(iris)
iris中的花瓣和花萼長度寬度是否是常態分配,常態性檢定可以使用常態機率圖或是常態性檢定來檢定
qqnorm畫出常態機率圖,qqline畫出最佳斜線
看圖判斷花萼長度和花萼寬度符合常態分配的可能性最大
par(mfrow = c(2,2))
qqnorm(iris$Sepal.Length); qqline(iris$Sepal.Length,col = "Red")
qqnorm(iris$Sepal.Width);qqline(iris$Sepal.Width,col = "Blue")
qqnorm(iris$Petal.Length); qqnorm(iris$Petal.Width)
先對花萼長度使用Shapiro-Wilk檢定,p-value = 0.01018 < 0.05,顯著,表示拒絕常態虛無假設,接著畫出直方及密度圖來看看,雖然從qqnorm圖判斷應該是常態,但是還是需要透過檢定和圖來判定,所以我們不使用花萼長度來判斷三種種類的iris
shapiro.test(iris$Sepal.Length)
##
## Shapiro-Wilk normality test
##
## data: iris$Sepal.Length
## W = 0.97609, p-value = 0.01018
hist(iris$Sepal.Length,probability = TRUE)
curve(dnorm(x,mean(iris$Sepal.Length,sd(iris$Sepal.Length))),add = TRUE,col = "Red")
接著對花萼寬度使用Shapiro-Wilk常態性檢定,p-value = 0.1012 > 0.05,不顯著,不拒絕常態虛無假設,所以決定使用花萼寬度來判斷種類
shapiro.test(iris$Sepal.Width)
##
## Shapiro-Wilk normality test
##
## data: iris$Sepal.Width
## W = 0.98492, p-value = 0.1012
hist(iris$Sepal.Width,probability = TRUE)
curve(dnorm(x,mean(iris$Sepal.Width),sd(iris$Sepal.Width)),add = TRUE,col = "Blue")
檢定三種種類的花瓣寬度平均數是否有明顯的差異
H0:µ0 = µ1 = µ3,假設三組的平均數相等
H1:至少有一種種類平均數與其他種類不相等
ANOVA表顯示p-value < 2e-16,即拒絕H0,各組間的平均數有顯著差異
summary(aov(iris$Petal.Width ~ iris$Species))
## Df Sum Sq Mean Sq F value Pr(>F)
## iris$Species 2 80.41 40.21 960 <2e-16 ***
## Residuals 147 6.16 0.04
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
當知道組間有顯著差異時,卻不知道是哪“2”組平均數有顯著差異而造成顯著,事後比較有許多的檢測法,Bonferroni、Scheffe、LSD、Duncan、TUKEY等等,如何在適當的實驗或研究中使用正確的檢測法是需要多多思考的。
H0:µ1 = µ2、H0:µ1 = µ3、H0:µ2 = µ3
µ1:setosa平均數、µ2:versicolor平均數、µ3:virginica平均數
結果顯示3組之間都達到顯著水準,全部H0都拒絕,即µ2>µ1、µ3>µ1、µ3>µ2有差異,表示組間平均數差異是由3組倆倆之間所造成
pairwise.t.test(iris$Petal.Width,iris$Species,
p.adjust.method = "bonferroni")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: iris$Petal.Width and iris$Species
##
## setosa versicolor
## versicolor <2e-16 -
## virginica <2e-16 <2e-16
##
## P value adjustment method: bonferroni
setosa <- iris[which(iris$Species == "setosa"),]
versicolor <- iris[which(iris$Species == "versicolor"),]
virginica <- iris[which(iris$Species == "virginica"),]
mean(setosa$Petal.Width);sd(setosa$Petal.Width)
## [1] 0.246
## [1] 0.1053856
mean(versicolor$Petal.Width);sd(versicolor$Petal.Width)
## [1] 1.326
## [1] 0.1977527
mean(virginica$Petal.Width);sd(virginica$Petal.Width)
## [1] 2.026
## [1] 0.2746501
為了驗證,筆者自己使用了Bonferroni算信賴區間,3組的信賴區間都是正數,即 顯著差異
H0:µ1 = µ2 (0.9808,1.179)
H0:µ1 = µ3 (1.6809,1.879)
H0:µ2 = µ3 (0.6008,0.7991)
當ANOVA之F檢定顯著時,如何選擇事後比較法是很重要的,若研究屬於初步探索階段,則傾向於盡量找出變異,而選擇較寬鬆(容易達到顯著)的比較法(Duncan法等等);若是屬於驗證性質的研究,就應考慮較較嚴苛(不容易達到顯著)的比較法(Schffe法等等)。
還有一個問題,通常F檢定顯著時,照理來說就算是最嚴苛的事後比較法應該會顯著,若當事後比較不顯著時,原因大多數來自於某些類別樣本數太少(導致標準誤膨脹),或是組間差異量不足(即平均數差異太小),也就是說,如果差異量很大,就算是小樣本也會顯著;反之如果是大樣本,小差異量也會顯著。