組間差異的多重比較

2021-02-20 數據分析和應用

前面我們一起學習了如何進行多組獨立樣本的差異比較,包括參數和非參數的檢驗方法。但備擇假設為組間的差異不全相等,如拒絕原假設的話,通常需要進行組間差異多重比較,即兩兩比較。針對不同的設計和數據特徵,我們可以選擇合適的方法,如圖1所示。

圖1 多重比較的方法

以下,我們將接著方差分析和非參數檢驗的例子進一步介紹在R中實現組間差異的多重比較。

因為我們要做的是多組獨立樣本參數檢驗後的均數間的兩兩比較,我們先簡單回顧完全隨機設計的方差分析這個例子,詳情可見《方差分析》。

某臨床實驗中心想測試五種藥物降低膽固醇的療效,將50名參與者隨機分成5組,每組分別接受一種藥物,數據資料如表1所示,變量包括使用的藥物類型(trt,分組變量)和膽固醇的降低值(response,反應變量)。前文進行方差分析,結果顯示P<0.05,拒絕原假設,不能認為五個組的均數是相等。

表1 方差分析的數據

由此,我們需要進一步做均數間的兩兩比較。均數間的兩兩比較檢驗方法有的需要直接使用數據,有的則使用模型方差。下面為大家介紹幾種常見的檢驗方法。

Bonferroni檢驗用途最廣,幾乎可用於任何多重比較的情形,可用agricolae包中LSD.test() 或基礎包中pairwise.t.test()函數實現 。其基本思想是採用α'=α/n作為新的檢驗水準,其中,n為兩兩比較次數, α為累積I類錯誤的概率。

我們首先使用agricolae包中LSD.test()函數,注意將P值的調整方法p.adj設置為"bonferroni"。代碼和結果如下:

library(agricolae)
bon <- LSD.test(aov,"trt", p.adj="bonferroni")
bon$groups  #顯示歸類結果
plot(bon)

圖2 LSD.test()函數設置Bonferroni法調整P值的結果

圖3 Groups and Range圖示

圖2和圖3顯示了比較的結果,兩組間有相同的字母表示差異不顯著,兩組間字母不同表示差異顯著。例如本例,E藥物組只有單獨字母a,與其他4組皆不同,代表E藥物組分別與其他4個藥物組的療效有顯著差異。而D藥物組與C藥物組有相同的b,與B藥物組和A藥物組無相同字母,表示D藥物組與C藥物組差異不顯著,D藥物組分別與B藥物組和A藥物組間有顯著差異。

我們還可以用基礎包中的pairwise.t.test()函數做Bonferroni檢驗。代碼和結果如下:

attach(a2)
pairwise.t.test(response,trt, p.adj = "bonferroni")
detach()

圖4 pairwise.t.test()函數運行結果(bonferroni檢驗)

結果如圖4所示,可以看出,結果與圖2、圖3一致。

Bonferroni檢驗比較保守,在組數較多時需要比較的次數較多,校正後的檢驗水準過小,有時很難達到。Holm是一種常用的修正Bonferroni過保守的方法。將p.adj設置為"holm"即可。圖5的結果顯示,相對於校正之前的Bonferroni法,holm的結果沒那麼嚴格,A藥物組與B藥物組、B藥物組與C藥物組、C藥物組與D藥物組間的P值接近檢驗水準。

圖5 pairwise.t.test()函數運行結果(holm法)

 LSD-t檢驗,也叫最小顯著性差異,由agricolae包中的LSD.test()函數實現。依據t分布,是t檢驗的簡單變形。LSD檢驗適用於在專業上有特殊意義的樣本均數間的比較,是在設計之初,就已明確要比較某幾個組均數間是否有差異。LSD法側重於減小II類錯誤,但有增大I類錯誤(假陽性)的可能。代碼和結果如下:

library(agricolae)
L <- LSD.test(aov,"trt", p.adj = "none")
L$groups ##顯示歸類結果

圖6 LSD-t檢驗結果

LSD-t檢驗不像Bonferroni檢驗那麼保守,所以結果有所不同。如圖6所示,各藥物組對應的指示字母均不同,表明各藥物組的療效有顯著差異。

Dunnett-t檢驗由multcomp包中glht()函數實現,適用於k-1個試驗組與一個對照組均數差異的多重比較。這種比較也是在設計階段就確定了。

library(multcomp)
D<-glht(aov, linfct = mcp(trt = 'Dunnett'), alternative = 'two.side')
summary(D)

圖7 Dunnett-t檢驗結果

