false_discovery_control#
- scipy.stats.false_discovery_control(ps, *, axis=0, method='bh')[原始碼]#
調整 p 值以控制偽發現率。
偽發現率 (FDR) 是被拒絕的虛無假設中,實際上為真的預期比例。如果在調整後 p 值降至指定水準以下時拒絕虛無假設,則偽發現率將被控制在該水準。
- 參數:
- 回傳:
- ps_adjusted類陣列 (array_like)
調整後的 p 值。如果在這些值降至指定水準以下時拒絕虛無假設,則偽發現率將被控制在該水準。
註解
在多重假設檢定中,偽發現控制程序通常比家族錯誤率控制程序 (例如 Bonferroni 校正 [1]) 提供更高的檢定力。
如果 p 值對應於獨立檢定(或具有「正回歸依賴性」的檢定 [2]),則拒絕與 Benjamini-Hochberg 調整後的 p 值低於 \(q\) 的虛無假設,可將偽發現率控制在小於或等於 \(q m_0 / m\) 的水準,其中 \(m_0\) 是真實虛無假設的數量,而 \(m\) 是檢定的虛無假設總數。即使對於依賴性檢定,當 p 值根據更保守的 Benjaminini-Yekutieli 程序進行調整時,情況也是如此。
此函數產生的調整後 p 值與 R 函數
p.adjust
和 statsmodels 函數 statsmodels.stats.multitest.multipletests 產生的值相當。對於更進階的多重比較校正方法,請考慮後者。參考文獻
[1] (1,2,3,4,5)Benjamini, Yoav, 和 Yosef Hochberg。「控制偽發現率:一種實用且強大的多重檢定方法。」 皇家統計學會雜誌:B 系列 (方法論) 57.1 (1995): 289-300。
[3]TileStats。FDR - Benjamini-Hochberg 解釋 - Youtube。https://www.youtube.com/watch?v=rZKa4tW2NKs。
[4]Neuhaus, Karl-Ludwig 等人。「以前負荷投與 alteplase 改善急性心肌梗塞的血栓溶解:rt-PA-APSAC 通暢性研究 (TAPS) 的結果。」 美國心臟病學院雜誌 19.5 (1992): 885-891。
範例
我們遵循 [1] 中的範例。
在心肌梗塞中使用重組組織型纖溶酶原激活劑 (rt-PA) 和茴香酰化纖溶酶原鏈激酶激活劑 (APSAC) 已被證明可以降低死亡率。[4] 調查了在 421 名急性心肌梗塞患者的隨機多中心試驗中,新型前負荷投與 rt-PA 與標準 APSAC 方案的效果。
研究中檢定了四個假設族群,最後一個是「血栓溶解治療開始後的心臟和其他事件」。在這一假設族群中,可能需要 FDR 控制,因為如果前負荷治療僅與先前的治療相當,就斷定前負荷治療更好是不合適的。
此族群中 15 個假設對應的 p 值為
>>> ps = [0.0001, 0.0004, 0.0019, 0.0095, 0.0201, 0.0278, 0.0298, 0.0344, ... 0.0459, 0.3240, 0.4262, 0.5719, 0.6528, 0.7590, 1.000]
如果選擇的顯著性水準為 0.05,我們可能會傾向於拒絕與前九個 p 值對應的檢定的虛無假設,因為前九個 p 值都低於選擇的顯著性水準。但是,這會忽略「多重性」問題:如果我們未能校正正在執行多重比較的事實,我們更有可能錯誤地拒絕真實的虛無假設。
解決多重性問題的一種方法是控制家族錯誤率 (FWER),即虛無假設實際上為真時被拒絕的比率。此類常見程序是 Bonferroni 校正 [1]。我們首先將 p 值乘以檢定的假設數量。
>>> import numpy as np >>> np.array(ps) * len(ps) array([1.5000e-03, 6.0000e-03, 2.8500e-02, 1.4250e-01, 3.0150e-01, 4.1700e-01, 4.4700e-01, 5.1600e-01, 6.8850e-01, 4.8600e+00, 6.3930e+00, 8.5785e+00, 9.7920e+00, 1.1385e+01, 1.5000e+01])
為了將 FWER 控制在 5%,我們僅拒絕與調整後 p 值小於 0.05 的假設相對應的假設。在這種情況下,只有與前三個 p 值相對應的假設可以被拒絕。根據 [1],這三個假設涉及「過敏反應」和「出血的兩個不同方面」。
另一種方法是控制偽發現率:被拒絕的虛無假設中實際上為真的預期比例。這種方法的優點是它通常提供更大的檢定力:在虛無假設確實為假時,增加拒絕虛無假設的比率。為了將偽發現率控制在 5%,我們應用 Benjamini-Hochberg p 值調整。
>>> from scipy import stats >>> stats.false_discovery_control(ps) array([0.0015 , 0.003 , 0.0095 , 0.035625 , 0.0603 , 0.06385714, 0.06385714, 0.0645 , 0.0765 , 0.486 , 0.58118182, 0.714875 , 0.75323077, 0.81321429, 1. ])
現在,前四個調整後的 p 值都低於 0.05,因此我們將拒絕與這四個 p 值相對應的虛無假設。拒絕第四個虛無假設對於原始研究尤為重要,因為它導致得出新療法具有「顯著降低的住院死亡率」的結論。