當我們用R語言進行方差分析時,若得出的結論是拒絕H0,則說明n個均值之間有顯著差異。為了知道究竟是哪些組間的均數有差異,就需要對多個均值進行比較,即多重比較。
多重比較的方法有許多,選用何種方法與試驗設計的目的有關。
在試驗設計之初,就已經明确要比較某幾個組均數間是否有差異,稱為事前比較。常用的事前比較方法有LSD、和Dunnett法。
若是在做了整體檢驗後,發現結果存在統計學差異,我們想要知道哪些組間的均數有差異,稱為事後比較。常用的事後比較方法有SNK、Duncan、Turkey、Scheffe法。
Bonferroni法在事前比較和事後比較均适用。
接下來小編就用單因素方差分析的多重比較來為大家介紹這幾種方法。
以R語言multcomp包中的cholesterol數據集為例進行方差分析及其多重比較。
數據介紹:Cholesterol數據集是一個完全随機試驗設計的結果數據,一共50個患者接受降脂治療五種療法中的種療法。其中三種治療方法的治療藥物相同,采用不同劑量,分别是20mg一天一次(1time), 10mg一天兩次(2imes)和5mg一天四次(4ime),剩下的兩種方式(dnugD和dnugE) 代表候選藥物。試驗目的是要研究哪一種藥物療法降脂效果最好。
首先加載數據集
library(multcomp) data(cholesterol) head(cholesterol)
接下來通過方差分析的函數aov( )進行方差分析(做方差分析之前應先做正态性和方差齊性檢驗,在這裡不做叙述)
aov.model<-aov(response~trt,data = cholesterol) aov.model
從結果可以看出F=32.43,p= 9.82e-13<0.05,說明拒絕原假設,說明五種藥物療法的效果不同。
這裡向大家介紹7種多重比較方法。
1.LSD法
LSD法即最小顯著差數檢驗法,該法比較靈敏,是t檢驗的簡單變形,未對檢驗水準做出任何校正,隻是為所有組的均數統一估計了一個更為穩健的标準誤。要求組間的标本數必須相同,适用于被指定組間的比較檢定。
用法:加載agricolae包,使用LSD.test。
語法為:
LSD.test(y, trt, DFerror, MSerror, alpha = 0.05, p.adj=c("none","holm","hommel", "hochberg", "bonferroni", "BH", "BY", "fdr"), …)
其中y為方差分析對象, trt為要進行多重比較的分組變量,p.adj可以選定P值矯正方法。當p.adj="none"時,為LSD法,p.adj="bonferroni"時為Bonferroni法。
代碼:
library(agricolae) LD <- LSD.test(aov.model, "trt", p.adj = "none" ) # 進行多重比較,不矯正P值, LD$groups # 結果顯示:标記字母法 plot(LD) # 可視化展示
從結果可以看出五種治療方法的療效存在差異。
2. Dunnett法
該方法用于多個試驗組與一個對照組間的比較。
用法:加載multcomp使用glht()函數
語法為:
glht(model, linfct, alternative = c("two.sided", "less", "greater"), ...)
其中model為方差分析對象,linfct設置要進行多重比較的分組變量和方法。
代碼:
library(multcomp) DT <- glht(aov.model, linfct = mcp(trt = 'Dunnett'), alternative = 'two.side')#virus是分組變量,方法為Dunnett summary(DT) par(pin=c(3,3)) #設置圖畫輸出大小 plot(DT)#可視化
結果表明:除2times方法與1time治療方法均值差異顯著;其他三種治療方法均與1time治療方法均值差異顯著。從圖中可以看出,置信區間包含0的兩個處理組差異不顯著。
3. SNK法
實質上是根據預先制定的準則将各組均數分為多個子集, 利用Studentized Range分布來進行假設檢驗,控制了犯I類錯誤地概率。推薦優先用Tukey檢驗
用法:加載agricolae包使用SNK.test()函數
語法為:
SNK.test(y, trt, alpha = 0.05, …)
其中y為方差分析對象,trt為要進行多重比較的分組變量
代碼:
library(agricolae) SK<-SNK.test(aov.model,"trt")#進行多重比較,不矯正P值 SK$group#結果顯示:标記字母法 plot(SK)#可視化
程序運行結果與LSD的結果類似。
4. Duncan法(新複極差法)(SSR)
Duncan法計算簡便,尤其是當各組例數不等時。指定一系列的"range"值,逐步進行計算比較得出結論。
用法:加載agricolae包使用duncan.test()函數
語法為:
duncan.test(y, trt, …)
其中y為方差分析對象,trt為要進行多重比較的分組變量
代碼:
library(agricolae) DN <-duncan.test (aov.model,"trt") DN$group#結果顯示:标記字母法 plot(DN)#可視化
程序運行結果與LSD的結果類似。
5. Turkey法
适用于将進行比較的組間完全對等關系的情況,具有相同的标本數是進行檢定的前提。
Tukey的檢驗特點:所有各組的樣本數相等;各組樣本均數之間的全面比較;可能産生較多的假陰性結論。
用法:使用TukeyHSD ()函數
語法為:
TukeyHSD(model)
其中model為方差分析對象
代碼:
TK=TukeyHSD(aov.model) TK plot(TK)#可視化
結果顯示2times方法與1time方法,4times方法與2times方法,drugD方法與4times方法的均值差異不顯著。從圖中可以看出,置信區間包含0的兩個處理組差異不顯著。
6. Scheffe法
适用于需要進行全體組間比較檢定。Scheffe法在需要進行比較的個數多于平均值個數時,比BonfeDoni法更容易得到明确的判斷。另外,在F差檢驗的結果不顯著時,也可以判斷某組間是否存在差異等特點。在各組樣本數相等或不等時均可以,但是以各組樣本數不相等使用較多。
用法:加載agricolae包使用scheffe.test()函數
語法為:
duncan.test(y, trt, …)
其中y為方差分析對象,trt為要進行多重比較的分組變量
代碼:
library(agricolae) SE <-scheffe.test (aov.model,"trt") SE$group#結果顯示:标記字母法 plot(SE)#可視化
結果顯示drugD方法與4times方法,4times方法與2times方法,2times方法與1time方法的均值差異不顯著。
7. Bonferroni法
這個方法是LSD法的改良法,适用于全體組間比較檢定。
将LSD.test中p.adj設置為"bonferroni"即為Bonferroni法。
代碼:
library(agricolae) BI <- LSD.test(aov.model,"trt",p.adj="bonferroni")#進行多重比較,不矯正P值 BI$group#結果顯示:标記字母法 plot(BI)#可視化
程序運行結果與Scheffe類似。
大家發現有些多重比較方法的結果不相同,主要原因是因為各比較方法的使用條件不同。因此,這就需要大家根據試驗設計目的以及各種多重比較方法的使用條件和特點來選擇合适的方法。
大家有什麼疑問可以在評論區留言,我們一起進步!!!
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!