median_test#
- scipy.stats.median_test(*samples, ties='below', correction=True, lambda_=1, nan_policy='propagate')[原始碼]#
執行 Mood 中位數檢定。
檢定兩個或多個樣本是否來自具有相同中位數的母體。
令
n = len(samples)
為樣本數。計算所有資料的「總中位數」,並透過將每個樣本中的值分類為高於或低於總中位數來形成列聯表。列聯表,連同 correction 和 lambda_,會傳遞給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_contingency
或scipy.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 的選擇很敏感。