拓端数据tecdat|R语言多重比较示例:Bonferroni校正法和Benjamini & Hochberg法
原文鏈接:http://tecdat.cn/?p=21825
原文出處:拓端數據部落公眾號
假設檢驗的基本原理是小概率原理,即我們認為小概率事件在一次試驗中實際上不可能發生。
多重比較的問題
當同一研究問題下進行多次假設檢驗時,不再符合小概率原理所說的“一次試驗”。如果在該研究問題下只要有檢驗是陽性的,就對該問題下陽性結論的話,對該問題的檢驗的犯一類錯誤的概率就會增大。如果同一問題下進行n次檢驗,每次的檢驗水準為α(每次假陽性概率為α),則n次檢驗至少出現一次假陽性的概率會比α大。假設每次檢驗獨立的條件下該概率可增加至
常見的多重比較情景包括:
多組間比較
多個主要指標
臨床試驗中期中分析
亞組分析
控制多重比較謬誤(Familywise error rate):Bonferroni矯正
Bonferroni法得到的矯正P值=P×n
Bonferroni法非常簡單,它的缺點在于非常保守(大概是各種方法中最保守的了),尤其當n很大時,經過Bonferroni法矯正后總的一類錯誤可能會遠遠小于既定α。
控制錯誤發現率:Benjamini & Hochberg法
簡稱BH法。首先將各P值從小到大排序,生成順序數
排第k的矯正P值=P×n/k
另外要保證矯正后的各檢驗的P值大小順序不發生變化。
怎么做檢驗
R內置了一些方法來調整一系列p值,以控制多重比較謬誤(Familywise error rate)或控制錯誤發現率。
Holm、Hochberg、Hommel和Bonferroni方法控制了多重比較謬誤(Familywise error rate)。這些方法試圖限制錯誤發現的概率(I型錯誤,在沒有實際效果時錯誤地拒絕無效假設),因此都是相對較保守的。
方法BH(Benjamini-Hochberg,與R中的FDR相同)和BY(Benjamini & Yekutieli)控制錯誤發現率,這些方法試圖控制錯誤發現的期望比例。
請注意,這些方法只需要調整p值和要比較的p值的數量。這與Tukey或Dunnett等方法不同,Tukey和Dunnett也需要基礎數據的變異性。Tukey和Dunnett被認為是多重比較謬誤(Familywise error rate)方法。
要了解這些不同調整的保守程度,請參閱本文下面的兩個圖。
關于使用哪種p值調整度量沒有明確的建議。一般來說,你應該選擇一種你的研究領域熟悉的方法。此外,可能有一些邏輯允許你選擇如何平衡犯I型錯誤和犯II型錯誤的概率。例如,在一項初步研究中,你可能希望保留盡可能多的顯著值,來避免在未來的研究中排除潛在的顯著因素。另一方面,在危及生命并且治療費用昂貴的醫學研究中,得出一種治療方法優于另一種治療方法的結論之前,你應該有很高的把握。
具有25個p值的多重比較示例
### --------------------------------------------------------------
### 多重比較示例
### --------------------------------------------------------------
Data = read.table(Input,header=TRUE)
按p值排序數據
Data = Data[order(Data$Raw.p),]
檢查數據是否按預期的方式排序
執行p值調整并添加到數據框
Data$Bonferroni =
p.adjust(Data$Raw.p,
method = "bonferroni")
Data$BH =
p.adjust(Data$Raw.p,
method = "BH")
Data$Holm =
p.adjust(Data$ Raw.p,
method = "holm")
Data$Hochberg =
p.adjust(Data$ Raw.p,
method = "hochberg")
Data$Hommel =
p.adjust(Data$ Raw.p,
method = "hommel")
Data$BY =
p.adjust(Data$ Raw.p,
method = "BY")
Data
繪制圖表
plot(X, Y,
xlab="原始的p值",
ylab="矯正后的P值"
lty=1,
lwd=2
調整后的p值與原始的p值的圖為一系列的25個p值。虛線表示一對一的線。
5個p值的多重比較示例
### --------------------------------------------------------------
### 多重比較示例,假設示例
### --------------------------------------------------------------
Data = read.table(Input,header=TRUE)
執行p值調整并添加到數據幀
Data$Bonferroni =
p.adjust(Data$Raw.p,
method = "bonferroni")
Data$BH =
signif(p.adjust(Data$Raw.p,
method = "BH"),
4)
Data$Holm =
p.adjust(Data$ Raw.p,
method = "holm")
Data$Hochberg =
p.adjust(Data$ Raw.p,
method = "hochberg")
Data$Hommel =
p.adjust(Data$ Raw.p,
method = "hommel")
Data$BY =
signif(p.adjust(Data$ Raw.p,
method = "BY"),
4)
Data
繪制(圖表)
plot(X, Y,
type="l",
調整后的p值與原始p值在0到0.1之間的一系列5個p值的繪圖。請注意,Holm和Hochberg的值與Hommel相同,因此被Hommel隱藏。虛線表示一對一的線。
最受歡迎的見解
1.Matlab馬爾可夫鏈蒙特卡羅法(MCMC)估計隨機波動率(SV,Stochastic Volatility) 模型
2.基于R語言的疾病制圖中自適應核密度估計的閾值選擇方法
3.WinBUGS對多元隨機波動率模型:貝葉斯估計與模型比較
4.R語言回歸中的hosmer-lemeshow擬合優度檢驗
5.matlab實現MCMC的馬爾可夫切換ARMA – GARCH模型估計
6.R語言區間數據回歸分析
7.R語言WALD檢驗 VS 似然比檢驗
8.python用線性回歸預測股票價格
9.R語言如何在生存分析與Cox回歸中計算IDI,NRI指標
▍關注我們
【大數據部落】第三方數據服務提供商,提供全面的統計分析與數據挖掘咨詢服務,為客戶定制個性化的數據解決方案與行業報告等。
▍咨詢鏈接:http://y0.cn/teradat
▍聯系郵箱:3025393450@qq.com
總結
以上是生活随笔為你收集整理的拓端数据tecdat|R语言多重比较示例:Bonferroni校正法和Benjamini & Hochberg法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招行腾讯新闻卡年费标准是什么 这样可以免
- 下一篇: chm文件编辑方法