scipy.stats.

median_test#

scipy.stats.median_test(*samples, ties='below', correction=True, lambda_=1, nan_policy='propagate')[原始碼]#

執行 Mood 中位數檢定。

檢定兩個或多個樣本是否來自具有相同中位數的母體。

n = len(samples) 為樣本數。計算所有資料的「總中位數」,並透過將每個樣本中的值分類為高於或低於總中位數來形成列聯表。列聯表,連同 correctionlambda_,會傳遞給 scipy.stats.chi2_contingency 以計算檢定統計量和 p 值。

參數:
sample1, sample2, …array_like

樣本集。必須至少有兩個樣本。每個樣本必須是一個包含至少一個值的一維序列。樣本不需要具有相同的長度。

tiesstr,可選

決定在列聯表中如何分類等於總中位數的值。字串必須是以下之一

"below":
    Values equal to the grand median are counted as "below".
"above":
    Values equal to the grand median are counted as "above".
"ignore":
    Values equal to the grand median are not counted.

預設值為 “below”。

correctionbool,可選

如果為 True, 只有兩個樣本,則在計算與列聯表相關的檢定統計量時,套用 Yates 連續性校正。預設值為 True。

lambda_float 或 str,可選

預設情況下,此檢定中計算的統計量是皮爾森卡方統計量。lambda_ 允許改用 Cressie-Read 冪散度族系的統計量。詳見 power_divergence。預設值為 1(皮爾森卡方統計量)。

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

定義當輸入包含 nan 時如何處理。“propagate” 返回 nan,“raise” 拋出錯誤,“omit” 執行計算時忽略 nan 值。預設值為 “propagate”。

返回:
resMedianTestResult

一個包含屬性的物件

statisticfloat

檢定統計量。返回的統計量由 lambda_ 決定。預設值為皮爾森卡方統計量。

pvaluefloat

檢定的 p 值。

medianfloat

總中位數。

tablendarray

列聯表。表格的形狀為 (2, n),其中 n 是樣本數。第一列包含高於總中位數的值的計數,第二列包含低於總中位數的值的計數。該表允許使用例如 scipy.stats.chi2_contingencyscipy.stats.fisher_exact (如果只有兩個樣本)進行進一步分析,而無需重新計算表格。如果 nan_policy 為 “propagate” 且輸入中有 nan,則 table 的傳回值為 None

另請參閱

kruskal

計算獨立樣本的 Kruskal-Wallis H 檢定。

mannwhitneyu

計算樣本 x 和 y 的 Mann-Whitney 等級檢定。

註解

在版本 0.15.0 中新增。

參考文獻

[1]

Mood, A. M., Introduction to the Theory of Statistics. McGraw-Hill (1950), pp. 394-399.

[2]

Zar, J. H., Biostatistical Analysis, 5th ed. Prentice Hall (2010)。請參閱第 8.12 和 10.15 節。

範例

一位生物學家進行一項實驗,其中有三組植物。第 1 組有 16 株植物,第 2 組有 15 株植物,第 3 組有 17 株植物。每株植物產生許多種子。每組的種子數為

Group 1: 10 14 14 18 20 22 24 25 31 31 32 39 43 43 48 49
Group 2: 28 30 31 33 34 35 36 40 44 55 57 61 91 92 99
Group 3:  0  3  9 22 23 25 25 33 34 34 40 45 46 48 62 67 84

以下程式碼將 Mood 中位數檢定應用於這些樣本。

>>> g1 = [10, 14, 14, 18, 20, 22, 24, 25, 31, 31, 32, 39, 43, 43, 48, 49]
>>> g2 = [28, 30, 31, 33, 34, 35, 36, 40, 44, 55, 57, 61, 91, 92, 99]
>>> g3 = [0, 3, 9, 22, 23, 25, 25, 33, 34, 34, 40, 45, 46, 48, 62, 67, 84]
>>> from scipy.stats import median_test
>>> res = median_test(g1, g2, g3)

中位數為

>>> res.median
34.0

列聯表為

>>> res.table
array([[ 5, 10,  7],
       [11,  5, 10]])

p 值太大,無法斷定中位數不同

>>> res.pvalue
0.12609082774093244

可以透過傳遞 lambda_="log-likelihood"median_test 來執行 “G 檢定”。

>>> res = median_test(g1, g2, g3, lambda_="log-likelihood")
>>> res.pvalue
0.12224779737117837

中位數在資料中出現多次,因此如果使用例如 ties="above",我們會得到不同的結果

>>> res = median_test(g1, g2, g3, ties="above")
>>> res.pvalue
0.063873276069553273
>>> res.table
array([[ 5, 11,  9],
       [11,  4,  8]])

此範例示範如果資料集不大且有等於中位數的值,則 p 值可能對 ties 的選擇很敏感。