scipy.stats.

combine_pvalues#

scipy.stats.combine_pvalues(pvalues, method='fisher', weights=None, *, axis=0, nan_policy='propagate', keepdims=False)[source]#

結合來自於相同假設的獨立檢定的 p 值。

這些方法僅適用於結合基於連續分佈的假設檢定的 p 值。

每種方法都假設在虛無假設下,p 值是從區間 [0, 1] 中獨立且均勻地採樣而來。計算檢定統計量(每種方法都不同),並根據虛無假設下此檢定統計量的分佈計算組合的 p 值。

參數:
pvaluesarray_like

p 值陣列,假設來自基於連續分佈的獨立檢定。

method{‘fisher’, ‘pearson’, ‘tippett’, ‘stouffer’, ‘mudholkar_george’}

用於組合 p 值的方法名稱。

可用的方法如下(詳細資訊請參閱「Notes」章節)

  • ‘fisher’:費雪法(Fisher’s combined probability test,費雪組合機率檢定)

  • ‘pearson’:皮爾森法(Pearson’s method)

  • ‘mudholkar_george’:穆德霍卡-喬治法(Mudholkar’s and George’s method)

  • ‘tippett’:提佩特法(Tippett’s method)

  • ‘stouffer’:史托弗 Z 分數法(Stouffer’s Z-score method)

weightsarray_like, optional

權重陣列(選用),僅用於史托弗 Z 分數法。其他方法會忽略。

axisint 或 None,預設值:0

若為整數,則為沿著輸入計算統計量的軸。輸入的每個軸切片(例如,列)的統計量將會出現在輸出的對應元素中。若為 None,輸入將會在計算統計量之前被展平(ravel)。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定義如何處理輸入的 NaN 值。

  • propagate:若 NaN 值出現在計算統計量的軸切片(例如,列)中,則輸出的對應條目將會是 NaN 值。

  • omit:在執行計算時將會忽略 NaN 值。若軸切片中剩餘的資料不足以計算統計量,則輸出的對應條目將會是 NaN 值。

  • raise:若出現 NaN 值,將會引發 ValueError

keepdimsbool,預設值:False

若設定為 True,則縮減的軸將會保留在結果中,作為大小為 1 的維度。使用此選項,結果將會正確地廣播(broadcast)以對抗輸入陣列。

返回:
resSignificanceResult

一個包含屬性的物件

statisticfloat

指定方法計算的統計量。

pvaluefloat

組合的 p 值。

Notes

如果此函數應用於具有離散統計量的檢定,例如任何等級檢定或列聯表檢定,則會產生系統性錯誤的結果,例如,費雪法會系統性地高估 p 值 [1]。當離散分佈變得近似連續時,此問題會變得較不嚴重。

方法之間的差異可以藉由它們的統計量以及在考慮顯著性時,它們強調的 p 值組合的哪些方面來最好地說明 [2]。例如,強調大 p 值的方法對強烈的偽陰性(false negative)和真陰性(true negative)更敏感;相反地,關注小 p 值的方法對陽性(positive)更敏感。

  • 費雪法的統計量(也稱為費雪組合機率檢定)[3]\(-2\sum_i \log(p_i)\),它等效於(作為檢定統計量)個別 p 值的乘積:\(\prod_i p_i\)。在虛無假設下,此統計量服從 \(\chi^2\) 分佈。此方法強調小 p 值。

  • 皮爾森法使用 \(-2\sum_i\log(1-p_i)\),它等效於 \(\prod_i \frac{1}{1-p_i}\) [2]。因此,它強調大 p 值。

  • 穆德霍卡和喬治透過平均費雪法和皮爾森法的統計量來折衷 [4]。他們的方法強調極端的 p 值,包括接近 1 和 0 的值。

  • 史托弗法 [5] 使用 Z 分數和統計量:\(\sum_i \Phi^{-1} (p_i)\),其中 \(\Phi\) 是標準常態分佈的 CDF。此方法的優點是容易引入權重,這可以使史托弗法比費雪法更強大,當 p 值來自不同規模的研究時 [6] [7]

  • 提佩特法使用最小的 p 值作為統計量。(請注意,此最小值不是組合的 p 值。)

費雪法可以擴展到結合來自相依檢定的 p 值 [8]。諸如布朗法(Brown’s method)和科斯特法(Kost’s method)等擴展方法目前尚未實作。

在版本 0.15.0 中新增。

從 SciPy 1.9 開始,np.matrix 輸入(不建議用於新程式碼)會在執行計算之前轉換為 np.ndarray。在這種情況下,輸出將會是純量或 np.ndarray 的適當形狀,而不是 2D np.matrix。同樣地,雖然會忽略遮罩陣列的遮罩元素,但輸出將會是純量或 np.ndarray,而不是具有 mask=False 的遮罩陣列。

參考文獻

[1]

Kincaid, W. M., “The Combination of Tests Based on Discrete Distributions.” Journal of the American Statistical Association 57, no. 297 (1962), 10-19.

[2] (1,2)

Heard, N. and Rubin-Delanchey, P. “Choosing between methods of combining p-values.” Biometrika 105.1 (2018): 239-246.

[4]

George, E. O., and G. S. Mudholkar. “On the convolution of logistic random variables.” Metrika 30.1 (1983): 1-13.

[6]

Whitlock, M. C. “Combining probability from independent tests: the weighted Z-method is superior to Fisher’s approach.” Journal of Evolutionary Biology 18, no. 5 (2005): 1368-1373.

[7]

Zaykin, Dmitri V. “Optimally weighted Z-test is a powerful method for combining probabilities in meta-analysis.” Journal of Evolutionary Biology 24, no. 8 (2011): 1836-1841.

範例

假設我們希望使用費雪法(預設值)結合來自四個相同虛無假設的獨立檢定的 p 值。

>>> from scipy.stats import combine_pvalues
>>> pvalues = [0.1, 0.05, 0.02, 0.3]
>>> combine_pvalues(pvalues)
SignificanceResult(statistic=20.828626352604235, pvalue=0.007616871850449092)

當個別 p 值具有不同的權重時,請考慮史托弗法。

>>> weights = [1, 2, 3, 4]
>>> res = combine_pvalues(pvalues, method='stouffer', weights=weights)
>>> res.pvalue
0.009578891494533616