如圖7所示,模型默認第一組為對照組,並依次對比了其他組和它的差異,發現B組與A組的療效差異不顯著,而C、D、E藥物組分別與A藥物組的療效有顯著差異。

Tukey HSD檢驗由基礎包中的Tukey HSD()函數或multcomp包中的glht()函數實現,用於各組樣本均數間的全面比較,適用於組間例數相等的情況。代碼和結果如下:

TukeyHSD(aov)
plot(TukeyHSD(aov))
###或者##
library(multcomp)
T<-glht(aov, linfct = mcp(trt = "Tukey"))
summary(T)
plot(T)

圖8 Tukey檢驗結果1

圖9 效應之差的置信區間

TukeyHSD()和glht()函數的運行結果一致,圖8和圖9結果顯示,除了B-A、C-B、D-C外,其他各組間的差異均具有統計學意義。

Scheffe檢驗由agricolae包中的scheffe.test ()函數實現。各組樣本數相等或不等均可以使用,但是以各組樣本數不相等時使用較多。Scheffe也是通過指示字母的相同與否判定二者間差異是否有統計學意義,不顯示兩兩比較的P值。代碼如下:

library(agricolae)
scheffe.test(aov,"trt", console=TRUE) 

SNK-q檢驗由agricolae包中的SNK.test() 函數實現,適用於多個樣本均數兩兩之間的全面比較,與LSD-t檢驗相似,可能存在假陽性。代碼如下:

library(agricolae)
S<-SNK.test(aov,"trt")#console=T表示輸出結果

在數據不滿足正態分布等條件的情況下,組間差異性比較通常會選擇非參數檢驗。同樣的,多組樣本的非參數檢驗也存在無法進行組間兩兩比較的問題。在前文《非參數檢驗》中,我們分析了這樣一個案例:

15隻家兔按體重隨機分為三組,分別注入無菌生理鹽水,0.05μg/g和0.10μg/g劑量的DON進行實驗處理,實驗期滿後測定關節衝洗液中腫瘤壞死因子(TNF-α)的水平(μg/L),數據如表2,比較這三組家兔關節衝洗液TNF-α測定結果差異是否具有統計學意義。

表2 多組獨立樣本數據(data4)

group

TNF-α(μg/L)

0(對照組)

0.218

1(低劑量組)

0.253

2(高劑量組)

0.695

我們採用多組獨立樣本數據的K-W平均秩檢驗,結果顯示拒絕原假設,可以認為這三組家兔關節衝洗液TNF-α測定結果差異有統計學意義。

多組獨立樣本非參數檢驗後組間差異的兩兩比較可以用pgirmess包中的kruskalmc ()函數或PMCMR包中的posthoc.kruskal.nemenyi.test()函數實現。我們先看kruskalmc ()函數。代碼和結果如下:

library(pgirmess)
kruskalmc(data4$TNF,data4$group)
kruskalmc(data4$TNF,data4$group, probs=0.001) ##調整檢驗水準

kruskalmc()函數以邏輯判斷的方式表示是否有顯著性差異,如圖10所示,檢驗水準為0.05時,僅高劑量組和對照組間差異有統計學意義。採用更嚴格的檢驗水準後,各組間不存在顯著性差異。

我們還可以用PMCMR包中的posthoc.kruskal.nemenyi.test()函數實現,代碼和結果如下:

library(PMCMR)
posthoc.kruskal.nemenyi.test(data4$TNF,data4$group)

如圖11所示,結果與圖10檢驗水準為0.05時的結果一致,高劑量組和對照組間差異有統計學意義。

如果上一例中的設計變為隨機區組設計,即如圖12中矩陣數據(行為區組,列為處理組),如果在Friedman M檢驗後需要兩兩比較,可以用PMCMR包中的posthoc.friedman.nemenyi.test ()函數實現,數據和代碼如下:

library(PMCMR)
posthoc.friedman.nemenyi.test(data4.1)

小結

組間差異多重比較的方法較多,同一種方法在R中又有一到多種實現方式,因此,實際應用中我們需要根據特定的目的、設計和數據的特徵來選擇最適合的分析方法。那麼,看完上面的介紹,對於手上的數據你有一些思路了嗎?如果您需要協助分析,歡迎聯繫我們(關於我們----業務介紹)。

以上案例數據,可在公眾號輸入「多重比較」獲取~

參考來源 :

1. 孫振球,徐勇勇.醫學統計學:第4版[M].北京:人民衛生出版社.2014.

