R語言數據分析與挖掘(第五章):方差分析(1)——單因素方差分析
- 2019 年 12 月 13 日
- 筆記
方差分析(analysis of variation,簡寫為ANOVA)又稱變異數分析或F檢驗,用於兩個及兩個以上樣本均值差別的顯著性檢驗,從函數的形式看,方差分析和回歸都是廣義線性模型的特例,回歸分析lm()也能作方差分析。其目的是推斷兩組或多組數據的總體均值是否相同,檢驗兩個或多個樣本均值的差異是否有統計學意義。方差分析的基本思路為:將試驗數據的總變異分解為來源於不同因素的相應變異,並作出數量估計,從而明確各個變異因素在總變異中所佔的重要程度;也就是將試驗數據的總變異方差分解成各變因方差,並以其中的誤差方差作為和其他變因方差比較的標準,以推斷其它變因所引起的變異量是否真實的一種統計分析方法。把對試驗結果發生影響和起作用的自變數稱為因素(factor),即我們所要檢驗的對象。如果方差分析研究的是一個因素對於試驗結果的影響和作用,就稱為單因素方差分析。因素的不同選擇方案稱之為因素的水平(level of factor)或處理(treatment)。因素的水平實際上就是因素的取值或者是因素的分組。樣本數據之間差異如果是由於抽樣的隨機性造成的,稱之為隨機誤差;如果是由於因素水平本身不同引起的差異,稱之為系統誤差。
單因素方差分析概述
單因素方差分析是指對單因素試驗結果進行分析,檢驗因素對試驗結果有無顯著性影響的方法。單因素方差分析是用來檢驗多個平均數之間的差異,從而確定因素對試驗結果有無顯著性影響的一種統計方法。對於完全隨機設計試驗且處理數大於2時可以用單因素方差分析(等於2 時用t檢驗)。離差平方和的分解公式為:SST(總和)=SSR(組間)+SSE(組內),F統計量為MSR/MSE,MSR=SSR/k-1,MSE=SSE/n-k。其中SST為總離差、SSR為組間平方和、SSE為組內平方和或殘差平方和、MSR為組間均方差、MSE為組內均方差。
函數介紹
對於非正態分布的數據,一般採用Levenc檢驗法,且該檢驗同樣適用於正態數據的檢驗。R中進行Levene檢驗的函數為leveneTest(),該函數包合在car 包中,使用前需要載入。
函數leveneTest()的基本將寫格式為;
leveneTest(y, data...)
其中,y指定用於方差分析的模型公式, data指定用於檢驗的數據對象。
R中有多種方法實現方差分析,如利用函數aov()、anova()和onewey.test()進行分析,下面將對這些函數的具體用法進行詳細介紹。
首先介紹函數oneway.test(),該函數的基本書寫格式為:
onexay.test(formula, data, subset, na.action, vat .equal=FALSE)
參數介紹:
Fomula:指定用於方差分析的模型公式,一般是以「Ihs ~ rhs"的形式,在單因素方差分析中即為「X~A」的形式,X表示樣本觀測值,A表示影響因素:
Data:指定用於分析的數據對象;
Subset:一個向量,指定參數data中需要被包含在模型中的觀測數據;
Na.action: 一個函數,指定缺失數據的處理方法,若為NULL,則使用函數
na.omit()刪除缺失數據;
Var.equal:邏輯值,指定是否將樣本觀測位中的方差視為相等,若為TRUE,
則執行單因素方差分析中平均值的簡單F檢驗,若為FALSE,則執行Welch (1951)的近似方法,默認位為FALSE。
綜合案例:不同治療方法下膽固醇降低效果的差異性分析
下面利用R語言包multcomp中數據集cholcsterol進行單因素方差分析,首次使用該包需要下載並載入:
>install,packages ("multcomp" ) >library (multcomp)
數據集cbolesterol是關於不同治療方法的膽固醇降低效果的臨床數據,共有50行觀測值和兩列變數,列變數分別是治療方法(trt) 和膽固醇降低情況(response),變數trt中共有5個水平,分別用1time.2timnes, 4times, dnugD 和drugE表示。數據的基水情況如下:
> data(cholesterol) > dim(cholesterol) [1] 50 2 > head(cholesterol) trt response 1 1time 3.8612 2 1time 10.3868 3 1time 5.9059 4 1time 3.0609 5 1time 7.7204 6 1time 2.7139
boxplot(response~trt,data=cholesterol,col=c(2:6))

下面對數據進行方差齊性檢驗:
> library(car) > leveneTest(response~trt,data=cholesterol) Levene's Test for Homogeneity of Variance (center = median) Df F value Pr(>F) group 4 0.0755 0.9893 45
輸出結果顯示,p值為0.9893,大於給定的顯著性水平0.05,故不能拒絕原假設,即認為不同水平下的數據是等方差的。
下面利用函數oneway.test()做方差分析來比較不同治療方法的膽固醇降低效果是否有差異顯著。
> oneway.test(response~trt,data=cholesterol,var.equal = TRUE) One-way analysis of means data: response and trt F = 32.433, num df = 4, denom df = 45, p-value = 9.819e-13
F = 32.433,對應的p值小於0.05,故拒絕原假設。
上面的分析還可以用aov函數實現。aov函數的書寫格式為:
aov(formula, data = NULL, projections = FALSE, qr = TRUE, contrasts = NULL, ...)
> fit<-aov(response~trt,data=cholesterol) > summary(fit) Df Sum Sq Mean Sq F value Pr(>F) trt 4 1351.4 337.8 32.43 9.82e-13 *** Residuals 45 468.8 10.4 --- Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1
上面結果中Residuals表示殘差。檢驗結果查看trt對於的行,同樣得到F = 32.43,對應的p值小於0.05,故拒絕原假設。
最後上面結果還能能利用anova()函數實現。
> anova(lm(response~trt,data=cholesterol)) Analysis of Variance Table Response: response Df Sum Sq Mean Sq F value Pr(>F) trt 4 1351.37 337.84 32.433 9.819e-13 *** Residuals 45 468.75 10.42 --- Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1