兩組成對資料t檢定 (Paired t test,parametric)
套路 12: 兩組成對資料t檢定 (Paired t test,parametric)
什麼是兩組成對資料假設檢定? 說白了就是兩組成對的資料做比較的假設檢定。統計假設檢定檢定什麼?看H0。例如兩組獨立樣本假設檢定H0 : μ1
= μ2,HA : μ1
¹ μ2是檢定兩組資料的平均值是否相同。又例如兩組獨立樣本假設檢定H0 : μ1 < μ2,HA : μ1
³ μ2是檢定第一組資料的平均值是否小於第二組資料的平均值。假設相等時為雙尾 (two-tailed test) 檢定。假設不相等時為單尾 (one-tailed test) 檢定。如下圖所示:
1. 使用時機: 用於比較兩組成對資料的平均值(mean)。
2. 分析類型: 母數分析(parametric analysis)。直接使用資料數值算統計叫parametric方法,把資料排序之後用排序的名次算統計叫non-parametric方法。
3. 前提假設: 資料為常態分布(normal distribution)。
4. 資料範例: 咪路測量幫愛斯基摩人拉車的狗狗前腿與後腿長度,資料如下:
狗狗
|
後腿(cm)
|
前腿(cm)
|
1
|
14.2
|
13.8
|
2
|
14.0
|
13.6
|
3
|
14.4
|
14.7
|
4
|
14.4
|
13.9
|
5
|
14.2
|
14.3
|
6
|
14.6
|
14.1
|
7
|
14.9
|
14.3
|
8
|
15.0
|
14.5
|
9
|
14.2
|
13.6
|
10
|
14.8
|
14.6
|
H0: 拉車的狗狗前腿與後腿長度沒差。HA: 拉車的狗狗前腿與後腿長度有差。
5. 畫圖看資料分布:
wt = [14.2,14.0,14.4,14.4,14.2,14.6,14.9,15.0,14.2,14.8,13.8,13.6,14.7,13.9,14.3,14.1,14.3,14.5,13.6,14.6]
cl =
["H","H","H","H","H","H","H","H","H","H","F","F","F","F","F","F","F","F","F","F"]
dat = {'Length':wt,'Leg':cl}
import pandas as pd
df = pd.DataFrame(dat)
import seaborn as sns
sns.set(style="whitegrid")
ax = sns.boxplot(x = "Leg",
y = "Length", data = df, width=0.2, palette="Set3")
ax = sns.swarmplot(x = "Leg",
y = "Length", data = df, color = "red")
結果:
6. 檢查資料是否為常態分布 (H0:資料為常態分佈):
dat1 = [14.2,14.0,14.4,14.4,14.2,14.6,14.9,15.0,14.2,14.8]
dat2 = [13.8,13.6,14.7,13.9,14.3,14.1,14.3,14.5,13.6,14.6]
import scipy.stats
scipy.stats.shapiro(dat1)
結果: (0.9258143305778503,
0.4080052673816681)
p = 0.408 > 0.05,接受H0:資料為常態分佈。
scipy.stats.shapiro(dat2)
結果: (0.9306259155273438,
0.4540773928165436)
p = 0.454 > 0.05,接受H0:資料為常態分佈。
7. 檢查資料是否為相同變異數 (H0: s12 = s22):
dat1 = [14.2,14.0,14.4,14.4,14.2,14.6,14.9,15.0,14.2,14.8]
dat2 = [13.8,13.6,14.7,13.9,14.3,14.1,14.3,14.5,13.6,14.6]
import scipy.stats
scipy.stats.levene(dat1, dat2, center
= 'mean')
結果: LeveneResult(statistic=0.5203156109431457,
pvalue=0.47997243825459)
p = 0.4799 > 0.05,接受H0: s12 = s22。
# 相同變異數表示樣本來自相同母體(population),不同變異數表示樣本取樣自不同母體。
8. 使用Python計算兩組成對資料t檢定:
方法: Python函數
dat1 = [14.2,14.0,14.4,14.4,14.2,14.6,14.9,15.0,14.2,14.8]
dat2 =
[13.8,13.6,14.7,13.9,14.3,14.1,14.3,14.5,13.6,14.6]
import scipy.stats
scipy.stats.ttest_rel(dat1, dat2)
結果: Ttest_relResult(statistic=3.4137931034482767,
pvalue=0.00770322334726376)
p = 7.7e-3 < 0.05,不接受假設H0: 拉車的狗狗前腿與後腿長度沒差,前腿與後腿長度不相同。
留言
張貼留言