兩組獨立樣本變異數不相同 t 檢定 (Two-Sample t test with unequal variances,parametric)
套路 10: 兩組獨立樣本變異數不相同 t 檢定
(Two-Sample t test with unequal
variances,parametric)
什麼是兩組獨立樣本假設檢定? 說白了就是兩組分別獨立取樣的資料做比較的假設檢定。統計假設檢定檢定什麼?看H0。例如兩組獨立樣本假設檢定H0 : μ1
= μ2,HA : μ1
¹ μ2是檢定兩組資料的平均值是否相同。又例如兩組獨立樣本假設檢定H0 : μ1 < μ2,HA : μ1
³ μ2是檢定第一組資料的平均值是否小於第二組資料的平均值。假設相等時為雙尾 (two-tailed test) 檢定。假設不相等時為單尾 (one-tailed test) 檢定。如下圖所示:
1. 使用時機: 用於比較兩組變異數不相同獨立樣本的平均值(mean)。大樣本用Z檢定小樣本用t檢定。
2. 分析類型: 母數分析(parametric analysis)。直接使用資料數值算統計叫parametric方法,把資料排序之後用排序的名次算統計叫non-parametric方法。
3. 前提假設: 資料為常態分布(normal distribution)或接近常態分布,但是變異數不同(unequal variance)。
4. 資料範例: 咪路比較每單位面積溫室內及室外種植番茄產量(kg/m2),資料如下:
室外
|
69.3
|
75.5
|
81.0
|
74.7
|
72.3
|
78.7
|
76.4
|
70.5
|
77.9
|
|
|
溫室
|
69.5
|
64.6
|
74.0
|
84.8
|
76.0
|
93.9
|
81.2
|
73.4
|
88.0
|
79.5
|
90.2
|
請問溫室內及室外種植番茄平均重量是否相同? H0:
m1 = m2,HA: m1 ≠ m2。
5. 畫圖看資料分布:
oo = [69.3, 75.5, 81.0, 74.7, 72.3,
78.7, 76.4, 70.5, 77.9, 69.5, 64.6, 74.0, 84.8, 76.0, 93.9, 81.2, 73.4, 88.0,
79.5, 90.2]
ii = ["O","O","O","O","O","O","O","O","O","I","I","I","I","I","I","I","I","I","I","I"]
dat = {'Weight':oo,'Place':ii}
import pandas as pd
df = pd.DataFrame(dat)
import seaborn as sns
sns.set(style="whitegrid")
ax = sns.boxplot(x = "Place",
y = "Weight", data = df, width=0.2, palette="Set3")
ax = sns.swarmplot(x = "Place",
y = "Weight", data = df, color = "red")
結果:
6. 檢查資料是否為常態分布 (H0:資料為常態分佈):
dat1 = [69.3, 75.5, 81.0, 74.7, 72.3,
78.7, 76.4, 70.5, 77.9]
dat2 = [69.5, 64.6, 74.0, 84.8, 76.0,
93.9, 81.2, 73.4, 88.0, 79.5, 90.2]
import scipy.stats
scipy.stats.shapiro(dat1)
結果: (0.9732581377029419,
0.9210678935050964)
p = 0.921 > 0.05,接受H0:資料為常態分佈。
scipy.stats.shapiro(dat2)
結果: (0.9811203479766846,
0.9720683693885803)
p = 0.972 > 0.05,接受H0:資料為常態分佈。
7. 檢查資料是否為相同變異數 (H0: s12 = s22):
dat1 = [69.3, 75.5, 81.0, 74.7, 72.3,
78.7, 76.4, 70.5, 77.9]
dat2 = [69.5, 64.6, 74.0, 84.8, 76.0,
93.9, 81.2, 73.4, 88.0, 79.5, 90.2]
import scipy.stats
scipy.stats.levene(dat1, dat2, center
= 'mean')
結果: LeveneResult(statistic=5.990229809319114,
pvalue=0.024871842850068437)
p = 0.0248 < 0.05,不接受H0: s12 = s22。
# 相同變異數表示樣本來自相同母體(population),不同變異數表示樣本取樣自不同母體。
8. 使用Python計算兩組獨立樣本變異數不相同t檢定:
方法一: Python函數
dat1 = [69.3, 75.5, 81.0, 74.7, 72.3,
78.7, 76.4, 70.5, 77.9]
dat2 = [69.5, 64.6, 74.0, 84.8, 76.0,
93.9, 81.2, 73.4, 88.0, 79.5, 90.2]
import scipy.stats
scipy.stats.ttest_ind(dat1,
dat2, equal_var = False)
結果: Ttest_indResult(statistic=-1.4550671087001519,
pvalue=0.1675979242027971)
p = 0.1676 > 0.05,接受假設H0: m1 = m2,室內室外番茄平均重量相同。
方法二: Python 函數
dat1 = [69.3, 75.5, 81.0, 74.7, 72.3,
78.7, 76.4, 70.5, 77.9]
dat2 = [69.5, 64.6, 74.0, 84.8, 76.0,
93.9, 81.2, 73.4, 88.0, 79.5, 90.2]
import statsmodels.stats.weightstats
d1 =
statsmodels.stats.weightstats.DescrStatsW(dat1)
d2 = statsmodels.stats.weightstats.DescrStatsW(dat2)
statsmodels.stats.weightstats.CompareMeans(d1,
d2).ttest_ind(alternative = 'two-sided', usevar = 'unequal', value = 0)
# 相同變異數: usevar = 'pooled',不同變異數: usevar = 'unequal'。 value = 上述t公式中m1 - m2的值。
結果: (-1.4550671087001472, 0.16759792420279837,
14.069338084717309)
p = 0.1676 > 0.05,接受假設H0: m1 = m2,室內室外番茄平均重量相同。
留言
張貼留言