單因素方差分析

  • 單因素方法分析
> library(multcomp)
> attach(cholesterol)
> table(trt)
trt
 1time 2times 4times  drugD  drugE 
    10     10     10     10     10 
> aggregate(response,by=list(trt),FUN=mean) #求各組均值
  Group.1        x
1   1time  5.78197
2  2times  9.22497
3  4times 12.37478
4   drugD 15.36117
5   drugE 20.94752
> aggregate(response,by=list(trt),FUN=sd) #求各組標準差
  Group.1        x
1   1time 2.878113
2  2times 3.483054
3  4times 2.923119
4   drugD 3.454636
5   drugE 3.345003

> fit <- aov(response ~ trt)  #檢測組間差別
> summary(fit)
            Df Sum Sq Mean Sq F value   Pr(>F)    
trt          4 1351.4   337.8   32.43 9.82e-13 ***  #Anova對治療方式(trt)的F檢驗很是顯著(p<0.0001),說明五種療法的效果不一樣
Residuals   45  468.8    10.4                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

#gplots包中的plotmeans()可用來繪製帶有置信區間的組均值圖形
> library(gplots)
> plotmeans(response ~ trt,xlab="Treatment",ylab="Response",main="Mean Plot\nwith 95% CI")
> detach(cholesterol)

  •  多重比較

 雖然ANOVA對各療法的 F 檢驗代表五種藥物治療效果不一樣,可是並無告訴你哪一種療法與其餘療法不一樣,多重比較能夠解決這個問題ide

##TukeyHSD()函數提供了對各組均值差別的成對檢驗
> TukeyHSD(fit)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = response ~ trt)

$trt
                  diff        lwr       upr     p adj
2times-1time   3.44300 -0.6582817  7.544282 0.1380949  #均值差別不顯著(p=0.138)
4times-1time   6.59281  2.4915283 10.694092 0.0003542  #差別很是顯著
drugD-1time    9.57920  5.4779183 13.680482 0.0000003
drugE-1time   15.16555 11.0642683 19.266832 0.0000000
4times-2times  3.14981 -0.9514717  7.251092 0.2050382
drugD-2times   6.13620  2.0349183 10.237482 0.0009611
drugE-2times  11.72255  7.6212683 15.823832 0.0000000
drugD-4times   2.98639 -1.1148917  7.087672 0.2512446
drugE-4times   8.57274  4.4714583 12.674022 0.0000037
drugE-drugD    5.58635  1.4850683  9.687632 0.0030633

> par(las=2)  #旋轉軸標籤
> par(mar=c(5,8,4,2))  #增大左邊界的面積,可以使標籤擺放更美觀
> plot(TukeyHSD(fit))  #圖形中置信包含 0 的療法說明差別不線顯著(p>0.5)
> par(opar)
Hit <Return> to see next plot: par(opar)

 multcomp包中 glht() 函數提供了多重均值比較更爲全面的方法,既適用於線性模型(如本章各例),也適用於廣義線性模型,下面的代碼重現了 Tukey HSD 檢驗,並用不一樣的圖形對結果進行展現函數

> library(multcomp)
> par(mar=c(5,4,6,2))  #增大頂部邊界面積
> tuk <- glht(fit, linfct=mcp(trt="Tukey")) 
> plot(cld(tuk, level=.05),col="lightgrey") 
> par(opar)

1time 和 2itme差別不顯著(有相同的字母a),2times和 4times差別也不顯著(有相同的字母b),而 1time 和 4time 差別顯著(沒有共同的字母)spa

從結果來看,使下降膽固醇的藥物時,一天四次 5mg 劑量比一天一次 20m 劑量效果更佳,也優於候選藥物 drugD ,但藥物 drugE 比其餘的全部藥物和療法都更優code

  • 評估檢驗的假設條件

作單因素方差分析時,咱們假設統計檢驗的數據是知足假設條件:假設因變量服從正態分佈,各組方差相等orm

  • 檢驗正態性假設

使用Q-Q圖來檢驗正態性假設ip

#檢驗因變量服從正態分佈
> library(car)
> qqPlot(lm(response ~ trt, data=cholesterol), 
+        simulate=TRUE, main="Q-Q Plot", labels=FALSE)
Hit <Return> to see next plot:

注意qqPlot()要求 lm() 擬合。如上圖數據落在 95% 的置信區間範圍內,說明知足正態性假設。it

  • 方差齊性檢驗的函數

 Bartlett檢驗table

> bartlett.test(response ~ trt, data=cholesterol)

	Bartlett test of homogeneity of variances

data:  response by trt
Bartlett's K-squared = 0.5797, df = 4, p-value = 0.9653   
# p=0.97 > α 因此接受 H0 方差並無顯著的不一樣
#其餘的檢驗 Fligner-Killeen檢驗(flingner.test())和Brown-Forsythe檢驗(HH包中的hov()函數),結果與 Bartlett 檢驗相同

方差齊性檢驗對離羣點很是敏感,可利用 car 包中 outlierTest() 來檢驗離羣點form

> library(car)
> outlierTest(fit)

No Studentized residuals with Bonferonni p < 0.05
Largest |rstudent|:
   rstudent unadjusted p-value Bonferonni p
19 2.251149           0.029422           NA
#從輸出的結果來看,並無證聽說明膽固醇數據中含有離羣點(當p>1時產生NA)。所以 Q-Q圖,Bartlett檢驗和離羣點檢驗,該數據彷佛能夠用ANOVA模型擬合的很好。
相關文章
相關標籤/搜索