2. 方積乾,徐勇勇,陳峰,等.衛生統計學:第7版[M].北京:人民衛生出版社.2012.

3. [美]Robert I. Kabacoff著.R語言實戰(第2版) [M].王小寧等譯.北京:人民郵電出出版社.2016.

製作:孟浩蓉、蔡敏

初審:何冠豪、胡建雄

審核:肖建鵬、劉濤

指導:馬文軍

《數據分析和應用》致力於為全國各地公共衛生與醫學工作者(機構)提供專業可靠的統計諮詢、研究設計、數據分析、高通量測序數據和序列分析、調研報告等服務(詳細可見公眾號菜單欄),歡迎有需要的人員和機構與我們聯繫。

郵箱:statistic@gdiph.org.cn

相關焦點

  • 方差分析中兩兩多重比較方法的含義及如何正確選擇
    Bonferroni用途最廣,幾乎可用於任何多重比較的情形,包括組間例數相等或不等、成對兩兩比較或綜合多重比較等。S-N-K:即 Student Newman Keuls 法,是應用最廣泛的一種兩兩比較方法。它採用Student-Range 分布進行所有組均值間的配對比較。該方法保證在H0真正成立時總的α水準等於實際設定值,即控制了一類錯誤。
  • 要分析組間的差異,該如何選擇正確的統計方法?
    差異分析主要用於:(1)判斷因變量在兩組或多組之間的統計學差異,各組之間可以是獨立的,也可以是非獨立的;(2)如果多組之間存在差異,進一步開展兩兩比較,分析差異來源。 比如,分析不同醫療機構醫生收入水平的差異。
  • 微生物組間差異分析之LEfSe分析
    LEfSe分析,可以分析組間菌群差異,找出各組間差異的微生物種類,有助於開發biomaker等研究,因此LEfSe分析在微生物相關文章中經常出現
  • Stata: 如何檢驗分組回歸後的組間係數差異?
    連玉君, 2017, 如何檢驗分組回歸後的組間係數差異?, 鄭州航空工業管理學院學報 35, 97-109. PDF 原文下載問題背景因為,從 -Table 1- 的結果來看, married, south, hours 等變量在兩組之間的差異都比較明顯。
  • 基於SPSS軟體實現多組比較的卡方檢驗及兩兩比較
    再送兩個介紹多組間比較的統計分析:數值變量如果服從正態分布,採用均數±標準差進行統計描述,採用方差分析進行組間比較,如果組間差異有統計學意義,進一步採用LSD法(也可以是其它方法)進行兩兩比較。如果不服從正態分布,採用中位數(四分位數間距)進行統計描述,組間比較採用非參數檢驗(Kruskal-Wallis秩和檢驗),當組間總的有統計學差異,進一步採用Dunn法(也可以是其它方法)進行多重比較。
  • 一張圖搞明白分類資料的組間比較方法
    分類資料的組間比較非常簡單,不像定量資料那樣,還得看正態性、方差齊性這麼煩人的過程。唯一需要看的就是結局是什麼樣子。所以,如果說定量資料你能用錯,你還可以說,你不會做正態性檢驗、不會方差齊性檢驗。那麼如果分類資料的組間比較你用錯的,真的沒有什麼理由可以找,所以你真的沒有任何犯錯的理由。
  • 何為「組間同質,組內異質」
    一般情況下,合作學習進行分組時要按照「組間異質,組內同質」的原則進行。所謂組內異質,就是小組成員在性格、成績、動手能力和表達能力、家庭等方面有一定的差異性和互補性。而組間必須同質,即小組間儘量減少差異,使其各方面情況相當,儘量使各小組之間的競爭公平、合理。合作式教學中的學生分組要注意科學合理。
  • 擴增子圖表解讀2散點圖:組間整體差異分析(Beta多樣性)
    在宏基因組領域,散點圖常用於展示樣品組間的Beta多樣性,常用的分析方法有主成分分析(PCA),主坐標軸分析(PCoA/MDS)和限制條件的主坐標軸分析(CPCoA/CCA/RDA)。Beta多樣性Beat多樣性是生態學概念,專指不同組或生態位間物種組成的差異。
  • 卡方檢驗和精確概率法及兩兩比較
    看過許多統計教程,這篇是我最推薦的介 紹數值變量如果服從正態分布,採用均數±標準差進行統計描述,採用方差分析進行組間比較,如果組間差異有統計學意義,進一步採用LSD法(也可以是其它方法)進行兩兩比較。
  • 組間休息的奧秘!你還不知道?
    近日 看到一研究指出,組間的休息時間長,對增加最大肌力與肌肥大有更好的效果。這好像和傳統中的有些不一樣!  一起來看看吧!不是說越努力越幸運嗎?研究找來21位有重量訓練經驗的年輕人,隨機分成兩組,一組的組間休息時間為1分鐘(短),另一組的組間休息時間設定為3分鐘(長),且兩組的訓練內容皆相同,也就是每周3次、一個動作3組(共有7個全身性動作)、重複8-12RM。
  • R統計-微生物群落結構差異統計分析
    ,並進行Adonis分析,分析結果賦予grazing.bray,使用bray-curits indexgrazing.bray #查看adonis分析結果 NR.jac=adonis(spe~ depth*grazing,data = group,permutations = 999,method="jaccard") # 不同分組方式交互影響,使用jaccard index### 兩兩比較
  • 手把手教你多組獨立樣本的非參數檢驗及兩兩比較
    再送兩個介 紹數值變量如果服從正態分布,採用均數±標準差進行統計描述,採用方差分析進行組間比較,如果組間差異有統計學意義,進一步採用LSD法(也可以是其它方法)進行兩兩比較。如果不服從正態分布,採用中位數(四分位數間距)進行統計描述,組間比較採用非參數檢驗(Kruskal-Wallis秩和檢驗),當組間總的有統計學差異,進一步採用Dunn法(也可以是其它方法)進行多重比較。我們想比較不同BMI組人群的年齡是否有差異,經正態性檢驗,年齡不符合正態分布,故選用非參數檢驗(Kruskal-Wallis秩和檢驗)。
  • 差異分析、顯著性標記及統計作圖的自動實現R代碼示例
    或者更換為非參數的方法,這裡展示一個針對於非參數檢驗的方法示例,先執行Kruskal-Wallis檢驗比較整體差異,再執行Behrens-Fisher的非參數多重比較查看兩兩差異。本人的很多經驗學自《R語言實戰 第二版》,它的154頁有這一段話。因此,對於非參數的檢驗方法,我也是一直在使用wilcoxon檢驗+p值校正的方法,代替多重比較。
  • 增肌鍛鍊期間,動作的組間休息多長,更有助於肌肉發展?
    正如標題所說,今天筆者帶來一個問題:增肌鍛鍊期間,動作的組間休息多長,更有助於肌肉發展?這個問題對於健身新手而言,可能是無法解答的,有些人說休息1分鐘,有些人說休息5分鐘,還有的人認為,組間休息時間沒有準確說法,因人而異。
  • 基於R語言實現多組獨立樣本的非參數檢驗(Kruskal-Wallis秩和檢驗)及兩兩比較
    介    紹數值變量如果服從正態分布,採用均數±標準差進行統計描述,採用方差分析進行組間比較,如果組間差異有統計學意義
  • R語言 | 差異顯著性檢驗
    我們經常要比較兩組或多組數據是否具有顯著差異,同時我們還會用差異顯著性檢驗識別不同組樣品中具有顯著差異的變量。這篇推文會分別介紹經常使用的差異顯著性檢驗方法在R語言中的實現。方法選擇差異顯著性檢驗具有多種方法,分別針對不同的情況,我們要根據自身情況選擇合適的方法進行分析。
  • 卡方檢驗的多組比較
    類似於對連續型變量做方差分析(ANOVA),當對分類變量的頻數做RxC列聯表(R>2)的卡方檢驗時,如果p<0.05則拒絕零假設,認為至少有兩組頻數分布是有統計學差異的,下一步是確定哪兩組間有統計學差異。
  • 每天學習一點R:43.差異顯著性檢驗
    我們經常要比較兩組或多組數據是否具有顯著差異,同時我們還會用差異顯著性檢驗識別不同組樣品中具有顯著差異的變量。這篇推文會分別介紹經常使用的差異顯著性檢驗方法在R語言中的實現。方法選擇差異顯著性檢驗具有多種方法,分別針對不同的情況,我們要根據自身情況選擇合適的方法進行分析。
  • Bonferroni:Step by Step 攻克兩兩比較
    Bonferroni提出,若每次檢驗水準為α',共進行m次比較,當H0為真時,犯第一類錯誤的累積概率不超過mα',這就是著名的Bonferroni不等式。例如,經方差分析,四個樣本均數間差異有統計學意義,需對任兩個均數進行比較,其比較次數m=6,若α'=0.05,則6次比較均不犯第I類錯誤的概率為(1-0.005)6=0.746,犯第I類錯誤的累積概率為1-0.746=0.0254。