兩組獨立樣本Mann-Whitney U 檢定 (Two-Sample Mann-Whitney U test,non-parametric)


套路 11: 兩組獨立樣本Mann-Whitney U 檢定
(Two-Sample Mann-Whitney U testnon-parametric)

什麼是兩組獨立樣本假設檢定? 說白了就是兩組分別獨立取樣的資料做比較的假設檢定。統計假設檢定檢定什麼?H0。例如兩組獨立樣本假設檢定H0 : median1 = median2HA : median1median2是檢定兩組資料的中位數是否相同。又例如兩組獨立樣本假設檢定H0 : median1 < median2HA : median1 ³ median2是檢定第一組資料的中位數是否小於第二組資料的中位數。假設相等時為雙尾 (two-tailed test) 檢定。假設不相等時為單尾 (one-tailed test) 檢定。如下圖所示:
1. 使用時機: 用於比較兩組獨立樣本的中數(median)
2. 分析類型: 無母數分析(non-parametric analysis)直接使用資料數值算統計叫parametric方法把資料排序之後用排序的名次算統計叫non-parametric方法。
3. 前提假設: 不受限資料分布。
4. 資料範例: 咪路調查高一和大一學生體重(kg),資料如下:
高一
41
35
33
36
40
46
31
37
34
30
38
大一
52
57
62
55
64
57
56
55
60
59

請問兩組體重中數是否相同? H0: median1 = median2HA: median1median2
5. 畫圖看資料分布:
wt = [41, 35, 33, 36, 40, 46, 31, 37, 34, 30, 38, 52, 57, 62, 55, 64, 57, 56, 55, 60, 59]
cl = ["H","H","H","H","H","H","H","H","H","H","H","U","U","U","U","U","U","U","U","U","U"]
dat = {'Weight':wt,'Class':cl}
import pandas as pd
df = pd.DataFrame(dat)
import seaborn as sns
sns.set(style="whitegrid")
ax = sns.boxplot(x = "Class", y = "Weight", data = df, width=0.2, palette="Set3")
ax = sns.swarmplot(x = "Class", y = "Weight", data = df, color = "red")

結果:

6. 使用無母數分析不需檢查資料是否為常態分布 (H0:資料為常態分佈)

7. 使用無母數分析不需檢查資料是否為相同變異數 (H0: s12 = s22):

8. 使用Python計算兩組獨立樣本Mann-Whitney U檢定:
方法: Python 函數
dat1 = [41, 35, 33, 36, 40, 46, 31, 37, 34, 30, 38]
dat2 = [52, 57, 62, 55, 64, 57, 56, 55, 60, 59]
import scipy.stats
scipy.stats.mannwhitneyu(dat1, dat2, use_continuity = True, alternative = 'two-sided')
結果: MannwhitneyuResult(statistic=0.0, pvalue=0.000122899619852416)
p = 1.2e-4 < 0.05,不接受H0: median1 = median2兩組體重中數不相同。


留言

  1. 請問一下是您是如何讓pvalue顯示出值得呢?
    我跑程式後pvalue都只會顯示出0.0,請問是需要更改哪裡才能顯示出數值呢?

    回覆刪除

張貼留言

這個網誌中的熱門文章

三因子變異數分析 (Three-Way ANOVA)

兩組獨立樣本變異數相同 t 檢定 (Two-Sample t test with equal variances,parametric)

雙因子變異數分析 (Two-Way ANOVA)